在android 9.0系统中,给第三方apk进行系统签名,以便获取系统权限。
安卓网上尝试的各种方法均失效,原因可能是Android O系统之后,签名方法发生了变化。
最终找到一种解决方法,记录一下。
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