Android 中的 Gradle

如何理解Gradle? Gradle在Android的构建过程中有什么作用?

gradle 是一种高级构建工具包,它可以自动化执行和管理构建流程,同时也允许您定义灵活的自定义构建配置。每个构建配置均可自定义一组代码和资源,同时对所有应用版本共有的部分加以重复利用。Android Plugin for Gradle 与这个构建工具包协作,共同提供专用于构建和测试 Android 应用的流程和可配置设置。

Gradle在Android的构建过程中有什么作用,就是自动化执行编译应用资源和源代码,然后打包成可供测试、部署、签名和分发的 APK。

实践题

因为我对 gradle 了解甚微,因此没能做出时间题,于是我照着任玉刚提供的参考答案实现了一下,运行成功。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
project.afterEvaluate{
android.applicationVariants.each{ ApplicationVariant variant ->
String variantName = variant.name.capitalize()
def mergeManifestTask = project.tasks.getByName("process${variantName}Manifest")
mergeManifestTask.doLast { mm ->
def manifest = mm.manifestOutputFile
if(project.hasProperty("channel")){
addChannel(manifest)
}
}
}
}
def addChannel(File manifest){
def channelNo = project.property("channel")
def xml = new XmlParser().parse(manifest)
xml.application[0].appendNode("meta-data",['android:name':'channel','android:value':channelNo])
manifest.withPrintWriter("UTF-8"){
XmlUtil.serialize(xml,it)
}
}

项目的 build.gradle 的开头(我放在了 apply 的下方)需要导包

1
2
import com.android.build.gradle.api.ApplicationVariant
import groovy.xml.XmlUtil

然后,执行下列命令:

1
2
3
chmod 744 ./gradlew
./gradlew clean
gradle clean aR -P channel=10022

最后可以在 apk 清单文件中看到渠道号被添加。

动态添加渠道号

坚持原创技术分享,您的支持将鼓励我继续创作!