1. 程式人生 > >Android應用程式進行系統簽名

Android應用程式進行系統簽名

有時寫一個程式需要呼叫系統的庫,如果許可權不夠,是用不了庫裡面一些方法的 。這時就需要將apk進行系統簽名。

 簡單常用的方法:

                1,在apk的AndroidManifest.xml中的manifest節點中加入Android:sharedUserId="android.uid.system"

                2,執行或打包得到apk

                3,使用目標系統的platform金鑰來給apk檔案簽名:

                在系統android\build\target\product\security目錄下找到platform.x509.pem 和platform.pk8兩個檔案;在系統out/host/Linux-x86/framework目錄下找到signapk.jar檔案,把它們複製出來放到一個資料夾下,把需要進行系統簽名的apk也和它們放到一個資料夾下。然後首先進入該檔案目錄,再在cmd上輸入下面語句:Java -jar signapk.jar  platform.x509.pem  platform.pk8  被簽名apk名稱.apk  簽名後apk名稱.apk,執行完後會在當前目錄得到一個新的apk "簽名後apk名稱.apk"  即為已經系統簽名的apk。

                舉個列子,例如要簽名reset.apk,如下圖:

  

            cmd進入當前目錄:輸入命令java -jar signapk.jar platform.x509.pem platform.pk8 reset.apk s_reset.apk

   

            按回車鍵,生成的s_reset.apk即為已經系統簽名的apk。

            需要注意的是,其中必須platform.x509.pem  platform.pk8 之前,否則會報錯。

參考:http://blog.csdn.net/lilidejing/article/details/45098879


注:

第二步時   

通過eclipse編譯,Android manifest XML中 shared user id 包含android.uid.shared等系統許可權的時候,則會報以下錯誤;

Installation
error: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE

INSTALL_FAILED_SHARED_USER_INCOMPATIBLE

主要是由於使用了android.uid.shared導致的問題。

使用eclipse編譯出apk檔案,但是這個apk檔案是不能用的。 

然後拿這個apk進行第三步

--------------------------------------------------------------



另一解決方案如下
   第一個方法簡單點,不過需要在Android系統原始碼的環境下用make來編譯:

   1. 修改Android.mk檔案,加入LOCAL_CERTIFICATE := platform這一行 
   2. 使用mm命令來編譯,生成的apk就可以在模擬器中運行了。

參考:http://blog.csdn.net/jumping_android/article/details/7241217

http://blog.csdn.net/happyhell/article/details/5903389