Android 安卓NDK- ;使用gradle的多线程支持
我的问题是针对64位Android系统的原生Android开发 我正在寻找一种方法,使用gradle构建系统在64位Android系统上配置对32位编译本机库的支持。应用程序应该使用的库只能作为32位版本提供。将这些库移植到64位将非常耗时且容易出错 因此,我想配置gradle来部署这些预构建的32位二进制文件,并使用32位版本的Android应用程序 当前配置导致以下错误:Android 安卓NDK- ;使用gradle的多线程支持,android,android-studio,android-ndk,android-gradle-plugin,32bit-64bit,Android,Android Studio,Android Ndk,Android Gradle Plugin,32bit 64bit,我的问题是针对64位Android系统的原生Android开发 我正在寻找一种方法,使用gradle构建系统在64位Android系统上配置对32位编译本机库的支持。应用程序应该使用的库只能作为32位版本提供。将这些库移植到64位将非常耗时且容易出错 因此,我想配置gradle来部署这些预构建的32位二进制文件,并使用32位版本的Android应用程序 当前配置导致以下错误: E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: <ap
E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: <application_name>, PID: 2170
java.lang.UnsatisfiedLinkError:
dalvik.system.PathClassLoader
[DexPathList[[zip file "/data/app/<application_name>/base.apk"],
nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]]
enter code here`couldn't find "libmynativelibrary.so"
at java.lang.Runtime.loadLibrary(Runtime.java:366)
为了获得64位Android系统的32位应用程序部署,需要定义一个
armv7 productFlavor
和jniLibs
文件夹中的一个子文件夹,命名相应的体系结构
app/build.gradle
中的产品风味定义:
android {
productFlavors {
armv7 { ndk { abiFilter "armeabi-v7a" } }
fat
}
}
本机库结构:
app/src/main/jniLibs/armeabi-v7a
mulilib的概念仅适用于作为Android系统构建一部分的项目,您不应该设置Android:multiarch选项,因为您只有32位lib,因为此选项仅适用于同时向其他已安装应用程序提供32位和64位库的应用程序 64位Android系统直接支持32位应用程序。你只需要正确地打包你的应用程序,把你的.so文件放在APK的
lib/(armeabi-v7a,x86,…)
中,就像任何Android设备一样
在安装时,将安装设备首选的体系结构的LIB。ie:如果没有x86_64文件夹,将安装x86 libs;如果没有arm64-v8a文件夹,将安装armeabi-v7a libs,并且您的应用程序将以32位模式运行
如果lib下没有任何内容,则意味着Android Studio不知道您的.so文件。默认情况下,它会在
jniLibs/(armeabi-v7a,x86,…)
中查找它们,因此您应该将它们放在那里,或者将sourceset.main.jniLibs.srcDir
更改为您选择的目录。有人能解释一下“productFlavors”中的“fat”是什么,以及是否需要强制使用吗?
app/src/main/jniLibs/armeabi-v7a