Android P第三方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.csdn.net/sinat_24946363/article/details/79934086

你可能感兴趣的:(Android,系统)