给第三方apk进行系统签名的几种方式

----------------------------------------------------------------------------

此文章仅作为学习交流所用

转载或引用请务必注明原文地址:

http://blog.csdn.net/luzhenrong45/article/details/47733053

或联系作者:[email protected]

谢谢!

----------------------------------------------------------------------------

注:本文假设你是一个已经拥有Android系统源码,且对Android源码有一定认识。

工作中有时会遇到一些apk签名不同,导致无法安装的问题。

场景一:

有一个第三方apk(具有系统权限),无法安装在我们自己的Android机器上,提示以下错误,导致无法安装。

这是由于供应商提供的APK是用他们的签名工具签名的,而我们的aDesk,是采用我们自己的系统签名工具的。供应商的APK安装在我们的aDesk上,Android检测到系统签名不一致,Android系统由于考虑安全因素,就阻止安装了。

解决方法:使用自己的Android签名工具给apk重新签名。

(1) Android的签名文件存放于系统源码的 build/target/product/security/目录下

该目录下有 media.pk8、media.x509.pem、platform.pk8、platform.x509.pem、shared.pk8、shared.x509.pem、testkey.pk8、testkey.x509.pem等签名文件,不同的签名文件,对应不同的权限。Android默认的签名文件为testkey.pk8、testkey.x509.pem。

(2) Android自带的签名工具为 signapk.jar, 可以在源码编译目录out中找到,具体路径为:out/host/linux-x86/framework/signapk.jar    以上APK具有系统权限,重新签名应该使用platform签名文件进行签名。

签名方法:将对应权限的签名文件platform.pk8、platform.x509.pem, 签名工具 signapk.jar, 以及需要签名的apk(假设 old.apk) 放到同一目录下,打开linux终端(windows cmd也可以),进入该目录,进行重新签名:

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

重新生成的new.apk就可以安装在我们的aDesk瘦客户机上了。

场景二:供应商提供了apk源码,同样是具备系统权限的,当我们将apk源码导入Eclipse中,使用 Run as --> Android application 编译安装APK时, Eclise同样会提示场景一的错误信息,原因也是一样。我们同样可以将Eclipse生成的apk按照场景一的方法进行重新签名,再安装到我们的设备上。但是,有时可能我们会经常修改apk源码进行调试验证,如果每次都把apk拿出来进行重新签名,再安装,这样确实麻烦了一些。Eclipse是支持使用自己的系统签名工具进行APK打包签名的。使用这种方法,可以快速而方便地对APK进行系统签名,并将其安装到我们的Android设备上。下面说一下具体做法:

步骤一:同样取源码目录build\target\product\security 目录下的platform.pk8 platform.x509.pem放到某一个目录下

步骤二:进入该目录,生成shared.priv.pem

openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out shared.priv.pem -nocrypt

步骤三:生成pkcs12

openssl pkcs12 -export -in platform.x509.pem -inkey shared.priv.pem -out shared.pk12 -name androiddebugkey

Enter Export Password:

Verifying - Enter Export Password:

这里会提示输入密码,默认密码是android,如是自己制作的key,输入对应的密码。

步骤四:生成debug.keystore,Eclipse需要使用该keystore.

keytool -importkeystore -deststorepass android -destkeypass android -destkeystore debug.keystore -srckeystore shared.pk12 -srcstoretype PKCS12 -srcstorepass android -alias androiddebugkey

步骤五:在Eclipse的  Windows/Preferences/Android/Build 中设置"Custom
debug keystore"为刚才步骤四生成的debug.keystore即可直接run安装调试apk.这样的话,就可以不用再去用signapk.jar,如java -jar signapk.jar platform.x509.pem platform.pk8 *.apk **.apk进行签名了。

注:场景二其实也可以直接将APK源码放在Android系统源码的环境下用make来编译,需要编写Android.mk,加入LOCAL_CERTIFICATE
:= platform,

可以直接使用mm编译apk, 编译出来的APK同样可以顺利安装在我们自己的Android设备上。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-11 01:18:55

给第三方apk进行系统签名的几种方式的相关文章

给第三方apk进行系统签名的几种方式【转】

本文转载自:http://blog.csdn.net/luzhenrong45/article/details/47733053 版权声明:本文为博主原创文章,未经博主允许不得转载. ---------------------------------------------------------------------------- 此文章仅作为学习交流所用转载或引用请务必注明原文地址:http://blog.csdn.net/luzhenrong45/article/details/4773

Android实践 -- 对apk进行系统签名

对apk进行系统签名 签名工具 网盘下载 ,需要Android系统的签名的文件 platform.x509.pem 和 platform.pk8 这个两个文件在Android源码中的 ./build/target/product/security 目录下 具体的使用方法: java -jar signapk.jar platform.x509.pem platform.pk8 unsign.apk signed.apk 最后生成的apk就是已经进行系统签名的apk

C语言获取系统时间的几种方式

C语言获取系统时间的几种方式 2009-07-22 11:18:50|  分类: 编程学习 |字号 订阅 C语言中如何获取时间?精度如何? 1 使用time_t time( time_t * timer ) 精确到秒2 使用clock_t clock() 得到的是CPU时间 精确到1/CLOCKS_PER_SEC秒3 计算时间差使用double difftime( time_t timer1, time_t timer0 )4 使用DWORD GetTickCount() 精确到毫秒5 如果使用

自学Linux Shell9.3-基于Red Hat系统工具包存在两种方式之一:RPM属性依赖的解决方式-YUM在线升级

点击返回 自学Linux命令行与Shell脚本之路 9.3-基于Red Hat系统工具包存在两种方式之一:RPM属性依赖的解决方式-YUM在线升级 本节主要介绍基于Red Had的系统(测试系统centos) 原文地址:https://www.cnblogs.com/yaoyaojcy/p/9829551.html

赢得企业客户服务系统创新的6种方式

二次营销是在激烈的市场竞争环境下的一种竞争导向型战略,倡导经营客户,降低营销成本.企业构建客户服务系统,旨在提升企业在处理客户服务中的快速反应能力,通过提升客户满意度.客户忠诚度来达到二次营销效果,这就要求公司必须有较强的客户服务管理能力. 客户服务应答 远程服务系统结合了人工在线客服以及智能机器人应答两种方式,人工在线客服包括了嵌入企业网站.软件产品中的在线客服以及接入到移动端微信公众号.APP的在线客服:基于知识库的智能机器人应答,可帮助企业建立自助答疑系统,根据实际服务需求自定义建立知识库

Android 对APK进行系统签名

第一个方法简单点,不过需要在Android系统源码的环境下用make来编译: 1. 在应用程序的AndroidManifest.xml中的manifest节点中加入android:sharedUserId="android.uid.system"这个属性. 2. 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行 3. 使用mm命令来编译,生成的apk就有修改系统时间的权限了. 第二个方法麻烦点,不过不用开虚拟机跑到源码环境下用make来

Android--获取系统时间的几种方式

方式一: import java.text.SimpleDateFormat; SimpleDateFormat formatter = new SimpleDateFormat ("yyyy年MM月dd日 HH:mm:ss"); Date curDate = new Date(System.currentTimeMillis()); //获取当前时间   String str = formatter.format(curDate); 方式二: 取得系统时间 1. long time=

mac虚拟机上(centos系统)设置联网第二种方式

这种方式简单,不容易出错,用的桥接的方式. 这样的安装的centos会得到ip地址 然后编辑一下网卡配置,使其变为静态得ip 输入命令 # vi /etc/sysconfig/network-scripts/ifcfg-enp03 修改的内容 BOOTPROTO=static #静态ip ONBOOT=yes #自动启用 IPADDR=192.168.1.103#静态ip地址 NETMASK=255.255.255.0#子网掩码 GATEWAY=192.168.1.1 #网关 DNS1=192.

Linux系统修改系统时间的两种方式

1.查看当前时间[[email protected] ~]# date2018年 03月 12日 星期一 22:32:44 CST 2.修改系统时间(重启失效)[[email protected] ~]# date -s "2018-03-21 16:02:00"2018年 03月 21日 星期三 16:02:00 CST[[email protected] ~]# date2018年 03月 21日 星期三 16:02:03 CST 3.修改系统时间(重启不失效)[[email pr