您当前的位置: 首页 >  gradle

暂无认证

  • 0浏览

    0关注

    92582博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Android应用构建:12:使用gradle wrapper进行APK文件构建

发布时间:2019-12-20 19:59:38 ,浏览量:0

在这里插入图片描述 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 --version
Downloading 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/3221gyojl5jsh0helicew7rwx
Set executable permissions for: /root/.gradle/wrapper/dists/gradle-5.4.1-all/3221gyojl5jsh0helicew7rwx/gradle-5.4.1/bin/gradle

Welcome 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 support

For 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 UTC
Revision:     261d171646b36a6a28d5a19a69676cd098a4c19d

Kotlin:       1.3.21
Groovy:       2.5.4
Ant:          Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM:          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 ~/.gradle
daemon  native  notifications  wrapper
[root@liumiaocn Demo]# ./gradlew --version

------------------------------------------------------------
Gradle 5.4.1
------------------------------------------------------------

Build time:   2019-04-26 08:14:42 UTC
Revision:     261d171646b36a6a28d5a19a69676cd098a4c19d

Kotlin:       1.3.21
Groovy:       2.5.4
Ant:          Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM:          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:lintVitalRelease
Calling 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.jar

Deprecated 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_warnings

BUILD SUCCESSFUL in 2m 46s
26 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 clean

BUILD SUCCESSFUL in 6s
2 actionable tasks: 2 executed
[root@liumiaocn Demo]# find . -type f |grep apk
[root@liumiaocn Demo]#

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

[root@liumiaocn Demo]# ./gradlew assembleRelease

BUILD SUCCESSFUL in 1m 14s
26 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 FAILED
FAILURE: 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
关注
打赏
1653961664
查看更多评论
立即登录/注册

微信扫码登录

1.6013s