刚入职的时候,固件中 app 需要在源码中编译,不是很理解,为什么不使用 IDE 编译,然后 copy 到
/system/app/*
,咨询导师,得到反馈 app 需要使用系统的权限 在 AndroidManifest.xml 中声明了系统全下申明了系统权限android:sharedUserId="android.uid.system"
随着工作时间延长,慢慢理解了 apk 签名机制,为了解决上述疑问,出现了 2 套解决方案:
单独签名解决方案
- 找到平台签名文件“platform.pk8”和“platform.x509.pem”
文件位置 android/build/target/product/security/
- 签名工具“signapk.jar”
位置:android/prebuilts/sdk/tools/lib
- 签名证书“platform.pk8 ”“platform.x509.pem ”,签名工具“signapk.jar ”放置在同一个文件夹;
- 执行命令
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文件:
- 编译平台签名文件“platform.pk8”和“platform.x509.pem”
文件位置:android/build/target/product/security/
- 把pkcs8格式的私钥转化成pkcs12格式:
openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out shared.priv.pem -nocrypt
- 把x509.pem公钥转换成pkcs12格式:
openssl pkcs12 -export -in platform.x509.pem -inkey shared.priv.pem -out shared.pk12 -name androiddebugkey
密码都是:android
- 生成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
网友评论
再次请教下,按照第二种方法,我在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
期待能得到您的指点.
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
java -jar signapk.jar platform.x509.pem platform.pk8 aaaa.apk bbb.apk 在Ubuntu Linux 环境中测试的,至于Win 10 终端没有测试过!
这两个文件不能分享下? 为这个东西 我还得去下一套Android源码....
开发的应用使用了系统权限,使用Google Android 默认的签名是不能运行在小米,华为等Android设备上;
这两个应该不是你们公司的私匙吧?