Jenkins打包android應用時自動簽名apk詳解
前言
如果你是使用android studio編譯項目的化,在編譯apk只會會自動給apk簽名。
但默認配置下jenkins下編譯出的apk是unsign的。需要一些額外的設置才能自動sign。
這個功能需要我們修改下build.gradle配置文件,讓gradle在編譯之后執(zhí)行簽名。
當然你也可以在這里做一些其他的修改,比如修改編譯出的apk的名字,讓他加個當前時間的時間戳,編譯類型的后綴什么的,方便識別。
1.生成的apk名加上當前時間 + 修改apk的發(fā)布路徑
在build.gradle配置文件下的android配置段下的buildTypes下找到你的編譯配置項一般就是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配置文件的末尾加上一個方法用來獲取當前時間
def releaseTime() {
// return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC")) //年月日
return new Date().format("yyyyMMdd HH-mm-ss", TimeZone.getTimeZone("GMT+8:00")) //年月日時分秒
}
2.實現(xiàn)自動化簽名 別忘了jks文件也要放項目里
build.gradle的android段添加如下配置段 定義簽名key
signingConfigs {//簽名的配置
release {
storeFile file("簽名.jks")
storePassword '密碼'
keyAlias '別名'
keyPassword '密碼'
}
}
在android配置段下的buildTypes段的release段下添加一行 表示調用上面的簽名配置
注意修改apk的名字后在android studio是無法開啟調試模式,提示找不到apk
signingConfig signingConfigs.release
效果圖
第一個是debug版本
第二個是沒簽名的release版本
第三個是簽名后還改了名字的release版本
如果想編譯某個版本的話 需要修改下執(zhí)行gradle的命令行參數(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")) //年月日時分秒
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Android 4.4以上"沉浸式"狀態(tài)欄效果的實現(xiàn)方法
Android與ios效果互仿早已不是什么稀奇的事,我猜大概這個效果來自ios吧,有爭議說這種效果不能叫做沉浸式,叫透明狀態(tài)欄更合適,我也感覺這和沉浸式的含義不太一致。但是大家都這么叫了,那就這樣唄。下面來一起看看關于Android 4.4以上"沉浸式"效果的實現(xiàn)方法。2016-09-09
Android ListView實現(xiàn)仿iPhone實現(xiàn)左滑刪除按鈕的簡單實例
下面小編就為大家?guī)硪黄狝ndroid ListView實現(xiàn)仿iPhone實現(xiàn)左滑刪除按鈕的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08
淺析Android Dialog中setContentView()方法
本篇文章主要介紹了Android Dialog中setContentView()方法的相關知識。具有很好的參考價值。下面跟著小編一起來看下吧2017-05-05
Android uses-permission權限列表中文注釋版
Android有一個精心設計的安全模型。每一個應用都有其自己Linux用戶和群組,在單獨的進程和VM上運行,不能影響到其他應用2014-05-05
Android 超詳細深刨Activity Result API的使用
這篇文章主要介紹了Android開發(fā)中Activity Result API的使用,掌握了它以后你就可以放棄startActivityForResult了,感興趣的朋友一起來看看吧2022-03-03

