一、什么的是打包?
打包就是根據簽名和其他標識生成安裝包。
二、什么是簽名?
1.在android應用文件(apk)中保存的一個特別字符串
2.用來標識不同的應用開發者:開發者A,開發者B
3.一個應用開發者開發的多款應用使用同一個簽名
> 就好比是一個人寫文章,簽名就相當於作者的署名。
> 如果兩個應用都是一個開發者開發的,那么簽名就是一樣的。
> 這個開發者,可以是個人,也可以是公司、團體。
三、為什么要用簽名
原因1:最簡單直接的回答:系統要求的
Android系統要求每一個Android應用程序必須要經過數字簽名才能夠安裝到系統中,也就是說如果一個Android應用程序沒有經過數字簽名,是沒有辦法安裝到系統中的!
原因2:
不同程序員開發的應用包名可能會相同,導致一個應用覆蓋另一個應用。
舉例:比如微信上線以后,我們可以通過一些簡單的方式就能查看到它的包名,這個時候你也開發了一款app,應用的圖標、名稱與包名與微信一致,那么用戶在不知情的情況下載你的應用,因為包名的原因會覆蓋之前的微信,如果這時你在你的應用中寫入了病毒,那么就會對用戶就會產生很大的影響,這也是為什么需要簽名的原因,因為每一個開發者的簽名都是不同的,並且都經過加密,即使你的app的圖標、名稱與包名與微信一致,那么在安裝的過程中,系統也會提示用戶,有兩個包名相同,但簽名不同的應用。
四、簽名丟失的危害
如果你的簽名丟失了,那么用戶安裝時會先卸載之前的應用的才能安裝成功,並且應用市場上的排行也會從0開始,這對一個app來說的傷害無疑是巨大的。
五、如果實現數字簽名(下面的講解主要針對於AS)
如果之前沒有那么就創建一個
這里指定一個文件名:注意:在as中,簽名文件keystore類型的文件變為jks格式的文件
Alisa表示別名
這里的Build Type有兩個值 release:表示發布版 debug:測試版
點擊finish等一會就會自動的生成了。默認在as工程中bin下生成的apk也有簽名,但是不要用那個,用我們自己設置的apk
六、可能出現的異常
錯誤信息:
Error:(16) Error: "baidutieba_client_inavailable" is not translated in "en" (English) [MissingTranslation]
Error:(63) Error: "baidutieba" is not translated in "en" (English) [MissingTranslation]
Error:(67) Error: "share_to_baidutieba" is not translated in "en" (English) [MissingTranslation]
解決辦法:那個文件出問題,就在那個文件中加如下的代碼
<?xml version="1.0" encoding="utf-8" ?>
<resources
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="MissingTranslation">
</resources>
七、多渠道打包(友盟多渠道打包)
什么是多渠道打包以及為什么使用多渠道打包?
1.渠道包就是要在安裝包中添加渠道信息,也就是channel,對應不同的聚道,例如:小米市場、360市場、應用寶市場等
2.多渠道打包意義在於方便后進行統計。
八、有盟多渠道打包的實現
1.在manifest文件中添加如下的代碼
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
2.在module的build.gradle的android{}中添加如下的內容
productFlavors{
wandoujia{
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
xiaomi{
manifestPlaceholders=[UMENG_CHANNEL_VALUE: "xiaomi"]
}
}
3.優化1:
productFlavors{
wandoujia{
//manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
xiaomi{
//manifestPlaceholders=[UMENG_CHANNEL_VALUE: "xiaomi"]
}
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
4.優化2(使用這種方式可以在我們的生成的apk中看到版本號)
productFlavors{
wandoujia{
//manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
xiaomi{
//manifestPlaceholders=[UMENG_CHANNEL_VALUE: "xiaomi"]
}
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
def fileName = outputFile.name.replace(".apk", "-${defaultConfig.versionName}.apk")
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
5.獲取渠道
private String getChannel() {
try {
PackageManager pm = getPackageManager();
ApplicationInfo appInfo = pm.getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
return appInfo.metaData.getString("UMENG_CHANNEL");
} catch (PackageManager.NameNotFoundException ignored) {
}
return "";
}
6.在上面幾部執行以后再進行簽名,等待一會,這個時候你去工程所以目錄下,就會看到自動打好的渠道包了
7.優缺點
優點:安全
缺點:速度慢