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_INCOMPATIBLEInstallation 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 Installadb: failed to install Z:\imx8_p9.0.0_2.1.0_auto_ga\android9.0.0\EvsDemo-release-signed.apk: Failure [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE: Package couldn't be installed in /data/app/com.ad.evsdemo-lB1Gqsw-SHD3dzoOYDTZrQ==: Package com.ad.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 := EvsDemoLOCAL_SRC_FILES := EvsDemo-release.apkLOCAL_MODULE_CLASS := APPSLOCAL_MODULE_SUFFIX := .apkLOCAL_BUILT_MODULE_STEM := package.apkLOCAL_CERTIFICATE := platformLOCAL_PRIVILEGED_MODULE := trueLOCAL_DEX_PREOPT := falseinclude $(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
更多相关文章
- Linux下的两种timer方法 (Android 下NDK开发)
- Android中VideoView播放当前工程中视频文件的方法
- Android NDK r5 windows系统上安装与使用
- Android Studio 中报错 程序包org.apache.http不存在 的解决方法
- Android中使用Makefile编译程序和库的方法
- XML 文件XMLPull
- 手把手教你:android调用系统相机、相册功能,适配6.0权限获取以及7.
- Android 添加系统设置属性