Android studio 自動化構(gòu)建打包

關(guān)于gradle下Android{}的配置字段說明如下:

defaultConfig{}默認(rèn)配置,是PriductFlavor類型,它共享給其他ProductFlavor使用

sourceSets{}源文件目錄設(shè)置,是AndroidSourceSet類型

buildtypes{} buildtype類型

sigingConfigs{}簽名配置,signingConfig類型

productFlavors{} 產(chǎn)品風(fēng)格配置,ProductFlavor類型

testOptions{} 測試配置 testOptions類型

aaptOptions{}? aapt配置? AaptOptions類型

lintOtions{} lint配置 lintOptons類型

dexOptions{} dex配置,DexOptions類型

compileOptions{} 編譯配置,CompileOptions類型

packagingOptions{} PackagingOptions類型

jacoco{} jacocoExtension類型 用于設(shè)定jacoco版本

splits{} Splits類型

腳本構(gòu)建工作如下

關(guān)于gradle配置編譯APK相關(guān)簽名如下;

signingConfigs {

? ? ? ? release {

? ? ? ? ? ? storeFile file('E:\Gsafty\keystoreName.keystore') //絕對路徑

? ? ? ? ? ? storePassword "12345678"

? ? ? ? ? ? keyAlias "alias"

? ? ? ? ? ? keyPassword "12345678"

? ? ? ? }

? ? }

構(gòu)建類型(開發(fā)過程中會不斷的提交測試debug包到測試人員去測試)

如下代碼僅做參考:

buildTypes {

? ? ? ? release {

? ? ? ? ? ? minifyEnabled false

? ? ? ? ? ? shrinkResources false

? ? ? ? ? ? zipAlignEnabled false

? ? ? ? ? ? proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'

? ? ? ? }

? ? ? ? debug {

? ? ? ? ? ? minifyEnabled false

? ? ? ? ? ? shrinkResources false

? ? ? ? ? ? zipAlignEnabled false

? ? ? ? }

? ? ? ? custom {

? ? ? ? ? ? minifyEnabled false

? ? ? ? ? ? shrinkResources false

? ? ? ? ? ? zipAlignEnabled false

? ? ? ? }

? ? ? ? sourceSets {

? ? ? ? ? ? main {

? ? ? ? ? ? ? ? jni.srcDirs = []

? ? ? ? ? ? }

? ? ? ? }

? ? }

多渠道打包構(gòu)建不同渠道的多爾類型APK

這里不同的渠道會根據(jù)構(gòu)建類型生產(chǎn)對應(yīng)的apk,其對應(yīng)關(guān)系為渠道種類*構(gòu)建編譯類型數(shù)等于編譯出的APK數(shù)。

/*多渠道包*/

? ? productFlavors{

? ? ? ? tencent{

? ? ? ? ? ? applicationId "com.domin.armn"

? ? ? ? ? ? versionCode "1.0"

? ? ? ? ? ? versionName "1.2.0"

? ? ? ? ? ? manifestPlaceholders = [appName: "tencent"]

? ? ? ? }

? ? ? ? baidu{

? ? ? ? ? ? applicationId "com.domin.armn"

? ? ? ? ? ? versionCode "1.0"

? ? ? ? ? ? versionName "1.2.0"

? ? ? ? ? ? manifestPlaceholders = [appName: "baidu"]

? ? ? ? }

? ? }

自定義生產(chǎn)APK包名稱

例如:module——flavor-version-time-buildtye.apk

在app下的build.gradle跟目錄下聲明如下。

//獲取當(dāng)前時間

def getCurrentTime() {

? ? return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))

}

在Android{}目錄下聲明如下:

/*apk重命名*/

? ? android.applicationVariants.all { variant ->

? ? ? ? variant.outputs.each { output ->

? ? ? ? ? ? def outputFile = output.outputFile

? ? ? ? ? ? if (outputFile != null && outputFile.name.endsWith('.apk')) {

? ? ? ? ? ? ? ? def buildType = variant.buildType.name

? ? ? ? ? ? ? ? //這里修改apk文件名,格式為 module_flavor-version-time-buildtype.apk

? ? ? ? ? ? ? ? def fileName = "Gsafety_${variant.productFlavors[0].name}-V${defaultConfig.versionName}-${getCurrentTime()}-${buildType}.apk"

? ? ? ? ? ? ? ? output.outputFile = new File(outputFile.parent, fileName)

? ? ? ? ? ? }

? ? ? ? }

? ? }

進階配置項

以上所有的配置尚且不能夠完全滿足自動化編譯,乃然需要用戶手動輸入命令去進行編譯APK包,這當(dāng)然不是我們最想要的結(jié)果

gradle執(zhí)行相關(guān)命令如下:

注:在使用編譯命令之前請確保gradle已經(jīng)加入環(huán)境變量,如果沒加入可以通過./gradlew代替gradle(只能在項目更目錄下使用)

1編譯所有productFlavor及對應(yīng)所有buildType的apk

$gradle assemble //僅僅執(zhí)行項目打包所必須的任務(wù)集

$gradle build? //執(zhí)行項目打包所必須的任務(wù)及,以及執(zhí)行自動化測試,所以會較慢

如果缺失某參數(shù),則會把該參數(shù)的所有配置都進行編譯,即如果運行g(shù)radle assembleFlavor,則會編譯出flavor所有buildType的apk

? ? ? ? 例如:

$gradle assemble

$gradle assembleflavorRelease

$gradle assembleflavorDebug

注:gradle支持命令縮寫,上面兩個命令也可以寫成如下格式

$gradle a

$gradle ass

$gradle aR

$gradle assflavorR

$gradle aD

$gradle assflavorD

在項目跟目錄下創(chuàng)建一個指定的文件夾(用于編譯跑腳本用),例如.config,然后在該目錄下分別創(chuàng)建.bat文件(win7上批處理后綴文件)和簽名文件

批處理文件如下build.bat

注意:這里可能會在cmd窗口出現(xiàn)中文亂碼,這是由于便于問題,不會影響編譯。

快速編譯打包apk腳本

echo 打包開始

sleep 1

執(zhí)行打包命令前,需要先定位到項目更目錄

cd

執(zhí)行打包命令

gradle a

echo -e? 打包完成

桌面右上角彈出通知

notify-send build.sh 打包完成

創(chuàng)建簽名文件sign.txt

簽名文件之所以放在外邊這里是為了更好的保護簽名文件,盡量少的給其他人知道《安全考慮》

android {

? ? signingConfigs {

? ? ? ? release {

? ? ? ? ? ? storeFile file('E:\Gsafty\keystoreName.keystore') //絕對路徑

? ? ? ? ? ? storePassword "12345678"

? ? ? ? ? ? keyAlias "alias"

? ? ? ? ? ? keyPassword "12345678"

? ? ? ? }

? ? }

}

將簽名文件應(yīng)用到app的buid.gradle文件下的Android{}

//加載簽名信息

? ? File configFile = file('../.config/sign.txt')

? ? if (configFile.exists()) {

? ? ? ? def signGradlePath = configFile.newReader().readLine().trim()

? ? ? ? println 'lucher, path:' + signGradlePath

? ? ? ? if (file(signGradlePath).exists()) {

? ? ? ? ? ? apply from: signGradlePath

? ? ? ? }

? ? }

最后就是給開發(fā)人員的福利,在window機器上直接點擊.bat文件執(zhí)行批處理命令,即可在項目build目錄下的apk目錄下的到對應(yīng)的apk包。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容