乐于分享
好东西不私藏

Android Studio安卓项目gradle命令行apk打包(详细)

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
指定应用程序的目标SDK版本,系统会根据该版本启用相应的功能和特性

需要确保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