android studio簽名
給我們自己開發(fā)的app簽脚作,就代表著我們自己的版權(quán)惩阶,以后要進行升級,也必須要使用相同的簽名才行部翘。簽名就代表著自己的身份(即keystore),多個app可以使用同一個簽名响委。
使用Android studio進行簽名有兩種方式:
1新思、通過Android Studio進行簽名:
選中app這個moudule,選中菜單欄 "Build-Generate signed apk":
彈出如下界面
上圖中第一次使用簽名時赘风,就單擊空框部分創(chuàng)建一個新簽名夹囚;如果之前有過簽名文件,就選中右側(cè)按鈕導(dǎo)入即可邀窃。下面先來看看空框部分吧:
上圖紅框圈起來的是必填項荸哟。
上圖中點擊finish之后,可以看到Androidstudio的最下方:Gradle正在執(zhí)行assembleRelease這樣一個任務(wù)瞬捕,如下圖:
生成簽名好的apk之后會彈出如下提示:
2鞍历、通過命令行的方式進行簽名:
(1)、加載Key store:
我們先刪掉上面的通過第一中方式所簽名的apk文件肪虎。接下來進行第二種方式來簽名劣砍,及命令行的方式:
打開 Project Stucture圖形化界面:
上圖中,選中app這個module扇救,然后切換到signing標(biāo)簽欄刑枝,緊接著點擊添加赊淑,然后生成release簽名信息,點擊OK仅讽。打開對應(yīng)的module下的build.gradle文件即可看到如下如圖1處配置:
圖中1處配置會自動生成陶缺,2最好手動配置,否則簽名是不生效的洁灵。3處可配可不配饱岸。
(2)、生成release版本的apk:
完成以上配置后在Terminal輸入如下命令
gradle assembleRelease
如果運行成功徽千,效果如下:
多渠道打包
1苫费、在AndroidManifest.xml里設(shè)置動態(tài)渠道變量
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
2、在build.gradle設(shè)置productFlavors
這里設(shè)置我們需要打包的渠道為酷安市場双抽、360百框、小米、百度牍汹、豌豆莢
productFlavors {
kuan {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "kuan"]
}
xiaomi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
qh360 {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qh360"]
}
baidu {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
}
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
}
獲取批量修改
productFlavors {
kuan {}
xiaomi {}
qh360 {}
baidu {}
wandoujia {}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
所謂ProductFlavors其實就是可定義的產(chǎn)品特性铐维,配合manifest merger使用的時候就可達成一次編譯過程中產(chǎn)生多個具有自己特性配置的版本。上面這個配置的作用就是慎菲,為每個渠道包產(chǎn)生不同的UMENG_CHANNEL_VALUE 的值嫁蛇。
3、執(zhí)行打包操作
在Androidstudio菜單欄點擊build菜單->Generate signed APK ->選擇key 并輸入密碼
然后下一步露该,選擇打包渠道
最后點擊完成按鈕睬棚。
上圖可以看到,我們已經(jīng)成功的將各個渠道包打好解幼。
4抑党、執(zhí)行打包命令 gradle assembleRelease
除使用Androidstudio圖形打包操作以外,我們也可以使用命令行進行打包操作撵摆,具體步驟如下:
(1)底靠、在Androidstudio的Terminal面板輸入 gradle assembleRelease命令一樣可以打出上圖各渠道的包。
(2)台汇、當(dāng)我們的渠道包版本比較多時苛骨,可以自定義所打APK包名稱,用以區(qū)分
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
//自定義輸出配置
applicationVariants.all{
variant ->
variant.outputs.each{
output ->
def outputFile = output.outputFile
if(outputFile != null && outputFile.name.endsWith('.apk')){
//輸出apk名稱
def fileName = "app_v${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outputFile.parent,fileName)
}
}
}
}
(3)苟呐、assemble是Gradle中編譯打包命令痒芝,有如下用法:
如果我們想打包豌豆莢渠道的release版本,執(zhí)行如下命令就好
gradle assembleWandoujiaRelease
如果想打豌豆莢渠道的debug版本牵素,執(zhí)行如下命令
gradle assembleWandoujiaDebug
如果只想打豌豆莢渠道版本
gradle assembleWandoujia
此命令會生成wandoujia渠道的Release和Debug版本
同理如果想打全部Release版本
gradle assembleRelease
以下是完成的配置文件
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.hzq.testline"
minSdkVersion 14
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
signingConfigs {
debug {
keyAlias 'qiangzi'
keyPassword '111111'
storeFile file('/Users/hezhiqiang/github_workspace/TestLine/signtest.jks')
storePassword '111111'
}
release {
keyAlias 'qiangzi'
keyPassword '111111'
storeFile file('/Users/hezhiqiang/github_workspace/TestLine/signtest.jks')
storePassword '111111'
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
//自定義輸出配置
applicationVariants.all{
variant ->
variant.outputs.each{
output ->
def outputFile = output.outputFile
if(outputFile != null && outputFile.name.endsWith('.apk')){
//輸出apk名稱
def fileName = "app_v${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outputFile.parent,fileName)
}
}
}
}
debug {
minifyEnabled false
signingConfig signingConfigs.debug
}
}
productFlavors {
kuan {}
xiaomi {}
qh360 {}
baidu {}
wandoujia {}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}