android studio簽名
給我們自己開發的app簽,就代表著我們自己的版權,以后要進行升級,也必須要使用相同的簽名才行。簽名就代表著自己的身份(即keystore),多個app可以使用同一個簽名。
使用Android studio進行簽名有兩種方式:
1、通過Android Studio進行簽名:
選中app這個moudule,選中菜單欄 "Build-Generate signed apk":
彈出如下界面
上圖中第一次使用簽名時,就單擊空框部分創建一個新簽名;如果之前有過簽名文件,就選中右側按鈕導入即可。下面先來看看空框部分吧:
上圖紅框圈起來的是必填項。
上圖中點擊finish之后,可以看到Androidstudio的最下方:Gradle正在執行assembleRelease這樣一個任務,如下圖:
生成簽名好的apk之后會彈出如下提示:
2、通過命令行的方式進行簽名:
(1)、加載Key store:
我們先刪掉上面的通過第一中方式所簽名的apk文件。接下來進行第二種方式來簽名,及命令行的方式:
打開 Project Stucture圖形化界面:
上圖中,選中app這個module,然后切換到signing標簽欄,緊接著點擊添加,然后生成release簽名信息,點擊OK。打開對應的module下的build.gradle文件即可看到如下如圖1處配置:
圖中1處配置會自動生成,2最好手動配置,否則簽名是不生效的。3處可配可不配。
(2)、生成release版本的apk:
完成以上配置后在Terminal輸入如下命令
gradle assembleRelease
如果運行成功,效果如下:
多渠道打包
1、在AndroidManifest.xml里設置動態渠道變量
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
2、在build.gradle設置productFlavors
這里設置我們需要打包的渠道為酷安市場、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其實就是可定義的產品特性,配合manifest merger使用的時候就可達成一次編譯過程中產生多個具有自己特性配置的版本。上面這個配置的作用就是,為每個渠道包產生不同的UMENG_CHANNEL_VALUE 的值。
3、執行打包操作
在Androidstudio菜單欄點擊build菜單->Generate signed APK ->選擇key 并輸入密碼
然后下一步,選擇打包渠道
最后點擊完成按鈕。
上圖可以看到,我們已經成功的將各個渠道包打好。
4、執行打包命令 gradle assembleRelease
除使用Androidstudio圖形打包操作以外,我們也可以使用命令行進行打包操作,具體步驟如下:
(1)、在Androidstudio的Terminal面板輸入 gradle assembleRelease命令一樣可以打出上圖各渠道的包。
(2)、當我們的渠道包版本比較多時,可以自定義所打APK包名稱,用以區分
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版本,執行如下命令就好
gradle assembleWandoujiaRelease
如果想打豌豆莢渠道的debug版本,執行如下命令
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]
}