编译生成SignApk.jar并给apk签名

参考博客:

https://blog.csdn.net/u010312474/article/details/108099836

https://blog.csdn.net/u012587005/article/details/80255666

apk的配置文件AndroidMannifest.xml中添加 android:sharedUserId="android.uid.system"  需要重新给apk签名,才可以安装使用

一. SignApk.jar是安卓源码包中的一个签名工具,代码位于Android源码目录下的/build/tools/signapk/SignApk.java文件中。可以编译生成SignApk.jar。

编译生成SignApk.jar步骤:

①进入/build/tools/signapk/文件夹(mm不能执行的话,可以先到根目录source build/envsetup.sh)

②执行命令: mm

③在out/host/linux-x86/framework/目录找到signapk.jar。

二.签名签名文件

Android源码目录/build/target/product/security/中找到platform.pk8 platform.x509.pem等签名文件,把platform.pk8 与platform.x509.pem 拷贝出来。

java -jar signapk.jar  platform.x509.pem platform.pk8 old.apk new.apk
  •  

可能会出现错误如下,那就执行第三步

Exception in thread "main" java.lang.UnsatisfiedLinkError: no conscrypt_openjdk_jni in java.library.path
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
	at java.lang.System.loadLibrary(System.java:1122)
	at org.conscrypt.NativeCryptoJni.init(NativeCryptoJni.java:25)
	at org.conscrypt.NativeCrypto.(NativeCrypto.java:54)
	at org.conscrypt.OpenSSLBIOInputStream.(OpenSSLBIOInputStream.java:34)
	at org.conscrypt.OpenSSLX509Certificate.fromX509PemInputStream(OpenSSLX509Certificate.java:119)
	at org.conscrypt.OpenSSLX509CertificateFactory$1.fromX509PemInputStream(OpenSSLX509CertificateFactory.java:220)
	at org.conscrypt.OpenSSLX509CertificateFactory$1.fromX509PemInputStream(OpenSSLX509CertificateFactory.java:216)
	at org.conscrypt.OpenSSLX509CertificateFactory$Parser.generateItem(OpenSSLX509CertificateFactory.java:94)
	at org.conscrypt.OpenSSLX509CertificateFactory.engineGenerateCertificate(OpenSSLX509CertificateFactory.java:272)
	at java.security.cert.CertificateFactory.generateCertificate(CertificateFactory.java:339)
	at com.android.signapk.SignApk.readPublicKey(SignApk.java:182)
	at com.android.signapk.SignApk.main(SignApk.java:1087)

  •  

三.找到 libconscrypt_openjdk_jni库
若是Linux系统
拷贝prebuilts/sdk/tools/linux/lib64/libconscrypt_openjdk_jni.so
若是mac系统
拷贝prebuilts/sdk/tools/darwin/lib64/libconscrypt_openjdk_jni.dylib

四.如下命令即可完成签名:
java -Djava.library.path=. -jar signapk.jar platform.x509.pem platform.pk8 app.apk app_sign.apk

五.在主机用adb push apk到虚拟机

adb push app_sign.apk /storage/emulated/0/Download
  • 1

六.安装apk pm install app_sign.apk
出现错误

Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]

Android Studio 3.0会在debug apk的manifest文件application标签里自动添加 android:testOnly="true"属性,导致IDE中run跑出的apk在大部分手机上只能用adb install -t 来安装,在oppo手机上甚至安装不了

解决办法
在gradle.properties(项目根目录或者gradle全局配置目录 ~/.gradle/)文件中添加android.injected.testOnly=false

 

你可能感兴趣的:(Android应用,SignApk给apk签名)