Не могу добавить .so файл в Android Studio 3.5.3, используя jniLibs - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь добавить файл .so в новый проект Android. Я использую Android Studio 3.5.3. Я сделал то, что было рекомендовано здесь и здесь ; поэтому я создал папки ( jniLibs / arm64-v8a , et c) в src / main и добавил их в app / build.gradle :

sourceSets {
    main {
        jniLibs.srcDirs = ['src/main/jniLibs']
    }
}

Я поместил файл libhl.so в / app / src / main / jniLibs / arm64-v8a (да, 64-битный должен быть в порядке). Проект скомпилируется просто отлично, но при выполнении он покажет следующую ошибку в logcat:

02-17 10:25:31.719 3691-3691/com.example.bmdtest03 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.bmdtest03, PID: 3691
    java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.bmdtest03-2/base.apk"],nativeLibraryDirectories=[/data/app/com.example.bmdtest03-2/lib/x86_64, /vendor/lib64, /system/lib64]]] couldn't find "libhl.so"
        at java.lang.Runtime.loadLibrary(Runtime.java:366)
        at java.lang.System.loadLibrary(System.java:989)
        at com.example.bmdtest03.MainActivity.<clinit>(MainActivity.java:14)
        at java.lang.reflect.Constructor.newInstance(Native Method)
        at java.lang.Class.newInstance(Class.java:1572)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1065)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
        at android.app.ActivityThread.access$800(ActivityThread.java:144)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

Вывод : файл есть, источник обновлен в build.gradle, что мне не хватает?

1 Ответ

0 голосов
/ 17 февраля 2020

Вы можете вручную создать .so файл с помощью NDK. Затем вы можете добавить файл lib.so в папку jni.

Добавьте путь NDK к вашим local.properties.

См. Эту страницу: https://developer.android.com/studio/projects/gradle-external-native-builds

Если это не работает. Вы можете создать Джаву, тогда вы можете получить к нему доступ. Ссылка для создания Джава: https://developer.android.com/training/articles/perf-jni

...