自定義Android Gradle工程
defaultConfig默認配置
defaultConfig是Android對象中的一個配置項,負責定義所有的默認配置力穗。一個基本的defaultConfig配置如下:
android{
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig{
applicationId "com.wangyz.app"
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
//...
}
}
applicationId
applicationId是ProductFlavor的一個屬性蹬敲,用于指定生成的App的包名发乔,默認情況下是Null.這個時候在構(gòu)建的時候,會從我們的AndroidManifest.xml文件讀取返干,也就是我們在AndroidManifest.xml文件中配置的manifest標簽的package屬性值升略。
minSdkVersion
minSdkVersion是ProductFlavor的一個方法,對應的方法原型為:
public void minSdkVersion(int minSdkVersion){
setMinSdkVersion(minSdkVersion);
}
它可以指定我們的App最低支持的Android操作系統(tǒng)版本累提,其對應的值是Android Sdk的API LEVEL.它還有兩個方法原型:
public void setMinSdkVersion(@Nullable String minSdkVersion){
setMinSdkVersion(getApiVersion(minSdkVersion))
}
public void minSdkVersion(@Nullable String minSdkVersion){
setMinSdkVersion(minSdkVersion)
}
targetSdkVersion
這個用于配置我們基于哪個Android SDK開發(fā),它的可選值和minSdkVersion一樣磁浇。沒有配置的時候斋陪,也會從AndroidManifest.xml讀取。
versionCode
它也是ProductFlavor的一個屬性置吓,用于配置Android App的內(nèi)部版本號无虚,是一個整數(shù),通常用于版本的升級衍锚,沒有配置的時候友题,從AndroidManifest.xml讀取。方法原型是:
@NonNull
public ProductFlavor setVersionCode(Integer versionCode){
mVersionCode = versionCode;
return this;
}
@Override
@NonNull
public Integer getVersionCode(){
return mVersionCode;
}
versionName
用于配置Android App的版本名稱戴质,如V1.0.0等度宦。
testApplicationId
用于配置測試App的包名踢匣,默認情況下是applicationId+".test"。
testInstrumentationRunner
用于配置單元測試時使用的Runner戈抄,默認使用的是android.test.InstrumentationTestRunner离唬。
signingConfig
配置默認的簽名信息,對生成的App簽名划鸽。
proguardFile
用于配置App ProGuard混淆所使用的Proguard配置文件输莺。
proguardFiles
這個也是配置ProGuard的配置文件,只不過它可以同時接受多個配置文件漾稀,因為它的參數(shù)是一個可變類型的參數(shù)模闲。
配置簽名信息
android{
compileSdkVersion 23
buildToolsVersion "23.0.1"
signingConfigs{
release{
storeFile file("myrelease.keystore")
storePassword "password"
keyAlias "MyReleaseKey"
keyPassword "password"
}
}
}
上面例子中建瘫,配置了一個名為release的簽名配置崭捍,除此之外,還可以配置多個不同的簽名信息啰脚。
android{
compileSdkVersion 23
buildToolsVersion "23.0.1"
signingConfigs{
release{
storeFile file("myrelease.keystore")
storePassword "password"
keyAlias "MyReleaseKey"
keyPassword "password"
}
debug{
storeFile file("mydebug.keystore")
storePassword "password"
keyAlias "MyDebugKey"
keyPassword "password"
}
}
}
現(xiàn)在已經(jīng)配置好了兩個簽名信息殷蛇,但還沒有被應用,應用方法如下:
android{
compileSdkVersion 23
buildToolsVersion "23.0.1"
signingConfigs{
release{
storeFile file("myrelease.keystore")
storePassword "password"
keyAlias "MyReleaseKey"
keyPassword "password"
}
debug{
storeFile file("mydebug.keystore")
storePassword "password"
keyAlias "MyDebugKey"
keyPassword "password"
}
}
defaultConfig{
applicationId "com.wangyz.app"
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
signingConfig signingConfigs.debug
}
}
除了上面的默認簽名配置外橄浓,也可以對構(gòu)建類型分別配置簽名信息粒梦。
android{
compileSdkVersion 23
buildToolsVersion "23.0.1"
signingConfigs{
release{
storeFile file("myrelease.keystore")
storePassword "password"
keyAlias "MyReleaseKey"
keyPassword "password"
}
debug{
storeFile file("mydebug.keystore")
storePassword "password"
keyAlias "MyDebugKey"
keyPassword "password"
}
}
buildTypes{
release{
signingConfig signingConfigs.release
}
debug{
signingConfig signingConfigs.debug
}
}
}
構(gòu)建的應用類型
如果想增加新的構(gòu)建類型,在buildTypes{}代碼塊中繼續(xù)添加元素就可以荸实。
applicationIdSuffix
applicationIdSuffix是BuildType的一個屬性匀们,用于配置基于默認的applicationId的后綴。
debuggable
debuggable用于配置一個可供調(diào)試的apk准给。其值可以true或false泄朴。
jniDebuggable
用于配置是否生成一個可供調(diào)試jni代碼的apk÷兜可接受boolean類型的值祖灰。
minifyEnabled
用于配置該BuildType是否啟用Proguard混淆,接受boolean類型的值畔规。
multiDexEnabled
用于配置該BuildType是否啟用自動拆分多個Dex的功能局扶。
proguardFile
用于配置Proguard混淆使用的配置文件。
proguardFiles
用于配置Proguard混淆使用的配置文件叁扫,可同時配置多個Proguard配置文件三妈。
shrinkResources
用于配置是否自動清理未使用的資源,默認為false莫绣。
signingConfig
配置該BuildType使用的簽名配置沈跨。
每一個BuildType都會生成一個SourceSet,默認位置為src//兔综。新增的BuildType名字不能是main和androidTest,因為這兩個已經(jīng)被系統(tǒng)占用鸠天,同時每個BuildType之間名稱不能相同。
使用混淆
代碼混淆是一個非常有用的功能秀菱,它不僅能優(yōu)化代碼质礼,讓apk包變得更小,還可以混淆原來的代碼费就,讓反編譯的人不容易看明白業(yè)務邏輯。
android{
buildTypes{
release{
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
debug{
}
}
}
啟用Zipalign優(yōu)化
zipalign是Android為我們提供的一個整理優(yōu)化apk文件的工具。它能提高系統(tǒng)和應用的運行效率硬鞍,更快地讀寫apk中的資源,降低內(nèi)存的使戴已。
android{
buildTypes{
release{
zipAlignEnabled true
}
debug{
}
}
}