在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

更多相关文章

  1. Linux下的两种timer方法 (Android 下NDK开发)
  2. Android中VideoView播放当前工程中视频文件的方法
  3. Android NDK r5 windows系统上安装与使用
  4. Android Studio 中报错 程序包org.apache.http不存在 的解决方法
  5. Android中使用Makefile编译程序和库的方法
  6. XML 文件XMLPull
  7. 手把手教你:android调用系统相机、相册功能,适配6.0权限获取以及7.
  8. Android 添加系统设置属性

随机推荐

  1. mysql简单处理表格与pdo预处理的作用
  2. 前端、后端、测试、研发经理必备技能-Api
  3. react源码解读 getNextLanes
  4. [emerg] bind() to 0.0.0.0:XXXX failed
  5. 08-11 作业 面对对象和自动加载 封装 继
  6. 获取 NodeJS 程序退出码
  7. php上传函数封装
  8. 补0818:数据库ddl,dml实操 及 新建用户表
  9. PHP文件上传函数封装
  10. 补0817:域名空间内类实现自动加载,use的作