【Android 进阶】Apk 使用系统签名

作者: dongbingliu | 来源:发表于2017-06-21 19:59 被阅读5776次

刚入职的时候,固件中 app 需要在源码中编译,不是很理解,为什么不使用 IDE 编译,然后 copy 到 /system/app/*,咨询导师,得到反馈 app 需要使用系统的权限 在 AndroidManifest.xml 中声明了系统全下申明了系统权限android:sharedUserId="android.uid.system"

随着工作时间延长,慢慢理解了 apk 签名机制,为了解决上述疑问,出现了 2 套解决方案:

单独签名解决方案

  1. 找到平台签名文件“platform.pk8”和“platform.x509.pem”
文件位置 android/build/target/product/security/
  1. 签名工具“signapk.jar”
位置:android/prebuilts/sdk/tools/lib
  1. 签名证书“platform.pk8 ”“platform.x509.pem ”,签名工具“signapk.jar ”放置在同一个文件夹;
  2. 执行命令
java -jar signapk.jar platform.x509.pem platform.pk8 Demo.apk signedDemo.apk

或者直接在Ubuntu 编译环境执行
java -jar out/host/linux-x86/framework/signapk.jar build/target/product/security/platform.x509.pem build/target/product/security/platform.pk8 input.apk output.apk

IDE 中添加源码平台生成证书 platform.keystore

生成平台platform.keystore文件:

  1. 编译平台签名文件“platform.pk8”和“platform.x509.pem”
文件位置:android/build/target/product/security/
  1. 把pkcs8格式的私钥转化成pkcs12格式:
openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out shared.priv.pem -nocrypt
  1. 把x509.pem公钥转换成pkcs12格式:
openssl pkcs12 -export -in platform.x509.pem -inkey     shared.priv.pem -out shared.pk12 -name androiddebugkey
密码都是:android
  1. 生成platform.keystore
keytool -importkeystore -deststorepass android -destkeypass android -destkeystore platform.keystore -srckeystore shared.pk12 -srcstoretype PKCS12 -srcstorepass android -alias androiddebugkey

Eclipse 添加证书

将生成的platform.keystore导入eclipse 在eclipse下Windows/preferences/Android/build中设置“Custom debug keystore”为刚才生成的platform.keystore即可

调试apk时直接点击Debug As —> Android Application即使用系统签名签名了该apk

Android Studio 添加证书

image.png image.png

相关文章

网友评论

  • Focus19:因为以前没有接触过这块,感觉很陌生.
    再次请教下,按照第二种方法,我在Centtos7下执行命令:
    命令一:
    openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out shared.priv.pem -nocrypt
    -------------------------------
    报错信息:
    Error decrypting key
    139632520685456:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1199:
    139632520685456:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:374:Type=PKCS8_PRIV_KEY_INFO
    ----------------------------
    执行命令二:
    openssl pkcs12 -export -in platform.x509.pem -inkey shared.priv.pem -out shared.pk12 -name androiddebugkey
    ---------------------
    报错信息:
    unable to load private key
    139855296083856:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:707:Expecting: ANY PRIVATE KEY

    期待能得到您的指点.
    dongbingliu:在整个Android工程中转换的,platform.keystore 是在AndroidStudio 与 Eclipse 中使用系统签名;
  • Focus19:请教个问题,我按照您分享的第一种方法,在谷歌官网上下的文件:都是同一个版本:
    https://android.googlesource.com/platform/prebuilts/sdk/+/android-8.1.0_r48/tools/lib/
    https://android.googlesource.com/platform/build/+/android-8.1.0_r48/target/product/security/

    在win10下,cmd运行命令但报错了:
    java -jar signapk.jar platform.x509.pem platform.pk8 aaaa.apk bbb.apk
    ----------------
    报错信息:
    Error: Invalid or corrupt jarfile signapk.jar
    dongbingliu:需要安装JDK
    java -jar signapk.jar platform.x509.pem platform.pk8 aaaa.apk bbb.apk 在Ubuntu Linux 环境中测试的,至于Win 10 终端没有测试过!
  • 傻小子_2022:android/build/target/product/security/ 请问楼主,这个文件夹是哪儿来的,我没找到这个文件夹
    dongbingliu:Android 源码目录里面
  • 莫再讲xml:请教一个问题,如果你自己编译系统,使用系统签名文件A,然后自己写APP同样使用签名A进行签名,这样才能申明和系统同UID,即:“android.uid.system”;谷歌编号的系统签名应该不会泄露吧,这样我随便哪个钓鱼app都可以用系统签名来签,然后拿到系统权限。
  • Pencilso:在Github找到了文章中提供的系统签名文件,https://github.com/aosp-mirror/platform_build
    水中沚_b078:@DB_Liu 我用GitHub上找到的https://github.com/aosp-mirror/platform_build 这个地址提取的文件, Android studio 自带模拟器安装不上去. 手机上也不行
    dongbingliu::+1: 不错
  • Pencilso:平台签名文件“platform.pk8”和“platform.x509.pem”
    这两个文件不能分享下? 为这个东西 我还得去下一套Android源码....
    dongbingliu:比如小米、华为、魅族等厂商都是使用自己的制作出来的“platform.pk8”和“platform.x509.pem”文件,都不是使用Google官方提供的此秘钥文件;

    开发的应用使用了系统权限,使用Google Android 默认的签名是不能运行在小米,华为等Android设备上;
    Pencilso:android/build/target/product/security/ 目录下的 “platform.pk8”和“platform.x509.pem”
    这两个应该不是你们公司的私匙吧?
  • f20544a0c307:正如你开头所说,把ide编译的apk放在system/app可以获得系统权限,为什么还要用系统签名
    dongbingliu:开头说的是自己的疑问,咨询导师,说明此种方案行不通;:smile:
  • 地球是猿的:楼主能不能提供下两个签名文件的下载链接?
    dongbingliu:@正义的奥特曼 直接替换公有签名文件即可!
    24738f50d449:@DB_Liu 楼主您好,公司私有签名文件是怎么打到系统里的,有了解吗?
    dongbingliu:目前使用的是公司私有签名文件,不方便提供,可以自己制作生成签名文件,文中有具体方法,细节不懂,可私信给我

本文标题:【Android 进阶】Apk 使用系统签名

本文链接:https://www.haomeiwen.com/subject/bmiaqxtx.html