天天看点

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