Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓上ABI拆分资产_Android_Native_Assets - Fatal编程技术网

Android 安卓上ABI拆分资产

Android 安卓上ABI拆分资产,android,native,assets,Android,Native,Assets,我已经了解了如何为每个ABI构建拆分APK 然而,我的应用程序嵌入了大量本机可执行文件作为资产。是否可以根据ABI对其进行过滤 build.gradle的相关部分: android { ... splits { abi { enable true } } externalNativeBuild { cmake { path "CMakeLists.txt"

我已经了解了如何为每个ABI构建拆分APK

然而,我的应用程序嵌入了大量本机可执行文件作为资产。是否可以根据ABI对其进行过滤

build.gradle的相关部分

android {
    ...
    splits {
        abi {
            enable true
        }
    }
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
            // builds assets and places them in src/main/assets
        }
    }
    sourceSets {
        main {
            assets.srcDirs = ['src/main/assets']
        }
    }
}
使用CMake构建本机可执行文件后的示例应用程序树:

src
  + main
      + assets
          + x86
          |   + native-x86.bin
          + x86_64
          |   + native-x86_64.bin
          + armeabi-v7a
          |   + native-arm.bin
          + arm64-v8a
              + native-aarch64.bin
每个ABI目录都包含本机二进制文件

我希望每个拆分的APK只包含ABI特定的资产目录,其他的都经过筛选。例如,对于arm64 APK:

assets
   + arm64-v8a
       + native-aarch64.bin
检查这个

一个解决方案是使用香料。(没有测试)


希望这能对您有所帮助。

过去有一个使用产品口味的配方,尽管我最近没有研究过这一点。
  productFlavors {

   x86 {
    jniLibs.srcDir = /path/to/native-x86.bin
    //or maybe 
    assets.srcDirs = /path/to/native-x86.bin
     ndk {
      abiFilter "x86"
    }
   }
   armv7 {
    jniLibs.srcDir = /path/to/native-arm.bin
    ndk {
    abiFilter "armeabi-v7a"
  }
  }