天天看點

Android App擁有system權限

Android App擁有system權限

在有些Android闆子上,app需要擁有system權限,才能通路硬體資源。

而app擁有system權限的方法很簡單,隻需要修改AndroidManifest.xml檔案,添加共享系統程序屬性:

android:sharedUserId="android.uid.system"
android:sharedUserId="android.uid.shared"
android:sharedUserId="android.media"
           

但這時候App無法直接安裝到目标闆子上,會提示簽名資訊不對,是以需要對apk進行系統簽名。

系統簽名

系統簽名的方法有很多種

  1. 把App放到Android源碼中編譯,需要修改Android.mk檔案,而且,App源碼是普通(Eclipse)格式。
  2. 手動簽名,需要signapk.jar,簽名指令:java -jar signapk.jar ……
  3. 使用keytool-importkeypair,将簽名資訊導入到keystore中,然後使用xx.jks對apk進行簽名。

因為我們目前一般使用Android Studio開發調試App,而第一種和第二種,開發調試就很麻煩。是以我們采用第三種,使用工具将簽名資訊導入到keystore中,利用Android Studio對apk進行簽名。

相關檔案:

platform.x509.pem、platform.pk8、keytool-importkeypair、demo.jks、signature.sh

platform.x509.pem、platform.pk8從目标闆子的Android源碼中獲得

keytool-importkeypair下載下傳

demo.jks通過Android Studio生成,或者自己原有的即可

signature.sh編寫如下

#!/bin/sh

# 轉換平台簽名指令
./keytool-importkeypair -k demo.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias demo

# demo.jks : 簽名檔案
# 123456 : 簽名檔案密碼
# platform.pk8、platform.x509.pem : 系統簽名檔案
# demo : 簽名檔案别名
           

運作

如下操作需要在Linux環境中。

$ sudo chmod a+x signature.sh
$ ./signature.sh

           

将重新生成的demo.jks放到相對目錄下面,用Android Studio進行簽名即可。

如果想要更加省事,可以配置builde.gradle

在android區域下(與defaultConfig同級)添加配置:

signingConfigs {
    release {
        storeFile file("../signature/demo.jks")
        storePassword '123456'
        keyAlias 'demo'
        keyPassword '123456'
    }

    debug {
        storeFile file("../signature/demo.jks")
        storePassword '123456'
        keyAlias 'demo'
        keyPassword '123456'
    }
}
           

參考:https://www.jianshu.com/p/47265c8899b5