-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.gradle
140 lines (125 loc) · 4.96 KB
/
app.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
140
import com.farmer.open9527.buildsrc.*
apply {
plugin PluginsConfigs.Ids.Application
plugin PluginsConfigs.Ids.Kotlin
plugin PluginsConfigs.Ids.KotlinKapt
from '../common.gradle'
}
android {
defaultConfig {
applicationId AppConfigs.applicationId
resConfigs 'zh'
resConfigs 'xxhdpi'
proguardFiles 'proguard-sdk.pro', 'proguard-app.pro'
buildConfigField('boolean', 'LOG_ENABLE', '' + AppConfigs.logEnable + '')
buildConfigField('String', 'HOST_URL', '"' + AppConfigs.hostUrl + '"')
buildConfigField('String', 'HOST_TEST_URL', '"' + AppConfigs.hostTestUrl + '"')
buildConfigField('String', 'QQ_ID', '"' + AppConfigs.qqId + '"')
buildConfigField('String', 'QQ_SECRET', '"' + AppConfigs.qqSecret + '"')
buildConfigField('String', 'WX_ID', '"' + AppConfigs.wxId + '"')
buildConfigField('String', 'WX_SECRET', '"' + AppConfigs.wxSecret + '"')
addManifestPlaceholders([
'QQ_ID' : AppConfigs.qqId,
'QQ_SECRET': AppConfigs.qqSecret,
'WX_ID' : AppConfigs.wxId,
'WX_SECRET': AppConfigs.wxSecret
])
}
signingConfigs {
File signPropertiesFile = file("${rootDir.path}/sign/keystore.properties")
if (!signPropertiesFile.exists()) return
Properties properties = new Properties()
properties.load(new FileInputStream(signPropertiesFile))
config {
storeFile new File(signPropertiesFile.getParent(), properties['keystore'])
storePassword properties['storePassword']
keyAlias properties['keyAlias']
keyPassword properties['keyPassword']
}
}
buildTypes {
debug {
// 给包名添加后缀
applicationIdSuffix '.debug'
// 调试模式开关
debuggable true
jniDebuggable true
// 压缩对齐开关
zipAlignEnabled false
// 移除无用的资源
shrinkResources false
// 代码混淆开关
minifyEnabled false
// 签名信息配置
signingConfig signingConfigs.config
// 添加清单占位符
addManifestPlaceholders([
'app_name': 'OpenAndroid'
])
// 调试模式下只保留一种架构的 so 库,提升打包速度
ndk {
abiFilters 'armeabi-v7a'
}
}
preview.initWith(debug)
preview {
applicationIdSuffix ''
// 添加清单占位符
addManifestPlaceholders([
'app_name': 'OpenAndroid Preview 版'
])
}
release {
// 调试模式开关
debuggable false
jniDebuggable false
// 压缩对齐开关
zipAlignEnabled true
// 移除无用的资源
shrinkResources true
// 代码混淆开关
minifyEnabled true
// 签名信息配置
signingConfig signingConfigs.config
// 添加清单占位符
addManifestPlaceholders([
'app_name': '@string/app_name'
])
// 仅保留两种架构的 so 库,根据 Bugly 统计得出
ndk {
// armeabi:万金油架构平台(占用率:0%)
// armeabi-v7a:曾经主流的架构平台(占用率:10%)
// arm64-v8a:目前主流架构平台(占用率:95%)
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
packagingOptions {
// 剔除这个包下的所有文件(不会移除签名信息)
exclude 'META-INF/*******'
}
// AOP 配置(exclude 和 include 二选一)
// 需要进行配置,否则就会引发冲突,具体表现为:
// 第一种:编译不过去,报错:java.util.zip.ZipException:Cause: zip file is empty
// 第二种:编译能过去,但运行时报错:ClassNotFoundException: Didn't find class on path: DexPathList
// aspectjx {
// // 排除一些第三方库的包名(Gson、 LeakCanary 和 AOP 有冲突)
// // exclude 'androidx', 'com.google', 'com.squareup', 'org.apache', 'com.alipay', 'com.taobao', 'versions.9'
// // 只对以下包名做 AOP 处理
// include android.defaultConfig.applicationId
// }
applicationVariants.all { variant ->
// apk 输出文件名配置
variant.outputs.all { output ->
outputFileName = rootProject.getName() + '_v' + variant.versionName + '_' + variant.buildType.name
if (variant.buildType.name == buildTypes.release.getName()) {
outputFileName += '_' + new Date().format('MMdd')
}
outputFileName += '.apk'
}
}
}
dependencies {
implementation LibsConfigs.Material
implementation LibsConfigs.ConstraintLayout
}