Включение библиотек AndroidX в проект Unity - PullRequest
0 голосов
/ 05 июня 2018

Я получаю пропущенные ошибки класса при запуске приложения Unity.У меня есть библиотека нативного кода, которую я написал, скомпилированный как aar.Я только что обновил некоторый код для поддержки локальных уведомлений на Android 8 и использовал класс Android X «Рабочий».Мой aar компилируется нормально, но я думаю, что мне не хватает библиотеки для включения в проект Unity.Какую библиотеку мне добавить?

Ошибка:

06-05 10:57:52.970: E/AndroidRuntime(21759): FATAL EXCEPTION: IntentService[com.help.stressfree.localnotifications.NotificationService]
06-05 10:57:52.970: E/AndroidRuntime(21759): Process: com.help.stressfree, PID: 21759
06-05 10:57:52.970: E/AndroidRuntime(21759): java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/work/Data$Builder;
06-05 10:57:52.970: E/AndroidRuntime(21759):    at com.help.stressfree.localnotifications.NotificationService.ScheduleNotification(NotificationService.java:99)
06-05 10:57:52.970: E/AndroidRuntime(21759):    at com.help.stressfree.localnotifications.NotificationService.onHandleIntent(NotificationService.java:82)
06-05 10:57:52.970: E/AndroidRuntime(21759):    at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:68)
06-05 10:57:52.970: E/AndroidRuntime(21759):    at android.os.Handler.dispatchMessage(Handler.java:105)
06-05 10:57:52.970: E/AndroidRuntime(21759):    at android.os.Looper.loop(Looper.java:164)
06-05 10:57:52.970: E/AndroidRuntime(21759):    at android.os.HandlerThread.run(HandlerThread.java:65)
06-05 10:57:52.970: E/AndroidRuntime(21759): Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.work.Data$Builder" on path: DexPathList[[zip file "/data/app/com.help.stressfree-FN_ED1fyI9LY4tcsB1RWqQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.help.stressfree-FN_ED1fyI9LY4tcsB1RWqQ==/lib/arm, /data/app/com.help.stressfree-FN_ED1fyI9LY4tcsB1RWqQ==/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]
06-05 10:57:52.970: E/AndroidRuntime(21759):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
06-05 10:57:52.970: E/AndroidRuntime(21759):    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
06-05 10:57:52.970: E/AndroidRuntime(21759):    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)

Это мой файл gradle для библиотеки aar, если он актуален:

//indicates that this is a library
apply plugin: 'com.android.library'

android {
    compileSdkVersion 27
    buildToolsVersion "27.0.3"

    sourceSets {
        main {
            //Path to your source code
            java {
                srcDir 'src/main/java'
            }
        }
    }

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 27
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    lintOptions {
        abortOnError false
    }
}

dependencies {
    compileOnly fileTree(include: ['*.jar'], dir: 'libs')
    androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support:support-v4:27.1.1'
    implementation 'com.android.support:support-media-compat:27.1.1'
    testImplementation 'junit:junit:4.12'
    compileOnly files('libs/classes.jar', 'libs/libmessaging_unity_player_activity.jar')

    def work_version = "1.0.0-alpha02"

    implementation "android.arch.work:work-runtime:$work_version" // use -ktx for Kotlin
}

//task to delete the old jar
task deleteOldJar(type: Delete) {
    delete 'default/AndroidPlugin.jar'
}

//task to export contents as jar
task exportJar(type: Copy) {
    from('build/intermediates/bundles/default/')
    into('libs/jar')
    include('classes.jar')
    ///Rename the jar
    rename('classes.jar', 'AndroidPlugin.jar')

}

exportJar.dependsOn(deleteOldJar, build)

//task to delete the old jar
task deleteOldAAR(type: Delete) {

}

//task to export contents as jar
task exportAAR(type: Copy) {
    from('build/outputs/aar/')
    into('libs/aars')
    include('app-debug.aar')
    ///Rename the jar
    rename('app-debug.aar', 'AndroidPlugin.aar')

}

exportAAR.dependsOn(deleteOldAAR, build)

1 Ответ

0 голосов
/ 11 июля 2019

Как я вижу, вы добавили свою библиотеку в виде файла aar, который не включает в себя зависимости библиотеки.Если вы используете Gradle, вы также должны добавить библиотечные зависимости, в данном случае android-workmanager.

Так что в этих ситуациях используйте следующие решения:

  • Вкл. Система Gradle , с файлом aar .

    • Включите также зависимости библиотеки (от файла build.gradle библиотеки на android studio).
  • Вкл. Система Gradle , с библиотекой в ​​виде maven артефакт:

    • Добавить зависимость и синхронизировать.Gradle будет включать в себя библиотечные зависимости.
  • Использование Jar resolver с файлом aar :
    • То же, что и Gradleтакже добавьте зависимости библиотеки в файл xml.
  • Использование Jar resolver с артефактом maven библиотеки
    • Добавить все зависимости в редактор xml.
  • Используя внутреннюю систему сборки, без менеджера зависимостей:
    • Получить aar или jar ofвсе зависимости и добавить его рядом с библиотекой.
...