给第三方apk进行系统签名的几种方式【转】
本文转载自:http://blog.csdn.net/luzhenrong45/article/details/47733053
版权声明:本文为博主原创文章,未经博主允许不得转载。
----------------------------------------------------------------------------
此文章仅作为学习交流所用
转载或引用请务必注明原文地址:
http://blog.csdn.net/luzhenrong45/article/details/47733053
或联系作者:luzhenrong45@gmail.com
谢谢!
----------------------------------------------------------------------------
注:本文假设你已经拥有Android系统源码,且对Android源码有一定认识。
工作中有时会遇到一些apk签名不同,导致无法安装的问题。
场景一:
有一个第三方apk(具有系统权限),无法安装在我们自己的Android机器上,提示以下错误,导致无法安装。
这是由于该APK具有系统权限,而系统签名与我们的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就可以安装在我们的Android设备上了。
场景二:具有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设备上。
一个简单的Android.mk(APK源码只包含java文件,不含JNI代码)文件可以参考以下写法,其中 XXX 修改为你的apk名字。
进入该源码目录,执行mm命令,即可在out/target/product/$PRODUCT_NAME/system/app目录下生成 xxx.apk
给第三方apk进行系统签名的几种方式【转】的更多相关文章
- Android实践 -- 对apk进行系统签名
对apk进行系统签名 签名工具 网盘下载 ,需要Android系统的签名的文件 platform.x509.pem 和 platform.pk8 这个两个文件在Android源码中的 ./build/ ...
- apk增加系统签名的方法
1.命令行方法给apk加系统签名在Linux环境:java -Djava.library.path=. -jar signapk.jar platform.x509.pem platform.pk8 ...
- 自学Linux Shell9.2-基于Red Hat系统工具包存在两种方式之一:RPM包
点击返回 自学Linux命令行与Shell脚本之路 9.2-基于Red Hat系统工具包存在两种方式之一:RPM包 本节主要介绍基于Red Had的系统(测试系统centos) 1. 工具包存在两种方 ...
- C语言获取系统时间的几种方式[转]
C语言获取系统时间的几种方式 C语言中如何获取时间?精度如何? 1 使用time_t time( time_t * timer ) 精确到秒 2 使用clock_t clock() 得到的是CPU时间 ...
- 内核知识第12讲,SSDT表.以用户模式到系统模式的两种方式.
内核知识第12讲,SSDT表.以用户模式到系统模式的两种方式. 一丶IDT解析. 我们知道.IDT表中存放着各种中断信息.比如当我们调用int 3的时候,则会调用IDT表中的第三项来进行调用. 而函数 ...
- 自学Linux Shell9.4-基于Red Hat系统工具包存在两种方式之二:源码包
点击返回 自学Linux命令行与Shell脚本之路 9.4-基于Red Hat系统工具包存在两种方式之二:源码包 本节主要介绍基于Red Had的系统(测试系统centos) 1. 工具包存在两种方式 ...
- C语言获取系统时间的几种方式
C语言获取系统时间的几种方式 2009-07-22 11:18:50| 分类: 编程学习 |字号 订阅 C语言中如何获取时间?精度如何? 1 使用time_t time( time_t * ...
- Android系统关机或几种方式重启
---------------------------------------------------------------------------------------------------- ...
- apk添加系统签名
上一节,可以通过添加su的方式获取系统权限,但这种存在安全隐患,故不推荐,本文通过获取数字签名方式获取系统权限. 在我们的AndroidManifest.xml中添加 android:share ...
随机推荐
- [Python Cookbook] Numpy Array Joint Methods: Append, Extend & Concatenate
数组拼接方法一 思路:首先将数组转成列表,然后利用列表的拼接函数append().extend()等进行拼接处理,最后将列表转成数组. 示例1: import numpy as np a=np.arr ...
- soursTree新建过程.md
网上博客 https://www.cnblogs.com/tian-xie/p/6264104.html 主要的推送流程 完成所有项目的远程推送工作 点击git工作流选择第二个建立新的版本; 输入发布 ...
- Spring异步任务处理,@Async的配置和使用
本文转自http://blog.csdn.net/clementad/article/details/47403185 感谢作者 这个注解用于标注某个方法或某个类里面的所有方法都是需要异步处理的.被注 ...
- 邁向IT專家成功之路的三十則鐵律 鐵律二十九 IT人富足之道-信仰
天地自然的循環法則,讓每一個人都必須經歷生.老.病.死.喜.怒.哀.樂,然而至始至終無盡的煩惱總是遠多於快樂,因此筆者深信每一個人在一生當中,都必須要有適合自己的正確信仰,他可以在你無法以物質力量來解 ...
- 26个高效工作的小技巧 z
1.时间常有,时间优先. 2.时间总会有的:每天只计划4-5 小时真正的工作. 3.当你在状态时,就多干点:不然就好好休息:有时候会连着几天不是工作状态,有时在工作状态时却又能天天忙活 12 小时,这 ...
- Python下opencv使用笔记(七)(图像梯度与边缘检測)
梯度简单来说就是求导,在图像上表现出来的就是提取图像的边缘(无论是横向的.纵向的.斜方向的等等),所须要的无非也是一个核模板.模板的不同结果也不同.所以能够看到,全部的这些个算子函数,归结究竟都能够用 ...
- Balanced Binary Tree——数是否是平衡,即任意节点左右字数高度差不超过1
Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...
- mysql性能优化-慢查询分析、优化索引和配置 MySQL索引介绍
MySQL索引介绍 聚集索引(Clustered Index)----叶子节点存放整行记录辅助索引(Secondary Index)----叶子节点存放row identifier-------Inn ...
- 使用JDBC连接SQL Server
源文:http://bbs.bc-cn.net/dispbbs.asp?boardid=12&id=140292 整理:秋忆 接触Java或者JSP,难免会使用到数据库SQL Server 2 ...
- (全然背包)小P寻宝记——好基友一起走
题目描写叙述 话说.上次小P到伊利哇呀国旅行得到了一批宝藏.他是相当开心啊.回来就告诉了他的好基友小鑫.于是他们又结伴去伊利哇呀国寻宝. 这次小P的寻宝之路可没有那么的轻松,他们走到了一个森林,小鑫一 ...