20210524 ---- AS对app系统签名 & 调用系统hide接口

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值