《Gradle 權威指南》讀書筆記——第八章 自定義Android Gradle 工程

defaultConfit默認配置
defaultConfig是Android對象中的一個配置塊,負責定義所有的默認配置.他是一個ProductFlavor,如果一個ProductFlavor沒有特殊定義配置,默認會使用defaultConfig{}指定配置

android{
    compileSdkVersion 23
    buildToolsVersion "23.0.1"
    defaultConfig{
        applicationId "com.xx.app.xx"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
}
​

applicationId
applicationId是ProductFlavor的一個屬性,用於指定app的包名,默認是null.
爲null時,在構建過程中會從AndroidManifest.xml中讀取,
manifest標籤的package屬性

minSdkVersion
是ProductFlavor的一個方法

public void minSdkVersion(int minSdk){
​
    setMinSdkVersion(minSdk);
​
}
​
public void setMinSdkVersion(@Nullable String minSdkVersion){
​
    setMinSdkVersion(getApiVersion(minSdkVersion))
​
}
​
public void MinSdkVersion(@Nullable String minSdkVersion){
​
    setMinSdkVersion(getApiVersion(minSdkVersion))
​
}
​

versionCode
ProductFlavor的一個屬性,配置AndroidApp的內部版本號.沒有配置時從AndroidManifet.xml中讀取

public ProductFlavor setVersionCode(Integer version){
​
    mVersionCode=versionCode;
​
    return this;
​
}
​
public Integer getVersion(){
​
    return mVersionCode;
​
}


versionName
versionName和versionCode類型,也是ProductFlavorde一個屬性,用於讓用戶知道我們的應用的版本.

testApplicationId
用於配置測試App的包名,默認情況是applicationId+”.test”.
一般情況下默認即可,它也是ProductFlavor的一個屬性

public ProductFlavor setTestApplicationId(String applicationId){
    mTestApplicationId=applicationId;
    return this;
}
​
public String getTestApplicationId(){
    return mTestApplicationId;
}

testInstrumentationRunner
用於配置單元測試用的Runner,默認使用的是android.test.InstumentationTestRunner,如果想使用自定義的配置,
修改該值即可

SigningConfig
配置默認的簽名信息,對生成的app簽名.
也是ProductFlavor的一個屬性,可以直接對其進行配置

proguardFiles
配置混淆文件,可以接收多個文件

public void proguardFile(Object ..proguardFileArray){
​
    getproguardFiles().addAll(project.files(proguardFileArray.getfiles()));
​
}

配置簽名信息
一個app只有簽名之後才能被髮布 安裝 使用 ,簽名是保護app的方式,標記該app的唯一性.如果app被惡意篡改,簽名不一樣了,那麼該app就無法升級安裝.
app有debug release兩種模式:
debug , Android SDK爲我們提供了一個默認的debug簽名
release , debug模式無法發佈,所以我們要配置自己的簽名

/*
singingConfigs是android的一個方法,接口一個域對象(NamedDomaimobjectContainer)作爲其參數
,所以我們在signingConfigs{}中定義的都是一個SignConfig.
*/
android{
    ...
    signingConfigs{
        release{
            storeFile file("xx.keystore")
            storePassword "passwort"
            keyAlias "MyReleaseKey"
            keyPassword "password"
        }
        //debug簽名一般不手動配置,已經有默認配置了
        debug{
            storeFile file("$HOME/.android/debug.keystore")
            storePassword "password"
            keyAlias "MyDebugKey"
            keyPassword "password"          
        }
    }
    //配置好之後就可以進行引用了
    defaultConfig{
        applicationId "com.xx.app.projectName"
        minSdkVrsion 23
        targetTargetSdkVersion 25
        versionCode 1
        versionName "1.0"
        signingConfig signingConfigs.debug
    }
    //還可以針對類型分別配置簽名信息,例如對vip版本特別配置vip簽名
    buildTypes{
        release{
            signingConfig signingConfigs.release
        }
        debug{
            signingConfig signingConfigs.debug
        }
    }
}

構建的應用類型
debug 和realse的區別在於能否在設備上調試,以及簽名不同.
其他代碼和資源文件都是一樣的

android{
​
    buildTypes{
​
        release{
​
            minifyEnabled false
​
            proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguardrules.pro'
​
        }
​
        debug{
​
            ...
​
        }
​
        //新增類型很簡單,因爲buildTypes也是一個NamedDomainObjectContainer,直接在buildTypes增加元素
​
        vip{
​
​
​
        }
​
    }
​
}

BuildType屬性
每一個BuildType都會生成一個SourceSet,默認爲src//.
每一個SourceSet包含源代碼 資源文件等信息.
所以針對不同的BuildType我們可以單獨爲其指定Java源碼 res資源等.
每一個BuildType都會新增一個SourceSet所以注意不要命名爲main和androidTest,因爲已經被系統佔用
除了生成對應的SourceSet外,每一個BuildType還會生成assemable任務.
常用的asssemableRelease和assemableDebug就是Gradle(release,debug)自動生成的任務.
assemableXXX就能生成對應的apk文件

applicationIdSuffix:
用於配置基於默認的applicationId的後綴 , BuildType的一個屬性
如:
applicationId “com.xx.app.projectName”
applicationIdSuffix “.debug”
生成的apk包名爲 “com.xx.app.projectName.debug”

debuggable:
配置是否生成一個debug的apk,類型爲boolean , BuildType的一個屬性

jniDebuggable:
與Debuggable類似,配置是否生成jni代碼的apk, BuildType的一個屬性

其他配置屬性
minifyEnabled:
配置是否開啓混淆
mutilDexEnable:
配置是否開啓MutilDex
proguardFile:
配置混淆規則的文件
proguardFiles:
一次配置多個混淆文件
shrinkResources
配置是否自動移除未使用的資源文件,默認爲false
signingConfig
配置簽名默認設置

使用混淆
配置混淆

android{
​
    buildTypes{
        //僅發佈版開啓混淆
        release{
            minityEnabled ture
            //傳入文件名稱,獲取AndroidSdk中默認的混淆文件(tools/proguard/xx.txt)
            proguardFiles getDefaultProguardFile('proguard-android.txt')
            ,'proguard-rules.pro'
        }
        //因爲混淆後就無法斷點調試了
​
        debug{
​
        }
​
    }
​
}


編寫混淆規則

//AndroidSdk默認有兩個混淆文件
​
//1.proguard-android.txt
​
//2.proguard-android-optimize.txt,優化過的
​
public File getDefaultProguardFile(String name){
​
    File sdkDir=sdkHandler.getAndCheckSdkFolder();
​
    return new File(sdkDir,SdkConstants.FD_TOOLS+File.separatorChar
​
        +SdkConstants.FD_PROGUARD+File.separatorChar+name)
​
}
​

啓用zipalign優化
一個整理優化Apk文件的工具,推薦開啓

android{
    buildTypes{
        release{
            zipAlignEnabled true
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章