序言
由于公司的項目具有多個環(huán)境。每次打包都要手動選擇編譯類型张肾,打包還得上傳fir芭析,和蒲公英。最后截二維碼給測試捌浩。為了偷懶寫了一個gradle 腳本。實現(xiàn)以下功能
- 自定義打包類型工秩,可以指定buildType和flavor
- 支持定義多種尸饺,多個服務(wù)器,fir和蒲公英都支持助币,每種服務(wù)都可以配置多個浪听。
- 支持自動打包上傳,上傳使用curl具有上傳進度
- 支持360加固眉菱。只需要簡單配置即可實現(xiàn)360自動加固
- 支持自動獲取git日志作為更新日志
- 支持配置郵箱迹栓,實現(xiàn)打包完成自動提醒。
說明
目前支持的Android gradle插件版本有 3.4.1 ,4.0.1 ,4.1.0
在項目根目錄的build.gradle文件中可以查看插件版本俭缓。4.1.0以上是否支持還沒測試克伊,可自行測試。
buildscript {
repositories {
google()
jcenter()
}
dependencies {
//gradle Android插件版本
classpath "com.android.tools.build:gradle:4.1.0"
}
}
效果
口說無憑直接看效果华坦。
功能 | 截圖 |
---|---|
自定義打包類型愿吹,可以指定buildType和flavor | |
通過簡單配置,自動生成相關(guān)任務(wù)雙擊即可執(zhí)行惜姐。 | |
發(fā)布到相關(guān)服務(wù)器顯示進度信息 | |
上傳成功自動生成二維碼彈出提示框 | |
支持360加固 | |
配置郵箱犁跪,發(fā)布成功自動提醒 |
使用
下載demo
相關(guān)的腳本和使用的demo已經(jīng)上傳至github椿息。需要先下載demo。
導入文件
將其中的publish文件夾引入到你的app module中
文件內(nèi)容說明
文件 | 功能 |
---|---|
icon/app_logo.png | 存放應(yīng)用的圖標坷衍,使用的時候寝优,直接覆蓋即可。建議尺寸150px*150px 太大的話還得壓縮沒必要枫耳。也可以不使用這個圖片乏矾,自行配置logo路徑既可 |
lib/AppPublish-1.0-SNAPSHOT.jar | 提供了彈窗功能,二維碼生成功能嘉涌,發(fā)送郵件功能 |
log | 主要是存放curl訪問接口時產(chǎn)生的臨時文件妻熊,訪問結(jié)束后會自動刪除。這個文件夾不要動它 |
publish.gradle | 所有功能的腳本仑最,生成打包扔役,發(fā)布,加固任務(wù) |
配置gradle
配置gradle.properties
為了能在多個項目共享配置警医,建議在gradle的安裝目錄亿胸,配置一個gradle.properties文件。也便于一個部門內(nèi)統(tǒng)一使用這個打包插件预皇。更多內(nèi)容可以參考【Gradle深入淺出】——Gradle配置(一)
文件位置
內(nèi)容
#-------------------------App發(fā)布助手需要的變量---start---------------------------
#注意配置的路徑的時候需要使用轉(zhuǎn)義符侈玄,:要加轉(zhuǎn)義符,\也要吟温。
#比如地址是E:\abc 需要寫成 E\:\\abc
#360加固配置
#360jar包地址序仙,不能包含中文
TRSJiaGuJirPath=E\:\\WORK\\JiaGu\\360jiagubao_windows_64\\jiagu\\jiagu.jar
#360用戶名
TRSJiaGuUserName=xxx
#360密碼
TRSJiaGuPassword=yyy
#打包輸出路徑,不能包含中文
TRSJiaGuOutPath=C\:\\Users\\Administrator\\Desktop\\360JiaGuOut\\
#Email配置
#Email的Smtp服務(wù)器地址
TRSPublishEmailServer=smtp.qq.com
#Email地址
TRSPublishEmailAddress=123123123@qq.com
#Email的密碼鲁豪,或者token
TRSPublishEmailPassword=abcdabcd
#Email功能是否啟用,true或fasle
TRSPublishEmailEnable=true
#公司的FIR
#api_token
TRSFirApiToken=abc123456789
#公司的蒲公英配置
#ukey
TRSPgyUKey=abc123456789
#api_key
TRSPgyApiKey=abc123456789
#安裝的時候使用密碼 true 或false
TRSPgyUsePasswordOnInstall=false
#安裝密碼
TRSPgyInstallPassword=123456
#-------------------------App發(fā)布助手需要的變量---end---------------------------
補充: 這個properties文件最后解析成一個Map<String,String> 所以如果是路徑包含了斜杠等符號潘悼,需要使用轉(zhuǎn)義。注釋中有說明爬橡。
定義在該文件中的變量可以在build.gradle中直接使用治唤。但是如果要讓其轉(zhuǎn)換成其他值,比如String轉(zhuǎn)Boolean需要這樣寫糙申。
email {
smtpServer TRSPublishEmailServer
emailAddress TRSPublishEmailAddress
emailPassWord TRSPublishEmailPassword
//string轉(zhuǎn)bool
enable TRSPublishEmailEnable.toBoolean()
}
因為360加固包不支持中文宾添,所以生成的apk的名字和存放的路徑都不能含有中文
項目中配置
這是demo中的完整build.gradle文件。方便大家查看 柜裸。相關(guān)的說明我都寫在注釋里了缕陕。
plugins {
id 'com.android.application'
}
//引用打包插件
apply from: "publish/publish.gradle"
//配置打包插件
ApkPublish {
//配置加固信息
jiaGu{
jarPath TRSJiaGuJirPath
userName TRSJiaGuUserName
password TRSJiaGuPassword
//outPutPath路徑中不能包含中文
outPutPath TRSJiaGuOutPath
}
//配置應(yīng)用信息,在彈窗和而成二維碼的時候需要使用
apkInfo {
appName "昨日頭條"
appLogo file("/publish/icon/app_logo.png")
}
//配置Email疙挺,如果不需使用榄檬,可以將enable設(shè)置為false
email {
smtpServer TRSPublishEmailServer
emailAddress TRSPublishEmailAddress
emailPassWord TRSPublishEmailPassword
enable TRSPublishEmailEnable.toBoolean()
}
//fir服務(wù)器,下面可以配置多個
fir {
//一個fir服務(wù)器衔统,"公司fir"是他的名字鹿榜,只有一個屬性apiToken
//可以配置多個海雪,只有名字唯一就行。該名字只需要配置為apk中的serverName屬性
//即可實現(xiàn)自動選擇該服務(wù)器作為上傳服務(wù)器
公司fir {
apiToken TRSFirApiToken
}
}
//蒲公英服務(wù)器舱殿,下面可以配置多個
pgy{
//一個蒲公英服務(wù)器奥裸,"公司pgy"是他的名字,需要兩個屬性
//uKey和apiKey
//usePasswordOnInstall 表示安裝的時候是否需要密碼 值是bool
//password 安裝需要的密碼沪袭,值是String
//可以配置多個湾宙,只有名字唯一就行。該名字只需要配置為apk中的serverName屬性
//即可實現(xiàn)自動選擇該服務(wù)器作為上傳服務(wù)器
公司pgy{
uKey TRSPgyUKey
apiKey TRSPgyApiKey
usePasswordOnInstall TRSPgyUsePasswordOnInstall.toBoolean()
password TRSPgyInstallPassword
}
}
//配置需要生成的apk文件
apk {
//配置一個apk文件
//“正式版”是它的名字冈绊,根據(jù)這個名字會生成3個任務(wù)
//打包正式版侠鳄,發(fā)布正式版,加固正式版
//buildType 值是String類型死宣,必須是Android配置下的的buildType中的某給值
//flavor 值是flavor 伟恶,必須是Android配置下的productFlavors中的某個值,沒有的話可以自己建一個
//serverName 上傳的服務(wù)器名稱毅该,必須是fir配置下博秫,或pgy配置下 某項的名字
//useGitLog 是否使用git日志作為更新日志。true的話會提取最近的五條日志作為更新日志
//否則更新日志會顯示upload by 打包助手
正式版 {
buildType "release"
flavor "official"
serverName "公司fir"
useGitLog true
}
測試版 {
buildType "release"
flavor "BJTest"
serverName "公司pgy"
useGitLog true
}
}
}
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "com.zgh.apkpublish"
minSdkVersion 16
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
//需要配置簽名眶掌,這樣才可以實現(xiàn)全過程的自動化
signingConfigs {
release {
storeFile file('../key/apk_publish.jks')
storePassword 'admin123'
keyPassword 'admin123'
keyAlias = 'publish'
}
}
buildTypes{
release{
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
//設(shè)置需要使用的簽名配置
signingConfig signingConfigs.release
}
debug{
//設(shè)置需要使用的簽名配置
signingConfig signingConfigs.release
}
}
//不同的產(chǎn)品風味
productFlavors {
flavorDimensions "api"
official {
buildConfigField "String", "BASE_URL", "\"正式環(huán)境\""
}
BJTest{
buildConfigField "String", "BASE_URL", "\"測試環(huán)境\""
}
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
補充說明
1.360加固配置
360加固下載地址
安裝成功以后它的安裝地址是
jar包就在這個位置
2.curl亂碼
win10 自帶了curl挡育。但是上傳的時候如果包含了中文會出現(xiàn)亂碼。比較簡單的解決辦法就是修改系統(tǒng)的編碼朴爬。
3.郵箱配置
建議使用QQ郵箱即寒,手機上安裝QQ郵箱可以實時收到提醒。
進入QQ郵箱->設(shè)置->賬戶
往下翻
4.Fir Token 獲取
5.蒲公英 uKey召噩,api key獲取
蒲公英首頁
點擊API信息
功能拓展
GUI擴展
我的GUI是自己編寫的庫也上傳到github了母赵,需要修改的可以自行fork。
GUI
gradle擴展
所有功能實現(xiàn)都在publish.gradle中蚣常∈醒剩可以自行閱讀痊银,擴展功能抵蚊。
也可以參考以下內(nèi)容實現(xiàn)擴展
Android Gradle學習(五):Extension詳解 這是一個系列,值得學習
【Gradle Task】FIR上傳腳本(cURL方式溯革、關(guān)聯(lián)git提交次數(shù)贞绳、更新日志)
下載Android gradle 插件
分享一個下載gradle插件源碼的小技巧,只需要將你需要的gradle插件作為依賴配置在你的項目中然后gradle就會下載代碼致稀,可以通過反編譯查看一些Android gradle不同版本間實現(xiàn)的差異冈闭。這樣可以提高腳本的兼容性。