#android #native #android-appcompat
#Android #родной #android-appcompat
Вопрос:
Когда я добавляю appcompat_v7_4 в качестве проекта библиотеки в свой проект Android, мое приложение пытается найти собственные библиотеки в папке armeabi-v7a, но у меня есть только папка armeabi. А затем приложение вылетает, потому что не может найти собственные библиотеки. Я создал папку armeabi-v7a и скопировал содержимое папки armeabi в папку armeabi-v7a, и приложение работало без сбоев. Какова связь appcompat_v7_4 с armeabi-v7a?
Трассировка стека выглядит следующим образом:
java.lang.NoClassDefFoundError: java.lang.ClassNotFoundException: com.googlecode.javacv.cpp.avcodec
at com.googlecode.javacpp.Loader.load(Loader.java:455)
at com.googlecode.javacv.cpp.avformat.<clinit>(avformat.java:76)
at com.butterfly.recorder.FFmpegFrameRecorder.<init>(FFmpegFrameRecorder.java:231)
at com.butterfly.RecordActivity.createRecorder(RecordActivity.java:329)
at com.butterfly.RecordActivity.initRecorder(RecordActivity.java:314)
at com.butterfly.RecordActivity.onClick(RecordActivity.java:518)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.googlecode.javacv.cpp.avcodec
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:251)
at com.googlecode.javacpp.Loader.load(Loader.java:453)
... 16 more
Caused by: java.lang.UnsatisfiedLinkError: Couldn't load jniavcodec from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.butterfly-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.butterfly-2, /vendor/lib, /system/lib]]]: findLibrary returned null
at java.lang.Runtime.loadLibrary(Runtime.java:358)
at java.lang.System.loadLibrary(System.java:526)
at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:593)
at com.googlecode.javacpp.Loader.load(Loader.java:489)
at com.googlecode.javacpp.Loader.load(Loader.java:431)
at com.googlecode.javacv.cpp.avcodec.<clinit>(avcodec.java:86)
... 19 more
Caused by: java.lang.UnsatisfiedLinkError: Couldn't load avcodec from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.butterfly-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.butterfly-2, /vendor/lib, /system/lib]]]: findLibrary returned null
at java.lang.Runtime.loadLibrary(Runtime.java:358)
at java.lang.System.loadLibrary(System.java:526)
at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:593)
at com.googlecode.javacpp.Loader.load(Loader.java:481)
... 21 more
Комментарии:
1. В AppCompat нет двоичных файлов NDK. Как вы определили, что ваше «приложение пытается найти собственные библиотеки в armeabi-v7a»?
2. @CommonsWare я обновил свой вопрос и подробно рассказал.
3. «А затем приложение вылетает, потому что не может найти собственные библиотеки» — пожалуйста, опубликуйте трассировку стека. «Какова связь appcompat_v7_4 с armeabi-v7a? » — его не должно быть.
4. код Java выполняется на виртуальной машине, чтобы избавить нас от архитектуры процессора и ОС, поэтому я не думаю, что архитектура процессора, такая как arm или atom, имеет какое-либо отношение к сбою вашего приложения.
5. @IllegalArgument: Нет, вполне возможно, что здесь есть проблемы, связанные с NDK, поскольку NDK приводит к коду, зависящему от архитектуры процессора. Просто AppCompat не должен влиять на появление этих проблем.