Android P第三方apk系统签名问题

本文详细介绍了在Android9.0系统中为第三方apk进行系统签名的具体步骤和遇到的问题解决方案。通过修改AndroidManifest.xml并使用特定的签名方法,最终在vendor目录下完成签名过程,确保apk能够获取系统权限。

在android 9.0系统中,给第三方apk进行系统签名,以便获取系统权限。

安卓网上尝试的各种方法均失效,原因可能是Android O系统之后,签名方法发生了变化。

最终找到一种解决方法,记录一下。

AndroidManifest.xml

AndroidManifest.xml中增加标签:

android:sharedUserId="android.uid.system"

声明为系统应用。

报错:

Installation did not succeed.
The application could not be installed: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
Installation failed due to: 'null'

不生效的签名方法

\build\target\product\security\platform.x509.pem
\build\target\product\security\platform.pk8
\out\host\linux-x86\framework\signapk.jar

签名需要用到以上三个文件,可以把上面三个文件跟你想要签名的apk放到一个目录下,执行:
java -Djava.library.path=. -jar signapk.jar platform.x509.pem platform.pk8 Demo.apk Demo-signed.apk

需要主要的是一定要加上 -Djava.library.path=. 指定路径,否则会报错:

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.conscrypt.NativeCrypto.get_cipher_names(Ljava/lang/String;)[Ljava/lang/String;
	at org.conscrypt.NativeCrypto.get_cipher_names(Native Method)
	at org.conscrypt.NativeCrypto.<clinit>(NativeCrypto.java:764)
	at org.conscrypt.OpenSSLProvider.<init>(OpenSSLProvider.java:56)
	at org.conscrypt.OpenSSLProvider.<init>(OpenSSLProvider.java:49)
	at com.android.signapk.SignApk.main(SignApk.java:942)

或者直接:
java -Xmx2048m -Djava.library.path=“out/host/linux-x86/lib64” -jar out/host/linux-x86/framework/signapk.jar build/target/product/security/platform.x509.pem build/target/product/security/platform.pk8 Demo.apk Demo-signed.apk

但是安装的时候还是报错:

Performing Streamed Install
adb: failed to install Z:\imx8_p9.0.0_2.1.0_auto_ga\android9.0.0\EvsDemo-release-signed.apk: Failure [INSTALL_FAILED_SHA
RED_USER_INCOMPATIBLE: Package couldn't be installed in /data/app/com.ad.evsdemo-lB1Gqsw-SHD3dzoOYDTZrQ==: Package com.a
d.evsdemo has no signatures that match those in shared user android.uid.system; ignoring!]

签名失败。

最终的解决方法

在\vendor目录新建目录\vendor\app.
将需要签名的Demo.apk拷贝到app目录下,并新建Android.mk文件。
Android.mk

LOCAL_PATH := $(call my-dir)
##############################
include $(CLEAR_VARS)
 
LOCAL_MODULE := EvsDemo
LOCAL_SRC_FILES := EvsDemo-release.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := .apk
LOCAL_BUILT_MODULE_STEM := package.apk
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true
LOCAL_DEX_PREOPT := false
include $(BUILD_PREBUILT)

执行mm编译,即可在\out\target\product\mek_8q\system\priv-app下生成签名的apk文件。

adb install Demo.apk成功。

参考文献:
https://blog.youkuaiyun.com/sinat_24946363/article/details/79934086

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunxiaolin2016

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值