Android 安卓NDK- ;使用gradle的多线程支持

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

我的问题是针对64位Android系统的原生Android开发

我正在寻找一种方法,使用gradle构建系统在64位Android系统上配置对32位编译本机库的支持。应用程序应该使用的库只能作为32位版本提供。将这些库移植到64位将非常耗时且容易出错

因此,我想配置gradle来部署这些预构建的32位二进制文件,并使用32位版本的Android应用程序

当前配置导致以下错误:

 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