根本原因(也许在同一时间解决你的问题),这里是你可以做:
>删除jni文件夹和所有.mk文件。如果你不编译任何东西,你不需要这些也不需要NDK。
>将您的libcalculate.so文件复制到< project> / libs /(armeabi | armeabi-v7a | x86 | …)。当使用Android Studio时,它是jniLibs而不是libs,但我看到你使用eclipse。
>构建您的APK并将其打开为zip文件,以检查您的libcalculate.so文件是否在lib /(armeabi | armeabi-v7a | x86 | …)。
>删除并安装您的应用程序
>运行dumpsys软件包| grep yourpackagename获取应用程序的nativeLibraryPath或legacyNativeLibraryDir。
>在nativeLibraryPath上运行ls,或者在legacyNativeLibraryDir / armeabi上,检查libcalculate.so是否确实存在。
>如果它在那里,检查它是否没有从原来的libcalculate.so文件更改:它是根据正确的架构编译,是否包含预期的符号,是否有任何丢失的依赖。你可以使用readelf分析libcalculate.so。
为了检查步骤5-7,您可以使用我的应用程序而不是命令行和readelf:Native Libs Monitor
PS:很容易混淆.so文件应该放在或生成默认情况下,这里是一个总结:
> libs / CPU_ABI在eclipse项目中
> jniLibs / CPU_ABI在Android Studio项目中
> jni / CPU_ABI在AAR内
> lib / CPU_ABI里面的最终APK
>在< 5.0设备上的应用程序的nativeLibraryPath内部,以及在> = 5.0设备上的应用程序的legacyNativeLibraryDir / CPU_ARCH内部。
其中CPU_ABI是以下任一项:armeabi,armeabi-v7a,arm64-v8a,x86,x86_64,mips,mips64。根据您定位的架构和您的库已编译。
还要注意,libs不会混合在CPU_ABI目录之间:你需要你使用的完整集,armeabi文件夹内的lib不会安装在armeabi-v7a设备上,如果armeabi里面有任何库-v7a文件夹从APK。