1. 程式人生 > >解決Android應用簽名和系統不一致的問題

解決Android應用簽名和系統不一致的問題

今天碰到一個簽名的問題,我負責的應用安裝時,會報錯:

安裝命令:
adb install -r ApeFolio.apk

報錯資訊:

Failed to install ApeFolio.apk: Failure [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE: 
Package couldn't be installed in /data/app/com.ape.leather2-1: Package 
com.ape.leather2 has no signatures that match those in shared user 
android.uid.system; ignoring!]

看了報錯資訊就明白了,是系統的簽名還沒改過來,解決方法很簡單,和系統的一致就可以。

但是蛋疼的是,你現在不知道手機系統的簽名是什麼,最快的辦法當然問同事。但是我這裡想說的是另一個笨方法—自己去試原始碼的簽名檔案,看那個簽名最後能安裝apk。

1. 簽名檔案的路徑

首先要找到系統簽名檔案的路徑,路徑的一般在:

/build/target/product/security

你會發現裡面有很多很多的簽名,我們先把他們複製到桌面的project_name資料夾裡面(可以任意命名),待會要用。

2. 製作簽名的指令碼

你需要一個簽名的指令碼,待會比較方便,只用雙擊執行就可以了,指令碼的內容如下:

# 獲取當前達到的包,應為安裝命名規範來,所以最新的達到的包是在最後面
for apkFile in `ls -d ~/Projects/ApeFolio/apps/ApeFolio/app/build/outputs/apk/ApeFolio*`;
do
echo $apkFile
done

java -jar signapk.jar ./project_name/security/platform.x509.pem ./project_name/security/platform.pk8 ${apkFile} ApeFolio.apk

第一行的路徑是我應用的路徑,你可以根據你自己的實際情況,換成你自己的。重點是最後一行,其中signapk.jar會待會簽名要用到的,我會共享給你們。./project_name/security/platform.x509.pem ./project_name/security/platform.pk8這兩個檔案都是成對出現的,你可以一對一對的試驗,試出正確的那個簽名。

最後應該是這樣的:

3.生成apk
雙擊project_name.sh後,會在該目錄生成ApeFolio.apk:

4.安裝
安裝該apk,如果成功,就說找到了正確的簽名,如果失敗,繼續換下一個