通过ABI在Android上拆分资产

时间:2018-08-23 10:11:29

标签: android native assets

我已经this guide看到了如何为每个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

1 个答案:

答案 0 :(得分:0)

选中此Android documentation

一种解决方案是使用Flavors。(未对此进行测试)

  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"
  }
  }

希望对您有帮助。