gradle+shell實現(xiàn)自動系統(tǒng)簽名
前言
有時候我們的應(yīng)用需要系統(tǒng)級的權(quán)限來實現(xiàn)一些功能(如靜默安裝),這時候需要給應(yīng)用打上系統(tǒng)簽名,常規(guī)操作打包apk,解壓apk,刪除META-INF中CERT.RSA和
CERT.SF,然后壓縮,用系統(tǒng)簽名工具簽名,一頓操作后可能十分鐘過去了,實在太過繁瑣,因此我們做了一些簡化,用gradle+shell幫我們實現(xiàn)自動化。
準備
1.android studio
2.系統(tǒng)簽名文件(signapk.jar、platform.x509.pem、platform.pk8)
3.如果是mac系統(tǒng),還需要libconscrypt_openjdk_jni.dylib這個文件
4.platform.x509.pem和platform.pk8是對應(yīng)系統(tǒng)的簽名,不同廠家可能有不同的
簽名文件,我這里的是Google原生的簽名文件。
5.文件在百度網(wǎng)盤
鏈接: https://pan.baidu.com/s/1_wGxfZcpmfmvCGPLSU-XWw 提取碼: d46k
6.本文以mac系統(tǒng)為例,windows的按著這思路,也差不多
編寫系統(tǒng)簽名腳本
#解壓 unzip -q app-release.apk -d ./release #刪除cert rm -f ./release/META-INF/CERT.RSA rm -f ./release/META-INF/CERT.SF #壓縮 cd ./release for file in $(ls) do zip -r -q app-release-tmp.apk -xi $file; done mv app-release-tmp.apk ../ cd .. #系統(tǒng)簽名 java -jar signapk.jar platform.x509.pem platform.pk8 app-release-tmp.apk app-sign.apk #清理臨時文件 rm -f app-release-tmp.apk rm -rf ./release
保存為sign.sh,與signapk.jar、platform.x509.pem、platform.pk8、libconscrypt_openjdk_jni.dylib放在同一目錄下,我這里是放在項目的
app/release/sign/目錄下
編寫打包和調(diào)用系統(tǒng)簽名腳本
#需注意配置一下路徑 #home 本shell放置絕對路徑 #debugDir assembleDebug 輸出路徑 #releaseDir assembleRelease 輸出路徑 #signDir 系統(tǒng)簽名文件路徑 home=/Volumes/Samsung_T5/android/Demo/ debugDir=$home/app/build/outputs/apk/debug/ releaseDir=$home/app/build/outputs/apk/release/ signDir=$home/app/release/sign/ #進入工作目錄 cd $home #創(chuàng)建簽名后的輸出目錄$home/out if [ ! -d out ];then echo "create directory out..." mkdir out echo "create directory out success" fi #打release包 echo "assembleRelease..." ./gradlew assembleRelease echo "assembleRelease success" #把release包移動到系統(tǒng)簽名目錄 mv -f $releaseDir/app-release.apk $signDir/app-release.apk echo "system sign apk..." #進入系統(tǒng)簽名目錄,執(zhí)行系統(tǒng)簽名 cd $signDir ./sign.sh #把簽名好的包移動到$home/out中,并用時間重命名 cd $home mv $quanyuyueSignDir/app-sign.apk ./out/app-sign-`date +%Y%m%d%H%M`.apk echo "sign success"
保存上面代碼為package.sh,并放在工程目錄下,我的是$home目錄下。
ps:要打release包還需要配置下app/build.gradle
android { ... //配置簽名文件 signingConfigs { release { storeFile file("你的簽名文件") storePassword "你的密碼" keyAlias "你的keyAlias" keyPassword "你的keyPassword" } } buildTypes { release { signingConfigs.release ... } }
編寫task調(diào)用package.sh腳本
在app/build.gradle中輸入
task getPackage(type: Exec) { executable "sh" args "-c", "../packge.sh" }
這樣,我們只要執(zhí)行下這個task,就可以獲得系統(tǒng)簽名的apk了。
總結(jié)
以上所述是小編給大家介紹的gradle+shell實現(xiàn)自動系統(tǒng)簽名,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
基于Laravel + Vue + Element 實現(xiàn) 人力資源系統(tǒng)(考勤應(yīng)用 )
Bee 是人力資源系統(tǒng)中的考勤應(yīng)用,主要功能用于員工申請假單。接下來通過本文給大家介紹基于Laravel + Vue + Element 考勤應(yīng)用 之 人力資源系統(tǒng),需要的朋友可以參考下2019-10-10最新IntelliJ IDEA 2020.2永久激活碼(親測有效)
今天一大波朋友反饋idea2020激活碼失效的問題,小編快馬加鞭給大家找到解決方案,本文以IDEA 2020.2.4激活碼破解教程為例給大家詳細介紹,需要idea2020激活碼的朋友快來參考下本文吧2020-11-11深入理解TCP協(xié)議與UDP協(xié)議的原理及區(qū)別
網(wǎng)絡(luò)編程有三個要素,分別是IP地址、端口號和通信協(xié)議,那本文主要講述的是TCP與UDP這兩種通信協(xié)議,以及編程的實現(xiàn),感興趣的可以了解一下2021-06-06趣談Unicode、Ascii、utf-8、GB2312、GBK等編碼知識
這篇文章主要介紹了趣談Unicode、Ascii、utf-8、GB2312、GBK等編碼知識,文章寫的詼諧風(fēng)趣,膜拜啊,需要的朋友可以參考下2014-07-07Matlab使用Plot函數(shù)實現(xiàn)數(shù)據(jù)動態(tài)顯示方法總結(jié)
這篇文章主要介紹了Matlab使用Plot函數(shù)實現(xiàn)數(shù)據(jù)動態(tài)顯示方法總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02ol7.7安裝部署4節(jié)點spark3.0.0分布式集群的詳細教程
這篇文章主要介紹了安裝部署4節(jié)點spark3.0.0分布式集群,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07