【问题标题】:Split assets by ABI on Android在 Android 上按 ABI 拆分资产
【发布时间】:2019-01-29 16:34:06
【问题描述】:

我已经看到 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

【问题讨论】:

  • 曾经有一个使用产品风味的配方,虽然我最近没有研究过这一点。

标签: android native assets


【解决方案1】:

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

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 2019-07-04
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多