Mr.Alright---apk系统平台签名

先把下面几个文件放到一个文件夹sign

1) /out/host/Linux-x86/framework/signapk.jar

2) /build/target/product/security/platform.x509.pem

3) /build/target/product/security/platform.pk8

在Linux环境下,进入到刚创建的sign文件夹,执行下面的命令

java -jar signapk.jar platform.x509.pem platform.pk8 unsign.apk signed.apk

恭喜你,报错啦!错误长这样子

Exception in thread "main" java.lang.UnsatisfiedLinkError: no conscrypt_openjdk_jni-linux-x86_64 in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
        at java.lang.Runtime.loadLibrary0(Runtime.java:871)
        at java.lang.System.loadLibrary(System.java:1124)
        at org.conscrypt.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:54)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.conscrypt.NativeLibraryLoader$1.run(NativeLibraryLoader.java:297)
        at org.conscrypt.NativeLibraryLoader$1.run(NativeLibraryLoader.java:289)
        at java.security.AccessController.doPrivileged(Native Method)

然后,你开始问度娘,度娘啊,杜十娘,额...不好意思咋还唱起歌来了

度娘告诉你,prebuilts/sdk/tools/linux/lib64/libconscrypt_openjdk_jni.so,把这个文件也放到sign目录下,然后执行

java -Djava.library.path=. -jar signapk.jar platform.x509.pem platform.pk8 unsign.apk signed.apk

然后,别人成功了,然而,我特么你特么又报错了,这次错误长这样

FATAL ERROR in native method: RegisterNatives failed for 'org/conscrypt/NativeCrypto'; aborting...
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1934)
        - locked <0x0000000670f868b0> (a java.util.Vector)
        - locked <0x0000000670fc3a98> (a java.util.Vector)
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1850)
        at java.lang.Runtime.loadLibrary0(Runtime.java:871)
        - locked <0x0000000670f9a110> (a java.lang.Runtime)
        at java.lang.System.loadLibrary(System.java:1124)
        at org.conscrypt.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:54)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

于是你开始质问度娘,娘啊,你咋能坑你娃呢?然后度娘又告诉你,遇事不要慌,先发个朋友圈...

你先把unsigned.apk放到和out同级的目录下,执行下面的命令

java -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 unsign.apk signed.apk

之后,你就会发现,unsign.apk同目录下出现了个signed.apk,成功了!!!

最后总结下我成功的办法,也就两步

1.把unsigned.apk放到和out同级的目录下

2.安卓10执行

java -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 unsign.apk signed.apk

安卓11执行,两个的差别是路径不同了

java -Djava.library.path="out/soong/host/linux-x86/lib64"  -jar  out/soong/host/linux-x86/framework/signapk.jar  build/target/product/security/platform.x509.pem build/target/product/security/platform.pk8 unsign.apk signed.apk

需要注意的是,安卓11签名的时候需要jdk9, 可以通过 ls /usr/lib/jvm/ 查看当前是否安装了jdk9

public2@80-28:~/work/11/alps$ ls /usr/lib/jvm/
java-1.8.0-openjdk-amd64  java-8-openjdk-amd64  jdk-9.0.1

如果没安装了,先安装;安装的,将11\alps\build\make\envsetup.sh中的默认值改成 1.9的

    export ANDROID_JAVA_HOME=$(get_abs_build_var ANDROID_JAVA_HOME)
    export JAVA_HOME=$ANDROID_JAVA_HOME
    #export ANDROID_JAVA_TOOLCHAIN=$(get_abs_build_var ANDROID_JAVA_TOOLCHAIN)
    #这个位置改成jdk9的路径
    export ANDROID_JAVA_TOOLCHAIN=/usr/lib/jvm/jdk-9.0.1/bin 
    export ANDROID_PRE_BUILD_PATHS=$ANDROID_JAVA_TOOLCHAIN:
    export PATH=$ANDROID_PRE_BUILD_PATHS$PATH

这样才可以签名成功

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值