Android app設置爲系統應用

在項目開發時,如果需要使應用具有系統權限,例如可以支持靜默安裝和卸載APK,此時就需要使用系統簽名。
常用的系統簽名方式包括在ubuntu環境下、手動簽名和在AndroidStudio環境配置,三種方式中,實現最簡單的是通過AndroidStudo方式,該方式的簽名實現與正常的APK簽名相同,唯一不同的就是簽名文件是通過系統生成的。
注意,無論採用何種簽名方式,如果想實現具有系統權限的應用,在APK生成時,都需要在AndroidManifest.xml中配置android:sharedUserId=“android.uid.system”,如下所示

<manifest  xmlns:android="http://schemas.android.com/apk/res/android"
            package="com.xxxx.xxxx"
           android:sharedUserId="android.uid.system">

</manifest>


1. ubuntu環境編譯
該方式需要在安卓源碼編譯的環境下,在將APK打包至安卓系統升級包時,需要配置Android.mk文件,通過在配置LOCAL_CERTIFICATE 參數時,將其設置爲PRESIGNED,如果需要改APK具有系統權限,使用系統簽名,則需要設置爲platform

LOCAL_CERTIFICATE := platform 或 shared 或 media


在設置好 Android.mk 文件後,在ubuntu環境下執行系統的編譯流程。
如果之前在ubuntu環境下已經執行好了系統的編譯流程,則可以直接cd到系統的package/apps目錄下,進入到需要編譯的APK文件目錄下執行mm指令,或在其他目錄執行mmm /package/apps/APK所在的文件夾名稱。

2.手動簽名
手動系統簽名與Android的APK重簽名不同,重簽名是之前APK已經簽名完成,在實際使用時,需要更改簽名文件,例如一些特殊的算法處理對於系統的包名和簽名都有綁定操作,如更換則無法使用。
手動系統簽名是對於通過AndroidStudio的build生成的無簽名的APK文件,進行手動系統簽名操作。具體執行過程如下。

2.1 下載SignApk.jar
首先下載SignApk.jar包,如下圖所示
如果本地有安卓系統的源碼,可以直接在本地的build\tools\signapk目錄下查找到該jar包。

2.2 查找security文件
拿到系統定製廠商提供的security文件,不同編譯下生成的security文件內容不同,需針對該安卓系統下的編譯生成的security文件,因此這也限定了該系統簽名後的應用只能在該系統下運行,在其他系統下運行就不具有系統權限。
在security文件中找到media.pk8和platform.x509.pem兩個文件。

2.3 執行系統簽名操作
將2.1中的SignApk.jar和2.2中的media.pk8和platform.x509.pem文件一起復制到包含需要簽名的APK文件夾中,然後執行如下語句

java -jar signapk.jar  platform.x509.pem platform.pk8 old.apk new.apk


生成的new.apk文件就是系統簽名後APK文件。

注意命令最好有管理員權限!!!

注意命令最好有管理員權限!!!

注意命令最好有管理員權限!!!
該方式的操作,可參考安卓簽名工具SignApk.jar使用教程,其已將簽名的流程製作成Window下的.exe工具,只需一次配置,每次點擊更換需要簽名的文件即可。

3 AndroidStudio方式
通常對於APK的簽名文件是通過AndroidStudio的New Key Store方式自定義實現,但是如果需要使用系統簽名文件需要結合security文件中的media.pk8和platform.x509.pem兩個文件,通過keytool-importkeypair實現,下載成功後,將media.pk8和platform.x509.pem兩個文件放置在包含 keytool-importkeypair目前下,執行以下語句。

./keytool-importkeypair -k ./platform.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias platform


需要注意的是:

該語句的執行是在ubuntu環境下執行的
platform.keystore爲系統簽名文件
android爲簽名密碼
platform爲簽名的別名(alias)
生成系統簽名後,在AndroidStudio中配置Signing簽名信息,配置成功後在modle的buid.gradle中可以查看如下配置信息。

signingConfigs {
    releaseConfig {
        keyAlias 'platform'
        keyPassword 'android'
        storeFile file('.........platform.keystore')//簽名文件路徑
        storePassword 'android'
    }
}


4.總結
從以上的分析中可以看出,無論三種那種方式的實現,都離不開系統源碼中的security目錄下的media.pk8和platform.x509.pem兩個文件,該兩個文件是保證應用具有系統簽名的前提,如果使用其他系統的文件,則在該系統中,無法具有系統權限。
對比以上方法,分爲具有ubuntu和沒有兩種環境下。

具有ubuntu的編譯環境:則使用第一種比較簡單,第三種生成的系統簽名文件,可用於其他APK的簽名使用,在AndroidStudio中配置後,方便調試使用,不必每次都執行命令行來生成簽名後的APK文件。
不具有ubuntu的編譯環境:該方式只能通過第二種方式實現,且每次調試使用時都需要替換APK生成新的系統簽名後的APK,操作比較繁瑣。當然在2.3中也提到,可藉助其他同學製作的小工具方便籤名文件的使用。

原文鏈接:https://blog.csdn.net/xk7298/article/details/93332419

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章