通过ABI在Android上拆分资产

Dep*_*pau 10 android assets native

我看过本指南,了解如何为每个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']
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用CMake构建本机可执行文件后,示例应用程序树:

src
  + main
      + assets
          + x86
          |   + native-x86.bin
          + x86_64
          |   + native-x86_64.bin
          + armeabi-v7a
          |   + native-arm.bin
          + arm64-v8a
              + native-aarch64.bin
Run Code Online (Sandbox Code Playgroud)

每个ABI目录都包含本机二进制文件

我希望每个拆分的APK仅包含特定于ABI的资产目录,并过滤其他目录。例如,对于arm64 APK:

assets
   + arm64-v8a
       + native-aarch64.bin
Run Code Online (Sandbox Code Playgroud)

iss*_*mux 0

检查这个Android 文档

一种解决方案是使用 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"
  }
  }
Run Code Online (Sandbox Code Playgroud)

希望这会对您有所帮助。