盒子
盒子
文章目录
  1. 引言
  2. 我的配置
  3. 其他配置
  4. 小结

Gradle的定制

引言

AndroidStudio普及以来,一个完整的Android应用Gradle的配置必不可少,针对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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
apply plugin: 'com.android.application'
//打包的默认时间
def releaseTime() {
return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}
android {
compileSdkVersion ANDROID_BUILD_SDK_VERSION as int
buildToolsVersion ANDROID_BUILD_TOOLS_VERSION
defaultConfig {
applicationId "net.robinx.hengrui"
minSdkVersion ANDROID_BUILD_MIN_SDK_VERSION as int
targetSdkVersion ANDROID_BUILD_TARGET_SDK_VERSION as int
versionCode VERSION_CODE as int
versionName VERSION_NAME
vectorDrawables.useSupportLibrary = true
}
//签名文件配置
signingConfigs {
myConfig {
storeFile file('xxxxx.jks')
storePassword 'xxxxxx'
keyAlias 'xxxxx'
keyPassword 'xxxxx'
}
}
buildTypes {
release {
//签名文件配置
signingConfig android.signingConfigs.myConfig
minifyEnabled false
//混淆文件配置
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
// --------------多渠道打包自定义输出配置start-----------------------
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// 输出apk名称为HengRui_v1.0_2016-01-15_wandoujia.apk
def fileName = "HengRui_v${defaultConfig.versionCode}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
// --------------多渠道打包自定义输出配置end-----------------------
//百度地图Key
manifestPlaceholders = [baidu_map_key: "xxxxxxxxxxxxxxxxxxx"]
}
debug {
signingConfig android.signingConfigs.myConfig
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//百度地图Key
manifestPlaceholders = [baidu_map_key: "xxxxxxxxxxxxxxxxxxx"]
}
}
//--------------------多渠道打包start---------------------
productFlavors {
Default {}
// XiaoMI {}
// WanDouJia {}
// Oppo {}
// QiHu360 {}
// HuaWei {}
// YingYongBao {}
// BaiDu {}
// TaoBaoPP {}
// MeiZu {}
// GooglePlay {}
// CoolChua {}
// Pgyer {}
// SAMSUNG {}
// Lenovo {}
// AppChina {}
// Eoe {}
// Haixin {}
// Letv {}
// WoStore {}
// Gfan {}
// Nduoa {}
// MoguStore {}
// MuMaYI {}
// TianYi {}
// LiQucn {}
// AnZhuoYuan {}
// Mopo {}
// Ard9 {}
// AppFun {}
// AnBei {}
// YingYongBei {}
// AnFone {}
// ZhuoLe {}
// AndroidMarket {}
// UC {}
// MobileMarket {}
// KaiQi {}
// SouGou {}
// AiQiYi {}
// YunOS {}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
//--------------------多渠道打包end---------------------
//取出Link报错,否则无法打正式包
lintOptions {
checkReleaseBuilds false
abortOnError false
}
//aar目录
repositories {
flatDir {
dirs 'libs', '../lib.aar/libs'
}
}
}
dependencies {
//file lib
compile fileTree(include: ['*.jar'], dir: 'libs')
//module lib
compile project(':lib.aar')
//android lib
compile 'com.android.support:appcompat-v7:25.0.1'
}

这是平时自己用的配置,主要自定义了打包的文件名称,debug包使用release签名,以及多渠道打包

其他配置

网络上的一篇配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
applicationId "com.imliujun.gradle"
minSdkVersion 16
targetSdkVersion 25
versionCode gitVersionCode() //获取 git 的 commit 次数
versionName rootProject.ext.versionName
manifestPlaceholders = [UMENG_APP_KEY : "填你的友盟 APP KEY",
UMENG_CHANNEL_VALUE: "默认的渠道名"]
}
signingConfigs {
//在这里配置相关的签名信息
keyStore {
storeFile file("test.jks")
storePassword "111111"
keyAlias "test"
keyPassword "111111"
}
}
buildTypes {
release {
// 不显示Log
buildConfigField "boolean", "LOG_DEBUG", "false"
signingConfig signingConfigs.keyStore //设置签名文件
}
debug {
// 显示Log
buildConfigField "boolean", "LOG_DEBUG", "true"
versionNameSuffix "-debug" //设置后缀
signingConfig signingConfigs.keyStore //设置签名文件
manifestPlaceholders.UMENG_CHANNEL_VALUE = "test" //修改渠道名
}
}
productFlavors {
offline {
buildConfigField "String", "DOMAIN_NAME", "\"https://offline.domain.com/\""
versionName getTestVersionName() //修改 versionName
}
online {
buildConfigField "String", "DOMAIN_NAME", "\"https://online.domain.com/\""
}
admin {
buildConfigField "String", "DOMAIN_NAME", "\"https://admin.domain.com/\""
versionName rootProject.ext.versionName + "-管理员" //修改 versionName
manifestPlaceholders.UMENG_CHANNEL_VALUE = "admin" //修改渠道名
}
}
}

根目录gradle文件配置

1
2
3
4
5
6
7
8
9
10
11
12
ext {
versionName = "2.0.2"
testNum = "0001"
}
def getTestVersionName() {
return String.format("%s.%s", rootProject.ext.versionName,
rootProject.ext.testNum)
}
static int gitVersionCode() {
def count = "git rev-list HEAD --count".execute().text.trim()
return count.isInteger() ? count.toInteger() : 0
}

与自己平时使用的有些细微差别,可以参看这篇文章http://www.imliujun.com/gradle1.html

小结

结合两者相信可以定制出适合自己项目的gradle配置

转载请指明出处RobinBlog:http://robinx.net/2017/07/20/Gradle的定制/