Gradle是一個基于Apache Ant和Apache Maven概念的項(xiàng)目自動化建構(gòu)工具褒墨。它使用一種基于Groovy的特定領(lǐng)域語言(DSL)來聲明項(xiàng)目設(shè)置驳癌,拋棄了基于XML的各種繁瑣配置宛蚓。
-
構(gòu)建工具包括 make,Ant,Maven,Lvy和現(xiàn)在的Gradle,差不多是一步步進(jìn)化而來,前面幾種都是基于XML,不擅長if這類邏輯判斷搂根,而Gradle基于Groovy有自己的語法。
Gradle與Android本身沒有任何關(guān)系铃辖,Gradle主要用于Java項(xiàng)目剩愧,不過還支持Android,C娇斩,C++仁卷。Gradle官方文檔:https://docs.gradle.org/current/release-notes
Google選用Gradle作為AS的構(gòu)建工具,集成了一套插件叫Android Gradle Plugin犬第,Gradle Plugin官方文檔:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Why-Gradle-
1.布局文件分包
將res文集愛你下的layout修改為layouts锦积,然后新建layout->activity,新建layout->adapter歉嗓,新建layout->fragment
新建layout->fragment充包,新建layout->content等等,然后在你的build.gradle下配置代碼:
main {
res.srcDirs = [
'src/main/res/layouts/activity',
'src/main/res/layouts/adapter',
'src/main/res/layouts/content',
'src/main/res/layouts/fragment',
'src/main/res/layouts',
'src/main/res'.
]
}
}
2.配置簽名信息
- 新建簽名信息
signingConfigs {
config {
storeFile file('xxx.jks')
storePassword '123456'
keyAlias 'meibaa'
keyPassword '123456'
}
}
-在buildTypes里面添加配置信息
buildTypes {
release {
signingConfig signingConfigs.config
}
}
3.為生成的apk添加代碼混淆遥椿,去除未用資源
shrinkResources true
zipAlignEnabled true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
當(dāng)然在生成apk的過程在可能會出現(xiàn)一些未知error
可以添加忽略
lintOptions {
checkReleaseBuilds false
abortOnError false
}
4.在debug測試過程和relaese過程中配置不同信息
buildTypes {
release {
buildConfigField("boolean", "isDebug", "false")
buildConfigField("String", "coder", "\"ZABone\"") //
buildConfigField("int", "age", "26")
}
debug {
applicationIdSuffix ".debug"
buildConfigField("boolean", "isDebug", "true")
buildConfigField("String", "coder", "\"ZABone\"") //
buildConfigField("int", "age", "26")
resValue("bool", "test_is_debug", "true")
resValue("string", "testCoder", "\"ZABone\"")
resValue("integer", "test_age", "26")
}
}
1.修改debug版本的包名
applicationIdSuffix ".debug"http://表示在當(dāng)前包名后面增加.debug也可以自定義
- 為debug和relaease版本配置不同信息:
-在java代碼里面生成
//添加了boolean類型的參數(shù)
buildConfigField("boolean", "isDebug", "true")
// 添加了String類型的參數(shù)
buildConfigField("String", "coder", "\"ZABone\"") //
// 添加了int類型的參數(shù)
buildConfigField("int", "age", "26")
//獲取方式 BuildConfig.isDebug BuildConfig.coder BuildConfig.age
- 在res文件下面生成xml
resValue("bool", "test_is_debug", "true")
resValue("string", "testCoder", "\"ZABone\"")
resValue("integer", "test_age", "26")
//獲取方式 getString(R.string.coder);
5. 設(shè)置渠道包(一般使用第三方例如umeng,當(dāng)然也可以自定義)
-在manifest里面添加渠道包名稱占位符
<meta-data
android:name="PRODUCT"
android:value="${CHANNEL_VALUE}"/>
-在build.gradle里面設(shè)置渠道信息
productFlavors {
xiaomi { manifestPlaceholders = [CHANNEL_VALUE: "XIAO_MI"] }
c360 { manifestPlaceholders = [CHANNEL_VALUE: "C360"] }
}
當(dāng)然在AS 3.0以后可能編譯不通過淆储,添加如下代碼于defaultConfig 下的versionCode下面即可
flavorDimensions "versionCode"
表示當(dāng)前渠道版本信息
6. 設(shè)置打包生成時(shí)間
-在defaultConfig中添加
buildConfigField("String", "buildTime", "\"" + getDate() + "\"")
-在build.gradle中的android包體之外添加
def getDate() {
return new Date().format("yyyy-MM-dd HH:mm:ss")
}
通過 BuildConfig.buildTime即可獲取build時(shí)間
7. 為jar包遠(yuǎn)程依賴設(shè)置代理
由于公司不能訪問外網(wǎng)冠场,而AS每次啟動需要連接遠(yuǎn)程依賴,可按照如下實(shí)現(xiàn)
-在app的build.gradle中添加遠(yuǎn)程依賴倉庫
repositories {
google()
jcenter()
//公司倉庫地址
maven{ url 'http://xxxx.yyy.com:8081/repository/android-public/'}
}
然后在所有的項(xiàng)目依賴中也添加
allprojects {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
//公司倉庫地址
maven{ url 'http://xxxx.yyy.com:8081/repository/android-public/'
credentials{
username '張三'
password '123456'
}
}
}
}
或許本砰,或出現(xiàn)305.jar包錯誤
在build.gradle中的android包體內(nèi)添加即可解決
configurations.all {
resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
}