Android之打包簽名


一、什么的是打包?

打包就是根據簽名和其他標識生成安裝包。

 

二、什么是簽名?

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.優缺點

優點:安全

缺點:速度慢


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM