Gradle怎么按ABI分别生成Android安装包

大墨大大_2138

大墨大大_2138

2026-11-13

691人浏览

原创

核心在于目标差异:ndk.abiFilters仅过滤单个APK内.so库的ABI集合,生成一个通用包;splits.abi则按指定ABI分别生成多个独立APK(如app-arm64-v8a-release.apk),适配应用市场分发需求,并自动处理versionCode偏移与AndroidManifest注入。

gradle怎么按abi分别生成android安装包

Gradle 按 ABI 分别生成 Android 安装包,核心是启用 splits.abi 配置,而不是靠 ndk.abiFilters —— 后者只控制哪些 so 库打进单个 APK,不生成多个 APK。

为什么用 splits.abi 而不是 ndk.abiFilters

ndk.abiFilters 是过滤最终 APK 里包含哪些 ABI 的 so 库,结果仍是「一个 APK」;splits.abi 才是让 Gradle 输出多个 APK(如 app-arm64-v8a-release.apk、app-armeabi-v7a-release.apk)。

  • 如果你的目标是上传不同 ABI 包到华为/小米等应用市场,必须用 splits
  • 如果你只是想减小单个 APK 体积,用 abiFilters 就够了,不用分包
  • splits 生成的每个 APK 里只含对应 ABI 的 so,且 AndroidManifest.xml 会自动注入 android:versionCode 偏移(避免安装冲突)

在 build.gradle 中正确配置 splits.abi

必须写在模块级(通常是 app/build.gradle)的 android { } 块内,不是 defaultConfig 或 buildTypes 里。

  • enable true 是开关,不设就等于没开
  • 用 reset() + include 是最安全的方式,避免因 Gradle 版本差异带入意外 ABI(比如新版默认含 x86_64,但你根本不需要)
  • exclude 看似方便,但容易漏掉新增 ABI(如未来 Gradle 加了 riscv64),推荐显式 include

示例(Kotlin DSL):

android {
    splits {
        abi {
            enable = true
            reset()
            include("arm64-v8a", "armeabi-v7a")
            universalApk = false
        }
    }
}

build 命令和输出结果要注意什么

执行 ./gradlew assembleRelease 后,APK 不再只出一个 app-release.apk,而是按 ABI 分散在 build/outputs/apk/release/ 下:

Android Control
Android Control

通过命令行工具(uiautomator、screencap、input、am)控制安卓设备。优先尝试非 root 执行,失败后自动回退至 root...

下载
  • app-arm64-v8a-release.apk
  • app-armeabi-v7a-release.apk
  • 如果设了 universalApk = true,还会多一个 app-universal-release.apk(含全部 ABI,体积最大)

注意:versionCode 会被自动调整。比如你在 defaultConfig 里设的是 versionCode 100,Gradle 会给 arm64-v8a 包加 2、armeabi-v7a 加 1,变成 102 和 101 —— 这是为了防止用户从低 ABI 升级到高 ABI 时被系统拒绝安装。

容易踩的坑:ABI 兼容性与设备实际匹配

生成了 arm64-v8a 和 armeabi-v7a 两个包,并不意味着所有设备都能装对。关键看设备运行时报告的 ABI:

  • 64 位设备(如骁龙 8 Gen3)通常同时上报 arm64-v8a 和 armeabi-v7a,但 Google Play 优先匹配第一个,所以它会装 arm64-v8a 包
  • 纯 32 位设备(如旧款联发科 MT6582)只上报 armeabi-v7a,只能装对应包
  • 如果误把 x86 包上传到手机市场,用户下载后会提示 “This app is incompatible with your device”

真正需要验证的不是 Gradle 配置是否生效,而是最终 APK 的 lib/ 目录下是否只含目标 ABI 子目录,且里面 so 文件数量/名称与源码一致 —— 否则运行时 UnsatisfiedLinkError 会直接 crash。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
android开发三大框架
android开发三大框架

android开发三大框架是XUtil框架、volley框架、ImageLoader框架。本专题为大家提供android开发三大框架相关的各种文章、以及下载和课程。

2023.08.14

942

4

android是什么系统
android是什么系统

Android是一种功能强大、灵活可定制、应用丰富、多任务处理能力强、兼容性好、网络连接能力强的操作系统。本专题为大家提供android相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.22

2807

5

android权限限制怎么解开
android权限限制怎么解开

android权限限制可以使用Root权限、第三方权限管理应用程序、ADB命令和Xposed框架解开。详细介绍:1、Root权限,通过获取Root权限,用户可以解锁所有权限,并对系统进行自定义和修改;2、第三方权限管理应用程序,用户可以轻松地控制和管理应用程序的权限;3、ADB命令,用户可以在设备上执行各种操作,包括解锁权限;4、Xposed框架,用户可以在不修改系统文件的情况下修改应用程序的行为和权限。

2023.09.19

5697

7

android重启应用的方法有哪些
android重启应用的方法有哪些

android重启应用有通过Intent、PendingIntent、系统服务、Runtime等方法。本专题为大家提供Android相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

745

5

Android语音播放功能实现方法
Android语音播放功能实现方法

实现方法有使用MediaPlayer实现、使用SoundPool实现两种。可以根据具体的需求选择适合的方法进行实现。想了解更多语音播放的相关内容,可以阅读本专题下面的文章。

2024.03.01

984

5

Java Maven/Gradle 构建与依赖管理合集
Java Maven/Gradle 构建与依赖管理合集

系统讲解 Java 项目构建工具的使用与进阶配置,涵盖 Maven 的 POM 文件结构、生命周期(clean/compile/package/install/deploy)与插件机制、依赖范围(compile/provided/test/runtime)与传递依赖管理、多模块聚合与继承、私有 Nexus 仓库发布,以及 Gradle 的 Groovy / Kotlin DSL 语法、Task 自定义与增量构建、依赖版本目录(Versi

2026.05.09

409

25

Go-Zero零基础入门教程
Go-Zero零基础入门教程

本专题整理Go-Zero的入门知识,从框架定位、环境准备到跑通第一个API服务,讲清目录分层、配置加载、日志与中间件的基本用法,并对比Gin、Kratos的差异,帮助Go开发者建立整体认知,判断它是否适合当前项目。

2026.11.12

0

15

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

2026.11.06

120

12

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

2026.11.06

60

13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Gradle 9 主版本升级指南
Gradle 9 主版本升级指南

共0课时 | 0人学习

Gradle 安全最佳实践
Gradle 安全最佳实践

共0课时 | 0人学习

Gradle 依赖校验手册
Gradle 依赖校验手册

共0课时 | 0人学习