Android、Flutter为不同的CPU架构包打包APK(v7a、v8a、x86)

默认情况下,Android和Flutter打包出来的Apk都是包含了所有架构的,这样打出来的apk体积相对于单架构的apk有点大。

这时,我们就需要分别打出不同的架构包。

架构

一般来说,x86代表32位CPU,x64(或者叫x86-64)代表64位CPU。

在Android中,支持专有cpu架构也是Application Binary Interface(ABI)。

Android开发者官网文档中支持的ABI。
在这里插入图片描述

armeabi-v7a

此 ABI 适用于基于 32 位 ARM 的 CPU,2016年之前大部分Android手机的cpu都是此架构。

arm64-v8a

此 ABI 适用于基于 ARMv8-A 的 CPU,支持 64 位 AArch64 架构,一般从2016年开始,主流Android手机的cpu架构都是arm64的。

x86

此ABI支持X86架构,像Intel、AMD的cpu都是基于此架构。
在2012-2016这段时间,为了赶上移动互联网的浪潮,Intel和Nvidia专门为Android手机和平板推出过X86架构的CPU,可惜都失败了。现在一般不需要适配此架构,除非APK需要安装在Intel平板上。

x86_64

此ABI支持x86-64位架构的CPU。同上

对于mipsmips64armeabi这些架构来说,Android从Android Plugin for Gradle 3.1.0(对应gradle 4.4)后不再支持,因为从NDK r17开始,不再将这些 ABI 作为支持的目标。

APK分包

Android

在模块级的build.gradle文件中,在android代码块中添加splits模块。
基本配置如下。

android {
  ...
  splits {

    // 基于不同的abi架构配置不同的apk
    abi {

      // 必须为true,打包才会为不同的abi生成不同的apk
      enable true
     
      // 默认情况下,包含了所有的ABI。
      // 所以使用reset()清空所有的ABI,再使用include指定我们想要生成的架构armeabi-v7a、arm-v8a
      reset()

      // 逗号分隔列表的形式指定 Gradle 应针对哪些 ABI 生成 APK。只与 reset() 结合使用,以指定确切的 ABI 列表。
      include "armeabi-v7a", "arm64-v8a"

      // 是否生成通用的apk,也就是包含所有ABI的apk。如果设为 true,那么除了按 ABI 生成的 APK 之外,Gradle 还会生成一个通用 APK。
      universalApk false
    }
  }
}

Flutter

使用以下命令后,会自动生成v7a、v8a、x86-64三种架构的apk。

flutter build apk --split-per-abi

生成位置在build/app/outputs/flutter-apk/。
在这里插入图片描述

如果你的 Flutter 项目使用了 Android V1 Embedding,但是你又需要打包 APK,可以考虑升级为 Android V2 Embedding。具体步骤如下: 1. 在 `android/gradle.properties` 文件中添加以下代码: ``` android.enableR8=false android.useAndroidX=true android.enableJetifier=true ``` 2. 在 `android/app/build.gradle` 文件中,将 `compileSdkVersion` 和 `targetSdkVersion` 修改为 `29`。 3. 在 `android/app/build.gradle` 文件中,将 `minSdkVersion` 修改为 `21`。 4. 在 `android/gradle/wrapper/gradle-wrapper.properties` 文件中,将 `distributionUrl` 修改为以下内容: ``` distributionUrl=https://services.gradle.org/distributions/gradle-6.7-all.zip ``` 5. 在 `android/build.gradle` 文件中,将 `classpath 'com.android.tools.build:gradle:3.4.0'` 修改为 `classpath 'com.android.tools.build:gradle:4.1.0'`。 6. 在 `android/gradle/wrapper/gradle-wrapper.properties` 文件中,将 `distributionUrl` 修改为以下内容: ``` distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip ``` 7. 在 `android/app/build.gradle` 文件中,将 `compileOptions` 修改为以下内容: ``` compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } ``` 8. 在 `android/app/build.gradle` 文件中,将 `dependencies` 修改为以下内容: ``` dependencies { implementation 'com.android.support:multidex:1.0.3' implementation 'androidx.multidex:multidex:2.0.1' } ``` 完成以上步骤后,重新运行 Flutter 项目并打包 APK 即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值