Android应用构建:12:使用gradle wrapper进行APK文件构建
发布日期:2021-06-30 20:15:58 浏览次数:2 分类:技术文章

本文共 6420 字,大约阅读时间需要 21 分钟。

在这里插入图片描述

Android可以使用gradle进行构建的,而gradle wrapper除去首次使用的安装需要联网或者使用本地zip文件之外,使用起来和直接gradle几乎没有差别,这篇文章以前面使用Android Studio创建的安卓Demo应用为例,介绍如何使用gradle wrapper来进行apk文件的构建。

事前准备

SDK准备

sdk安装可参看如下内容:https://liumiaocn.blog.csdn.net/article/details/103626265

本文示例使用26.1.1的Android SDK。

注:当然也可以使用Android Studio安装的sdk,实际上只是需要将SDK根目录告诉gradle即可。

代码准备

示例代码工程:https://github.com/liumiaocn/easypack/tree/master/containers/standard/android/Demo

gradle配置设定:keystore设定

Demo应用中的keystore文件需要结合所在的目录进行实际修改,比如本文示例的Demo在/root目录下,所以相关配置文件修改如下:

[root@liumiaocn Demo]# grep -n jks app/build.gradle 6:            storeFile file('/root/Demo/keyReleaseV2.jks')15:            storeFile file('/root/Demo/keyReleaseV2.jks')[root@liumiaocn Demo]#

gradle wrapper准备

gradle wrapper首次执行时会下载相应的gradle并安装至当前用户的~/.gradle目录下,成功执行之后即可使用首次设定的gradle环境了。随便执行一个gradlew的命令即可,比如确认版本信息

[root@liumiaocn Demo]# ./gradlew --versionDownloading https://services.gradle.org/distributions/gradle-5.4.1-all.zip..............................................................................................................................Unzipping /root/.gradle/wrapper/dists/gradle-5.4.1-all/3221gyojl5jsh0helicew7rwx/gradle-5.4.1-all.zip to /root/.gradle/wrapper/dists/gradle-5.4.1-all/3221gyojl5jsh0helicew7rwxSet executable permissions for: /root/.gradle/wrapper/dists/gradle-5.4.1-all/3221gyojl5jsh0helicew7rwx/gradle-5.4.1/bin/gradleWelcome to Gradle 5.4.1!Here are the highlights of this release: - Run builds with JDK12 - New API for Incremental Tasks - Updates to native projects, including Swift 5 supportFor more details see https://docs.gradle.org/5.4.1/release-notes.html------------------------------------------------------------Gradle 5.4.1------------------------------------------------------------Build time:   2019-04-26 08:14:42 UTCRevision:     261d171646b36a6a28d5a19a69676cd098a4c19dKotlin:       1.3.21Groovy:       2.5.4Ant:          Apache Ant(TM) version 1.9.13 compiled on July 10 2018JVM:          1.8.0_232 (Oracle Corporation 25.232-b09)OS:           Linux 5.4.2-1.el7.elrepo.x86_64 amd64[root@liumiaocn Demo]#

从第2次开始gradlew就不再需要下载gradle了,会直接使用~/.gradle/wrapper下刚刚下载并设定好的5.4.1版本的gradle

[root@liumiaocn Demo]# ls ~/.gradledaemon  native  notifications  wrapper[root@liumiaocn Demo]# ./gradlew --version------------------------------------------------------------Gradle 5.4.1------------------------------------------------------------Build time:   2019-04-26 08:14:42 UTCRevision:     261d171646b36a6a28d5a19a69676cd098a4c19dKotlin:       1.3.21Groovy:       2.5.4Ant:          Apache Ant(TM) version 1.9.13 compiled on July 10 2018JVM:          1.8.0_232 (Oracle Corporation 25.232-b09)OS:           Linux 5.4.2-1.el7.elrepo.x86_64 amd64[root@liumiaocn Demo]#

构建

在使用gradlew构建安卓应用过程中最重要的设定就是和SDK的关联,和SDK的关联有两种方式,这里分别介绍如下

方式1: 设定环境变量

设定环境变量ANDROID_HOME

或者

设定环境变量ANDROID_SDK_ROOT

执行示例日志如下所示:

[root@liumiaocn Demo]# export ANDROID_SDK_ROOT=/usr/local/android[root@liumiaocn Demo]# find . -type f |grep apk[root@liumiaocn Demo]# ./gradlew assembleRelease> Task :app:lintVitalReleaseCalling mockable JAR artifact transform to create file: /root/.gradle/caches/transforms-2/files-2.1/053686f578beda34f83b61a336b8111f/android.jar with input /usr/local/android/platforms/android-29/android.jarDeprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.Use '--warning-mode all' to show the individual deprecation warnings.See https://docs.gradle.org/5.4.1/userguide/command_line_interface.html#sec:command_line_warningsBUILD SUCCESSFUL in 2m 46s26 actionable tasks: 25 executed, 1 up-to-date[root@liumiaocn Demo]#

确认创建的apk文件

[root@liumiaocn Demo]# find . -type f |grep apk./app/build/intermediates/apk_list/release/mainApkListPersistenceRelease/apk-list.gson./app/build/outputs/apk/release/output.json./app/build/outputs/apk/release/app-release.apk[root@liumiaocn Demo]#

此时local.properties文件中设定的实际是错误信息

[root@liumiaocn Demo]# grep sdk.dir local.properties sdk.dir=/Users/liumiao/Library/Android/sdk[root@liumiaocn Demo]#

方式2: 设定local.properties

此文件实际为Android Studio自动创建,在文件头可以看到,特意强调此文件不应该使用版本管理给管理起来而且也不应该编辑,其原因是因为Android Studio自动创建会覆盖此文件。而这个文件唯一的作用就是告诉gradle需要使用的sdk的位置。

[root@liumiaocn Demo]# cat local.properties ## This file is automatically generated by Android Studio.# Do not modify this file -- YOUR CHANGES WILL BE ERASED!## This file should *NOT* be checked into Version Control Systems,# as it contains information specific to your local configuration.## Location of the SDK. This is only used by Gradle.# For customization when using a Version Control System, please read the# header note.sdk.dir=/Users/liumiao/Library/Android/sdk[root@liumiaocn Demo]#

由于这里我们不直接使用Android Studio,而是使用gradle进行编译,所以可以直接修改sdk.dir为本地的sdk的安装目录, 首先事前设定此设定文件

[root@liumiaocn Demo]# vi local.properties [root@liumiaocn Demo]# grep sdk.dir local.properties sdk.dir=/usr/local/android[root@liumiaocn Demo]# unset ANDROID_SDK_ROOT[root@liumiaocn Demo]# env |grep ANDROID[root@liumiaocn Demo]# ./gradlew cleanBUILD SUCCESSFUL in 6s2 actionable tasks: 2 executed[root@liumiaocn Demo]# find . -type f |grep apk[root@liumiaocn Demo]#

然后执行构建,确认所生成的APK文件信息

[root@liumiaocn Demo]# ./gradlew assembleReleaseBUILD SUCCESSFUL in 1m 14s26 actionable tasks: 25 executed, 1 up-to-date[root@liumiaocn Demo]# find . -type f |grep apk./app/build/intermediates/apk_list/release/mainApkListPersistenceRelease/apk-list.gson./app/build/outputs/apk/release/output.json./app/build/outputs/apk/release/app-release.apk[root@liumiaocn Demo]#

常见问题

需要安装JDK而不是JRE

在编译的过程中需要使用JDK下的tools.jar等文件,如果安装的是JRE,在编译时一般会提示如下类似的错误信息

> Task :app:compileReleaseJavaWithJavac FAILEDFAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':app:compileReleaseJavaWithJavac'.> Could not find tools.jar. Please check that /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre contains a valid JDK installation.
  • 对应方法
    以CentOS的OpenJDK为例,java-1.8.0-openjdk.x86_64包安装的只是OpenJDK的JRE环境,而java-1.8.0-openjdk-devel.x86_64才是OpenJDK的开发包,所以需要安装的是java-1.8.0-openjdk-devel.x86_64

未设定SDK路径

如果未设定指定SDK路径的环境变量或者在设定文件中设定路径错误,会提示如下类似信息

Could not determine the dependencies of task ':app:compileReleaseJavaWithJavac'.> SDK location not found. Define location with an ANDROID_SDK_ROOT environment variable or by setting the sdk.dir path in your project's local properties file at '/root/Demo/local.properties'.
  • 对应方法
    设定ANDROID_HOME或者ANDROID_SDK_ROOT环境变量,或者设定local.properties中的sdk.dir

转载地址:https://liumiaocn.blog.csdn.net/article/details/103632174 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android应用构建:13:使用sdkmanager自动接受license的方法
下一篇:Android应用构建:11:使用sdkmanager安装Android SDK

发表评论

最新留言

不错!
[***.144.177.141]2024年05月05日 01时29分10秒