前言
有時(shí)候我們的應(yīng)用需要系統(tǒng)級的權(quán)限來實(shí)現(xiàn)一些功能(如靜默安裝),這時(shí)候需要給應(yīng)用打上系統(tǒng)簽名,常規(guī)操作打包apk,解壓apk,刪除META-INF中CERT.RSA和
CERT.SF,然后壓縮,用系統(tǒng)簽名工具簽名,一頓操作后可能十分鐘過去了,實(shí)在太過繁瑣,因此我們做了一些簡化,用gradle+shell幫我們實(shí)現(xiàn)自動(dòng)化。
準(zhǔn)備
1.android studio
2.系統(tǒng)簽名文件(signapk.jar、platform.x509.pem、platform.pk8)
3.如果是mac系統(tǒng),還需要libconscrypt_openjdk_jni.dylib這個(gè)文件
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
#清理臨時(shí)文件
rm -f app-release-tmp.apk
rm -rf ./release
保存為sign.sh,與signapk.jar、platform.x509.pem、platform.pk8、libconscrypt_openjdk_jni.dylib放在同一目錄下,我這里是放在項(xiàng)目的
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/
#進(jìn)入工作目錄
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包移動(dòng)到系統(tǒng)簽名目錄
mv -f $releaseDir/app-release.apk $signDir/app-release.apk
echo "system sign apk..."
#進(jìn)入系統(tǒng)簽名目錄,執(zhí)行系統(tǒng)簽名
cd $signDir
./sign.sh
#把簽名好的包移動(dòng)到$home/out中,并用時(shí)間重命名
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í)行下這個(gè)task,就可以獲得系統(tǒng)簽名的apk了。
總結(jié)
以上所述是小編給大家介紹的gradle+shell實(shí)現(xiàn)自動(dòng)系統(tǒng)簽名,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
您可能感興趣的文章:- Android Gradle依賴管理、去除重復(fù)依賴、忽略的方式
- android studio更新gradle錯(cuò)誤構(gòu)建項(xiàng)目失敗的解決方法
- Android Studio和Gradle使用不同位置JDK的問題解決
- Jenkins使用Gradle編譯Android項(xiàng)目詳解
- Gradle環(huán)境下導(dǎo)出Swagger為PDF的步驟詳解
- Android Studio Gradle依賴沖突解決方法
- 關(guān)于gradle你應(yīng)該知道的一些小事
- 基于Java Gradle復(fù)制項(xiàng)目模塊過程圖解