-
Notifications
You must be signed in to change notification settings - Fork 75
/
build.gradle
191 lines (167 loc) · 5.52 KB
/
build.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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion SysConfig.compileSdkVersion
defaultConfig {
minSdkVersion SysConfig.minSdkVersion
targetSdkVersion SysConfig.targetSdkVersion
versionCode 1
versionName "1.0"
consumerProguardFiles "consumer-rules.pro"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
ext.enableCrashlytics = false
ext.alwaysUpdateBuildId = false
aaptOptions {
cruncherEnabled false
}
}
/**
* 建议提测用这个构建类型,并使用 BuildConfig.BUILD_TYPE 判断是否等于 beta,作为
* 开启动态修改 Url,动态打开日志等功能的标记。
*/
beta {
initWith release
}
}
buildFeatures{
dataBinding = true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "${JavaVersion.VERSION_1_8}"
}
sourceSets {
main {
java {
/*
TODO 这里似乎无法根据配置来排除某些类,而是取决于是否使用了某类来自动排除
*/
}
}
}
}
/**
* TODO
* 根据配置文件,决定是否引入某些库。
* 如果框架中有用到某库,那么在排除该库的时候需要 compileOnly,以便编译通过,比如 room
* kapt 可能需要单独在 module 中声明
*/
dependencies {
api fileTree(dir: "libs", include: ["*.jar"])
// 这两个是创建项目默认就有的库
api Deps.kotlinStdLib
api Deps.kotlinKTX
// 兼容库
api Deps.appcompat
// 约束布局
api Deps.constraintLayout
// 侧滑布局,是用来界面侧滑退出的,因为只有一个类,就不做可配置去除了
api Deps.slidingPaneLayout
// 以下三个是为了使用最新的特性
api Deps.activity
api Deps.activityKTX
api Deps.fragment
// 在 Lifecycles 中使用协程,视图销毁则自动取消
api Deps.lifecycleRuntimeKTX
// 在 LiveData 中使用协程
api Deps.lifecycleLiveDataKTX
// 简化 Fragment 的 API 调用,同时通过 viewModels 扩展方法创建 vm 来的非常容易
api Deps.fragmentKTX
// 使用 Java8 替换 lifecycleCompiler,让 vm 可以感知 v 生命周期
api Deps.lifecycleJava8
// 监控应用的生命周期
checkMVVMConfigProperty(IncludeLib.lifecycleProcess, "lifecycleProcess")
if (IncludeLib.lifecycleProcess) {
api Deps.lifecycleProcess
} else {
compileOnly Deps.lifecycleProcess
}
// 内嵌的加载中库
checkMVVMConfigProperty(IncludeLib.loadSir, "loadSir")
if (IncludeLib.loadSir) {
api Deps.loadSir
} else {
compileOnly Deps.loadSir
}
// RecyclerView
checkMVVMConfigProperty(IncludeLib.recyclerView, "recyclerView")
if (IncludeLib.recyclerView) {
api Deps.recyclerView
} else {
compileOnly Deps.recyclerView
}
// 数据库
checkMVVMConfigProperty(IncludeLib.room, "room")
if (IncludeLib.room) {
api Deps.roomRuntime
// kapt Deps.roomCompiler
} else {
compileOnly Deps.roomRuntime
}
// 网络,默认使用 gson 解析 json
checkMVVMConfigProperty(IncludeLib.retrofit2, "retrofit2")
if (IncludeLib.retrofit2) {
api Deps.retrofit2
api Deps.gson
api Deps.gsonConverter
} else {
compileOnly Deps.retrofit2
compileOnly Deps.gsonConverter
}
// 图片,使用 glide
checkMVVMConfigProperty(IncludeLib.glide, "glide")
if (IncludeLib.glide) {
api Deps.glide
// kapt Deps.glideCompiler
} else {
compileOnly Deps.glide
}
// 权限申请
checkMVVMConfigProperty(IncludeLib.livePermissions, "livePermissions")
if (IncludeLib.livePermissions) {
api Deps.livePermissions
} else {
compileOnly Deps.livePermissions
}
// rx 系列,Kotlin 最好使用 flow,不要使用 rx
checkMVVMConfigProperty(IncludeLib.roomRxJava2, "roomRxJava2")
checkMVVMConfigProperty(IncludeLib.retrofit2RxJava2, "retrofit2RxJava2")
checkMVVMConfigProperty(IncludeLib.rxJava2, "rxJava2")
if (IncludeLib.roomRxJava2 || IncludeLib.retrofit2RxJava2 || IncludeLib.rxJava2) {
// 上面三个任意一个开启了,都需要以下这两个
api Deps.rxAndroid2
api Deps.rxJava2
if (IncludeLib.roomRxJava2) {
api Deps.roomRxJava2
}
if (IncludeLib.retrofit2RxJava2) {
api Deps.retrofit2RxJava2
} else {
// 避免和上述的 api 引用冲突,需要去除相关库
compileOnly(Deps.retrofit2RxJava2) {
exclude group: 'io.reactivex.rxjava2'
exclude group: 'org.reactivestreams'
}
}
} else {
// 不使用 rx,以下是为了让封装的代码编译通过
compileOnly(Deps.retrofit2RxJava2)
compileOnly Deps.rxAndroid2
}
// debug 阶段内存泄露检测
checkMVVMConfigProperty(IncludeLib.leakCanary2, "leakCanary2")
if (IncludeLib.leakCanary2) {
debugImplementation Deps.leakCanary2
}
}