1. 程式人生 > >Android通過命令列簽名APK

Android通過命令列簽名APK

一、前幾天安裝一個客戶APP時,提示 INSTALL_PARSE_FAILED_NO_CERTIFICATES 錯誤,無法安裝應用。經過查詢資料才發現,這個APK檔案是沒有簽名的。

1、如果安裝APP時遇到這個問題,可以通過命令去判斷APK一否已簽名。進入Windows控制檯,切換路徑到JDK的bin目錄下。

2、檢驗APK檔案是否已簽名:jarsigner.exe -verify app-release.apk(apk路徑)

如果檔案沒有簽名,我們可以通過命令生成一個簽名檔案

keytool -genkey -alias test.keystore -keyalg RSA -validity 20000 -keystore test.keystore 
執行上述命令後,需要輸入一連串資訊,如實輸入即可。 3、生成簽名檔案後,用該簽名檔案對APK進行簽名。 jarsigner.exe -verbose -keystore test.keystore -signedjar app-release_mysigned.apk app-release.apk test.keystore

簽名後可以再次驗證APK是否已簽名,或安裝到裝置上測試。

二、曾經還遇到過一種無法安裝APP的情況,安裝APP時,提示 INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 錯誤

。出現這個錯誤的原因是該應用為了具備系統許可權,設定了 android:sharedUserId="android.uid.system" 。

1、這樣的好處是應用不容易被系統殺掉,但是其簽名檔案必須與系統簽名檔案一致,需要這三個檔案(signapk.jar platform.x509.pem platform.pk8)。再執行如下程式碼,對APP進行簽名。

2、java -jar signapk.jar platform.x509.pem platform.pk8 apk路徑(簽名前) apk路徑(簽名後)


三、使用android studio生成的.jks 檔案簽名時,也遇到過提示 (命令列jarsigner簽字和解決找不到證書鏈錯誤 )的錯誤資訊。執行簽名的指令如下:

1、jarsigner -digestalg SHA1 -sigalg SHA1withRSA(或SHA1withDSA) -verbose -keystore xxx.jks -signedjar xxx.apk(簽名後的apk名字) xxx.apk(需要簽名的apk) xxx(keystore別名)

2、特別需要注意的是最後一個引數是keystore別名,也就是簽名檔案的別名,如果像.keystore一樣,直接使用檔名,就會提示無法找到證書鏈錯誤。別名是使用AS建立簽名檔案時,設定Alias的引數就是別名。