Android Studio安卓项目gradle命令行apk打包(详细)
一、知识扫盲
1. 关于build.gradle
Android Studio使用Gradle来构建项目。一个AS项目中可能存在多个build.gradle文件:
-
Project级别:位于项目根目录下 -
Module级别:位于app目录或其他模块目录下
如果使用gradle命令进行构建,需要在项目根目录执行相关命令!

2. 关于compileSdkVersion与targetSdkVersion
这两个配置通常出现在app或模块目录下的build.gradle中:
|
|
|
|---|---|
|
|
|
|
|
|
需要确保:compileSdkVersion >= targetSdkVersion
实际编译打包时使用compileSdkVersion对应的SDK版本进行打包。
2.1 SDK版本检查
拿到安卓项目时可以优先查看compileSdkVersion,然后检查Android Studio是否安装了对应版本的SDK。一般在点击Gradle提示的Sync Now后会自动安装。

2.2 仓库加速配置
项目根目录下build.gradle中repositories仓库加速,替换为国内源:
参考一(阿里云HTTP):
maven { url "http://maven.aliyun.com/nexus/content/groups/public/"}maven { url "http://maven.aliyun.com/nexus/content/repositories/jcenter"}maven { url "http://maven.aliyun.com/nexus/content/repositories/google"}maven { url "http://maven.aliyun.com/nexus/content/repositories/gradle-plugin"}
参考二(阿里云HTTPS):
// google()// jcenter()maven { url "https://www.jitpack.io"}maven { url "https://maven.aliyun.com/repository/releases"}maven { url "https://maven.aliyun.com/repository/google"}maven { url "https://maven.aliyun.com/repository/central"}maven { url "https://maven.aliyun.com/repository/gradle-plugin"}maven { url "https://maven.aliyun.com/repository/public"}

3. Gradle版本管理
不同安卓项目构建用的Gradle版本可能不同,一般AS会自动下载。可在gradle-wrapper.properties文件中查看版本信息。
如果因网络问题下载失败,可以使用国内镜像地址:https://mirrors.cloud.tencent.com
如果项目比较多且Gradle版本不同,建议直接复制对应版本的gradle可执行文件路径,再到项目根目录执行构建命令,无需配置系统环境变量。

3.1 gradlew打包
如果项目根目录有gradlew文件,也可以尝试使用gradlew打包。无论是gradle还是gradlew打包,都需要依靠安卓SDK platforms及build-tools等协同才能完成打包任务。

4. 核心环境组件
想要实现打包构建APK,必须了解以下3个核心概念:
-
JDK版本 -
安卓SDK platforms版本 -
Build-Tools版本
4.1 JDK配置
JDK是Java环境,一般使用1.8.0(对应环境变量JAVA_HOME)。理论上Gradle打包时可以在gradle.properties文件中手动指定JDK路径:
org.gradle.java.home=C:\Program Files\Java\jdk1.8.0_131
也有项目使用Java 11,建议确保安装好对应的JDK版本(安装时勾选设置环境变量即可)。

4.2 SDK Platforms与Build-Tools
安卓平台SDK platforms版本、Build-Tools、NDK其实都是Android SDK的组件!可以将Android SDK理解成开发组件管理器,它下面可以管理很多不同版本的组件。
版本对应关系:
-
SDK platforms版本跟compileSdkVersion相关 -
如果build.gradle配置compileSdkVersion 28,需要SDK platforms有安卓28版本(Android 9.0 Pie对应API 28) -
新版AS会根据platforms版本自动选择对应的Build-Tools版本 -
一般来说:platforms数字版本 ≈ build-tools数字版本 -
例如:platforms的android-28 对应 build-tools 28.0.3
关于NDK:大部分安卓开发使用不到NDK。如果项目只是调用第三方已编译好的so文件,也是不需要NDK的。
4.2.1 命令行SDK管理
Android SDK也有命令行版本,直接下载后通过sdk-tools/bin目录下的sdkmanager命令可以下载管理不同版本的platforms、build-tools。
也就是说,不需要下载Android Studio也可实现应用的打包编译:
-
正确的Gradle版本 -
下载的platforms版本 -
下载的build-tools版本
这种方式一般用于Jenkins等CI/CD打包环境。在开发电脑上打包测试通过后,整理出对应版本信息,直接在Jenkins服务器上同步安装即可!
下图为Android Studio中Android SDK管理界面,可以安装/卸载不同版本:


二、安卓APK打包
1. AS可视化打包
需要生成签名文件后再打包。假设项目已有签名文件,可以通过AS直接可视化打包:
操作路径:Build → Generate Signed Bundle / APK
打包后在项目app目录下的release/debug目录下生成APK文件。
也可以使用gradle/gradlew命令行打包(打包后在项目app/build/outputs/apk目录下)。

2. Gradle命令行打包
签名需要手动配置,可以参考网上的写法。注意app模块下的build.gradle中buildType配置项的release项需要添加签名配置。
核心打包命令:
gradle cleangradle assembleRelease
注意:如果gradle没有配置系统变量或版本不对会打包失败,可以将其换成对应版本的完整路径来执行命令!且需要切换命令的执行目录为项目根目录。


建议流程:命令行构建时建议先clean一下然后再构建。

参考链接
[1]使用gradle编译安卓APK包gradlew打包: https://blog.csdn.net/chuyouyinghe/article/details/134468339
[2]Android Studio 国内镜像与 SDK 下载速度优化: https://blog.csdn.net/i826056899/article/details/147381555
夜雨聆风