20210524 ---- AS对app系统签名 & 调用系统hide接口
仅适用于系统级开发,有系统源码,有签名文件
本地环境:
1. AOSP编译环境
2. ubuntu 16.04
一 . AS对app系统签名
1. 系统签名文件获取
通常位于 build/make/target/product/security 目录下 。
a、testkey:普通APK,默认情况下使用。
b、platform:系统进程,进程UID为android.uid.system。
c、shared:该APK需要和contacts进程共享数据,进程UID为 android.uid.shared。(ContactProvider/CallLogProvider/...)
d、media:该APK是media/download系统中的一环 ,进程UID为 android.media 。(MTP/MediaProvider/...)
2. 生成platform.pem
openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out platform.pem -nocrypt
3. 生成platform.pk12
openssl pkcs12 -export -in platform.x509.pem -inkey platform.pem -out platform.pk12 -name dev
Enter Export Password: (输入密码,比如123456)
Verifying - Enter Export Password:(输入密码,比如123456)
4. 生成platform.keystore(可用于eclipse, 该步骤可省略)
keytool -importkeystore -deststorepass android -destkeypass 123456 -destkeystore platform.keystore -srckeystore platform.pk12 -srcstoretype PKCS12 -srcstorepass 123456 -alias dev
5. 生成platform.jks (用于 AndroidStudio)
keytool -importkeystore -deststorepass 123456 -destkeystore platform.jks -srckeystore platform.pk12 -srcstoretype PKCS12 -srcstorepass 123456
6. 将jks签名导入AS,并配置到gradle文件
a . 打开app 的build.gradle文件
b. 填入对应信息
c . 自动在build.gradle中生成对应的配置
7. 修改app的uid
在app的AndroidManifest.xml 文件中添加 uid修改
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication"
android:sharedUserId="android.uid.system">
至此就完成app系统签名相关配置了, 直接编译即可。
二. 调用系统hide接口
一般来说在app端, 不能调用hide接口, 需要用到反射等方法。
不过我们这个app已经签名成 platform apk了, 自然就有权限调用这些接口。 现在还有一个问题,在AS中单独编写一个system app ,调用hide接口不能编过。
当然,我们也可以把app代码放入系统代码中make 。
现在要说的是另外一种方法,直接通过AS编译, 不需要放入系统代码中make。
1. 在app中建对应需要调用的类
如当前要调用 PowerManager的相关方法, 就直接在 app内建立 android.os.PowerManager 类
2. 在建立的类中, 声明方法,但方法体可为空
如需要返回值,返回任意值即可
3. 在app内调用对应接口,可编译pass
这样,整个签名,编译的流程就在 AS上一次性完成了 。
附录:
常用系统签名方法
java -jar -Djava.library.path=$LIB_PATH signapk.jar platform.x509.pem platform.pk8 $apk $signed_apk
LIB_PATH : 包含库 libconscrypt_openjdk_jni.so 的路径,通常在 ./prebuilts/sdk/tools/linux/lib64
signapk.jar : 通常位于./prebuilts/sdk/tools/lib 下
platform.x509.pem / platform.pk8: build/make/target/product/security 下
$apk : 原apk路径
$signed_apk : 新apk路径
参考:
https://blog.csdn.net/YellowGreatSun/article/details/87896407