Jenkins打包android應(yīng)用時(shí)自動(dòng)簽名apk詳解
前言
如果你是使用android studio編譯項(xiàng)目的化,在編譯apk只會(huì)會(huì)自動(dòng)給apk簽名。
但默認(rèn)配置下jenkins下編譯出的apk是unsign的。需要一些額外的設(shè)置才能自動(dòng)sign。
這個(gè)功能需要我們修改下build.gradle配置文件,讓gradle在編譯之后執(zhí)行簽名。
當(dāng)然你也可以在這里做一些其他的修改,比如修改編譯出的apk的名字,讓他加個(gè)當(dāng)前時(shí)間的時(shí)間戳,編譯類型的后綴什么的,方便識別。
1.生成的apk名加上當(dāng)前時(shí)間 + 修改apk的發(fā)布路徑
在build.gradle配置文件下的android配置段下的buildTypes下找到你的編譯配置項(xiàng)一般就是release
在release段下面加上如下代碼
applicationVariants.all { variant -> if (variant.buildType.name.equals('release')) { //如果是release版本 variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { //查找所有的apk def fileName = "${releaseTime()}_XXXXPorject_${defaultConfig.versionName}.apk" //重新定義apk的名稱 output.outputFile = new File(outputFile.parent, fileName) //outputFile.parent參數(shù)可以改成你你想要的發(fā)布路徑 } } } }
然后在build.gradle配置文件的末尾加上一個(gè)方法用來獲取當(dāng)前時(shí)間
def releaseTime() { // return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC")) //年月日 return new Date().format("yyyyMMdd HH-mm-ss", TimeZone.getTimeZone("GMT+8:00")) //年月日時(shí)分秒 }
2.實(shí)現(xiàn)自動(dòng)化簽名 別忘了jks文件也要放項(xiàng)目里
build.gradle的android段添加如下配置段 定義簽名key
signingConfigs {//簽名的配置 release { storeFile file("簽名.jks") storePassword '密碼' keyAlias '別名' keyPassword '密碼' } }
在android配置段下的buildTypes段的release段下添加一行 表示調(diào)用上面的簽名配置
注意修改apk的名字后在android studio是無法開啟調(diào)試模式,提示找不到apk
signingConfig signingConfigs.release
效果圖
第一個(gè)是debug版本
第二個(gè)是沒簽名的release版本
第三個(gè)是簽名后還改了名字的release版本
如果想編譯某個(gè)版本的話 需要修改下執(zhí)行g(shù)radle的命令行參數(shù)
參考例子
apply plugin: 'com.android.application' android { compileSdkVersion 25 buildToolsVersion '24.0.3' defaultConfig { applicationId "com.coderstory.Purify" minSdkVersion 19 targetSdkVersion 25 versionCode 90 versionName "1.5.0" resConfigs "cn" } repositories { mavenCentral() } signingConfigs {//簽名的配置 release { storeFile file("mykey.jks") storePassword 'a1234' keyAlias 'coolapk' keyPassword 'b1234' } } buildTypes { release { shrinkResources true minifyEnabled true signingConfig signingConfigs.release proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' applicationVariants.all { variant -> if (variant.buildType.name.equals('release')) { //如果是release版本 variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { //查找所有的apk def fileName = "MIUI Purify_${releaseTime()}_${defaultConfig.versionName}.apk" //重新定義apk的名稱 output.outputFile = new File(outputFile.parent, fileName) //outputFile.parent參數(shù)可以改成你你想要的發(fā)布路徑 } } } } } } productFlavors { } lintOptions { abortOnError false } } dependencies { provided fileTree(include: ['*.jar'], dir: 'libs') compile project(':library') compile project(':pull') compile 'com.android.support:support-v4:25.0.1' compile 'com.android.support:appcompat-v7:25.0.1' compile 'com.android.support:design:25.0.1' testCompile 'junit:junit:4.12' provided 'de.robv.android.xposed:api:82' } def releaseTime() { // return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC")) //年月日 return new Date().format("yyyyMMdd HH-mm-ss", TimeZone.getTimeZone("GMT+8:00")) //年月日時(shí)分秒 }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android 屏幕切換監(jiān)聽的實(shí)例代碼
我試著在屏幕切換時(shí),使View顯示在不同的位置,在網(wǎng)上搜索了一些資料,自己做了一段時(shí)間,終于完成了功能,今天小編給大家分享android 屏幕切換監(jiān)聽的實(shí)例代碼,需要的的朋友參考下吧2017-01-01Android 4.4以上"沉浸式"狀態(tài)欄效果的實(shí)現(xiàn)方法
Android與ios效果互仿早已不是什么稀奇的事,我猜大概這個(gè)效果來自ios吧,有爭議說這種效果不能叫做沉浸式,叫透明狀態(tài)欄更合適,我也感覺這和沉浸式的含義不太一致。但是大家都這么叫了,那就這樣唄。下面來一起看看關(guān)于Android 4.4以上"沉浸式"效果的實(shí)現(xiàn)方法。2016-09-09Android ListView實(shí)現(xiàn)仿iPhone實(shí)現(xiàn)左滑刪除按鈕的簡單實(shí)例
下面小編就為大家?guī)硪黄狝ndroid ListView實(shí)現(xiàn)仿iPhone實(shí)現(xiàn)左滑刪除按鈕的簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08淺析Android Dialog中setContentView()方法
本篇文章主要介紹了Android Dialog中setContentView()方法的相關(guān)知識。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-05-05Android uses-permission權(quán)限列表中文注釋版
Android有一個(gè)精心設(shè)計(jì)的安全模型。每一個(gè)應(yīng)用都有其自己Linux用戶和群組,在單獨(dú)的進(jìn)程和VM上運(yùn)行,不能影響到其他應(yīng)用2014-05-05Android 超詳細(xì)深刨Activity Result API的使用
這篇文章主要介紹了Android開發(fā)中Activity Result API的使用,掌握了它以后你就可以放棄startActivityForResult了,感興趣的朋友一起來看看吧2022-03-03android打開應(yīng)用所在的市場頁面進(jìn)行評分操作的方法
這篇文章主要介紹了android打開應(yīng)用所在的市場頁面進(jìn)行評分操作的方法,涉及Android操作市場頁面評分效果的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04Android編程實(shí)現(xiàn)夜間模式的方法小結(jié)
這篇文章主要介紹了Android編程實(shí)現(xiàn)夜間模式的方法,涉及Android亮度調(diào)節(jié)、自定義Theme、遮罩模式等相關(guān)使用技巧,需要的朋友可以參考下2018-01-01