最強打包插件麸折,支持fir,蒲公英上傳粘昨, 360加固 垢啼,自動生成二維碼

序言

由于公司的項目具有多個環(huán)境。每次打包都要手動選擇編譯類型张肾,打包還得上傳fir芭析,和蒲公英。最后截二維碼給測試捌浩。為了偷懶寫了一個gradle 腳本。實現(xiàn)以下功能

  1. 自定義打包類型工秩,可以指定buildType和flavor
  2. 支持定義多種尸饺,多個服務(wù)器,fir和蒲公英都支持助币,每種服務(wù)都可以配置多個浪听。
  3. 支持自動打包上傳,上傳使用curl具有上傳進度
  4. 支持360加固眉菱。只需要簡單配置即可實現(xiàn)360自動加固
  5. 支持自動獲取git日志作為更新日志
  6. 支持配置郵箱迹栓,實現(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-GitHub地址

在這里插入圖片描述

導入文件

將其中的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)的編碼朴爬。

小編教你把win10系統(tǒng)默認編碼為utf8

在這里插入圖片描述

3.郵箱配置

建議使用QQ郵箱即寒,手機上安裝QQ郵箱可以實時收到提醒。
進入QQ郵箱->設(shè)置->賬戶

在這里插入圖片描述

往下翻


在這里插入圖片描述

4.Fir Token 獲取

fir官網(wǎng)

在這里插入圖片描述

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ù)贞绳、更新日志)

curl 的用法指南
Android Gradle 插件版本說明

下載Android gradle 插件

分享一個下載gradle插件源碼的小技巧,只需要將你需要的gradle插件作為依賴配置在你的項目中
在這里插入圖片描述

然后gradle就會下載代碼致稀,可以通過反編譯查看一些Android gradle不同版本間實現(xiàn)的差異冈闭。這樣可以提高腳本的兼容性。


在這里插入圖片描述
在這里插入圖片描述
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抖单,一起剝皮案震驚了整個濱河市萎攒,隨后出現(xiàn)的幾起案子遇八,更是在濱河造成了極大的恐慌,老刑警劉巖耍休,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刃永,死亡現(xiàn)場離奇詭異,居然都是意外死亡羊精,警方通過查閱死者的電腦和手機斯够,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喧锦,“玉大人读规,你說我怎么就攤上這事∪忌伲” “怎么了束亏?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長供汛。 經(jīng)常有香客問我枪汪,道長,這世上最難降的妖魔是什么怔昨? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任雀久,我火速辦了婚禮,結(jié)果婚禮上趁舀,老公的妹妹穿的比我還像新娘赖捌。我一直安慰自己,他們只是感情好矮烹,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布越庇。 她就那樣靜靜地躺著,像睡著了一般奉狈。 火紅的嫁衣襯著肌膚如雪卤唉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天仁期,我揣著相機與錄音桑驱,去河邊找鬼。 笑死跛蛋,一個胖子當著我的面吹牛熬的,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赊级,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼押框,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了理逊?” 一聲冷哼從身側(cè)響起橡伞,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤盒揉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后兑徘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體预烙,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年道媚,在試婚紗的時候發(fā)現(xiàn)自己被綠了扁掸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡最域,死狀恐怖谴分,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情镀脂,我是刑警寧澤牺蹄,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站薄翅,受9級特大地震影響沙兰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜翘魄,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一鼎天、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暑竟,春花似錦斋射、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至腹躁,卻和暖如春桑包,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纺非。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工哑了, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人铐炫。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓垒手,卻偏偏與公主長得像蒜焊,于是被迫代替她去往敵國和親倒信。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容