我有一个带有2个本地库的应用程序.第一个在ARMv7上工作得更快,所以我有ARMv7和ARMv5的版本.第二个在两个平台上的工作方式相同,因此只提供了ARMv5库.
我的本机库文件夹如下所示:
/jniLibs/
|
+---armeabi/
| |
| +---libFirstLibrary.so
| +---libSecondLibrary.so
|
+---armeabi-v7a/
|
+---libFirstLibrary.so
Run Code Online (Sandbox Code Playgroud)
该应用程序适用于生产中的所有设备和Android版本.
当我在Nexus 5上用L-Preview(hammerhead-lpv79-preview-ac1d8a8e.tgz)测试它时,我收到此错误:
java.lang.UnsatisfiedLinkError: Couldn't load SecondLibrary from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.package-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.package-1, /vendor/lib, /system/lib]]]: findLibrary returned null
at java.lang.Runtime.loadLibrary(Runtime.java:358)
at java.lang.System.loadLibrary(System.java:610)
Run Code Online (Sandbox Code Playgroud)
问题在于,尽管Nexus 5已CPU_ABI设置armeabi-v7a并CPU_ABI2设置为armeabi,但L-Preview仅使用CPU_ABI值并仅在"armeabi-v7a"文件夹中查找"SecondLibrary"并且因为它不存在而崩溃.
当我将.so文件复制到"armeabi-v7a"文件夹时,一切都很好,但APK大3.5 MB,我真的不喜欢.
这只是Android L-Preview或某些"新功能"的错误吗?