1. 程式人生 > >Android Studio 生成簽名的APK

Android Studio 生成簽名的APK

生成簽名

開啟專案以後,點選專案,選擇 Build 選單, 然後選擇 Generate Signed APK. 如下圖所示:

開啟生成對話方塊:

選擇 Create new... 按鈕, 生成新的Key, 彈出新生成對話方塊:

首先選擇 Key 儲存的路徑.

可能是有BUG, 在彈出的選擇 keystore file 對話方塊中,需要先輸入 File name, 如 ``, 檔案字尾名 保持預設的 jks 不變。然後再改變儲存的路徑(否則輸入不了名字).

最後的路徑可能是這樣的: E:\CODE_ALL\02_GIT_ALL\cncounter-android\key_store\cncounter-android-key.jks

接著輸入密碼, 建議不要太簡單,也不要太複雜。 此處示例的密碼為:

cncounter-android

為了簡單起見, 所有密碼都設定為同一個:

cncounter-android

有效時間預設25年,以支撐你的整個APP週期。

Country Code (XX) 應該是 CN, 如下圖所示:

然後點選OK, 回到生成介面。

勾選上記住密碼,然後點選下一步.

如果彈出輸入密碼保護,可以選擇留空,不使用這種保護。

點選OK,進入下一步:

選擇 release 是釋出版本,選擇 debug 是除錯版本。 此處, 選擇 release , 然後點選完成按鈕即可。

然後會告訴你生成完畢,可以選擇檢視:

生成的APK如下所示:

下次需要生成,只需要從 Build 選單, 選擇 Generate Signed APK 即可。 如下圖所示:

因為上次選擇了記住密碼,所以這裡不需要記住密碼。

然後繼續即可。

自動簽名

在 Android Studio 中, 可以通過配置在構建過程中自動簽名 release 版本的APK:

1. 選擇 project 瀏覽檢視, 在 app 上點選滑鼠右鍵, 選擇 Open Module Settings 選單, 如下圖所示:

2. 在開啟的 Project Structure 視窗中, 選擇 Modules 下面的 app 模組.

3. 切換到 Signing 標籤頁.

4. 選擇 keystore 檔案, 輸入此配置的 name(當然, 也可以通過加號建立多個配置), 以及其他必須的資訊,比如各種密碼.

5. 然後切換到 Build Types 選項卡.

6. 選擇 release build.

7. 然後在右邊的 Signing Config, 選擇上面建立的配置項.

8. 點選 OK 即可.

然後就可以了。 你的 debug 版本也可以採用同樣的方式配置,但是建議使用 debug專用的 keystore 進行簽名。

多個專案成員進行開發都採用同一個 debug 的store, 而 release 版本的 keystore 則只允許部分人員使用。

優化對齊

在 Android SDK 中包含一個名為 “zipalign” 的工具,它能夠對打包後的 app 進行優化。 其位於 SDK 的 build-tools 目錄下, 例如: D:\Develop\Android\sdk\build-tools\23.0.2\zipalign.exe 。

如果你將路徑 D:\Develop\Android\sdk\build-tools\23.0.2 新增到 Path 之中,則可以直接使用 zipalign.exe ; 否則需要指定全路徑。

用法示例

將 infile.apk 對齊,並儲存為 outfile.apk:

zipalign [-f] [-v] <alignment> infile.apk outfile.apk

驗證 existing.apk 是否對齊:

zipalign -c -v <alignment> existing.apk

佔位符 <alignment> 是指位元組對齊邊界的一個整數。apk 檔案的對齊位元組數必須是 4 (也就是 4*8 = 32-bit 的對齊)。其他數字無效。

標誌:

-f : 強制覆蓋已存在的輸出檔案
-v : 輸出詳細日誌(verbose output)
-c : 校驗時使用, 驗證指定的檔案是否對齊

下面是使用示例:

首先,進入到 apk 檔案所在的目錄(否則全路徑命令列就會很長):

e:
cd E:\CODE_ALL\02_GIT_ALL\cncounter-android\app\build\outputs\apk

然後找到你的 zipalign 程式路徑

D:\Develop\Android\sdk\build-tools\23.0.2\zipalign.exe -c -v 4 app-release-unaligned.apk

可以看到類似下面這樣的輸出,失敗資訊:

  209814 res/mipmap-hdpi-v4/ic_launcher.png (BAD - 2)
  212824 res/mipmap-mdpi-v4/ic_launcher.png (OK)
  246707 res/xml/pref_data_sync.xml (OK - compressed)
  248751 resources.arsc (BAD - 3)
  459180 classes.dex (OK - compressed)
 1218706 META-INF/MANIFEST.MF (OK - compressed)
 1229010 META-INF/CERT.SF (OK - compressed)
 1239389 META-INF/CERT.RSA (OK - compressed)
Verification FAILED

可以看到校驗失敗,因為我們校驗的是一個未對齊(unaligned)的 apk。

下面,我們來進行對齊(注意,不支援換行):

D:\Develop\Android\sdk\build-tools\23.0.2\zipalign.exe  -f -v 4 app-release-unaligned.apk cnc-v0.1.20151216.apk

輸出內容大致如下所示:

  225300 res/mipmap-xxxhdpi-v4/ic_launcher.png (OK)
  247015 res/xml/pref_data_sync.xml (OK - compressed)
  249060 resources.arsc (OK)
  459489 classes.dex (OK - compressed)
 1219015 META-INF/MANIFEST.MF (OK - compressed)
 1229319 META-INF/CERT.SF (OK - compressed)
 1239698 META-INF/CERT.RSA (OK - compressed)
Verification succesful

提示對齊成功,我們可以驗證一下:

D:\Develop\Android\sdk\build-tools\23.0.2\zipalign.exe -c -v 4 cnc-v0.1.20151216.apk

提示的內容大致如下:

  248574 res/xml/pref_notification.xml (OK - compressed)
  249060 resources.arsc (OK)
  459489 classes.dex (OK - compressed)
 1219015 META-INF/MANIFEST.MF (OK - compressed)
 1229319 META-INF/CERT.SF (OK - compressed)
 1239698 META-INF/CERT.RSA (OK - compressed)
Verification succesful

OK. 此時算是可以交付給使用者下載的版本了。

對齊之後的 apk 檔案最好不要修改。

如果需要了解更多,請參考官方連結。

日期: 2015年11月28日