1.      生成Android APK包签名证书
1).     在doc中切换到jdk的bin目录
cd C:\Program Files\Java\jdk1.6.0_18\bin
2).     运行下面的命令
keytool –genkey –alias android123.keystore –keyalg RSA –validity 20000 –keystore android123.keystore
/*解释:keytool工具是Java JDK自带的证书工具
-genkey参数表示:要生成一个证书(版权、身份识别的安全证书)
-alias参数表示:证书有别名,-alias mine.keystore表示证书别名为:mine
-keyalg RSA表示加密类型,RSA表示需要加密,以防止别人盗取
-validity 20000表示有效时间20000天( K3
-keystore mine123.keystore表示要生成的证书名称为mine123
*/
 
输入完回车后屏幕显示:
输入keystore密码:[密码不回显](一般建议使用20位,最好记下来后面还要用)
再次输入新密码:[密码不回显]
您的名字与姓氏是什么?
[Unknown]:lili
您的组织单位名称是什么?
[Unknown]:snoopy
您的组织名称是什么?
[Unknown]:snoopy team
您所在的城市或区域名称是什么?
[Unknown]:beijing
您所在的州或省份名称是什么?
[Unknown]:beijing
该单位的两字母国家代码是什么
[Unknown]:CN
CN=lili, U=snoopy, O=snoopy team, L=beijing, ST=beijing, C=CN正确吗?
[否]:Y
输入< mine.keystore>的主密码
(如果和keystore密码相同,按回车):

查看C:\Program Files\Java\jdk1.6.0_18\bin,生成了以后签名用的证书Key:mine123.keystore

这里,大家如果试过在eclipse中生成一个签名文件时,它的大小也是2kb,同时生成过程中,还是会让填写别名的。

2.      删除之前的签名文件
1).     用解压工具解压缩apk文件(如:解压到D:\Sign\PhoneBook)

压缩包内容解析:

  • AndroidManifest.xml

该文件是每个应用都必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等等信息[ , ],如要把apk上传到Google Market上,也要对这个xml做一些配置。在apk中的AndroidManifest.xml是经过压缩的,可以通过AXMLPrinter2工具[ , ]解开,具体命令为:java -jar AXMLPrinter2.jar AndroidManifest.xml

  • META-INF目录

META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。在eclipse编译生成一个apk包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。这就保证了apk包里的文件不能被随意替换。比如拿到一个apk包后,如果想要替换里面的一幅图片,一段代码, 或一段版权信息,想直接解压缩、替换再重新打包,基本是不可能的。如此一来就给病毒感染和恶意修改增加了难度,有助于保护系统的安全。

  • res目录

res目录存放资源文件。包括图片,字符串等等。

  • lib目录

lib目录下的子目录armeabi存放的是一些so文件。这个地方多讲几句,都是在开发过程中摸索出来的。eclipse在打包的时候会根据文件名的命名规则(lib****.so)去打包so文件,开头和结尾必须分别为“lib”和“.so”,否则是不会打包到apk文件中的。其他非eclipse开发环境没有测试过。如果你是用SDK和NDK开发的话,这部分很重要,甚至可以通过把一些不是so文件的文件通过改名打包到apk中,具体能干些什么那就看你想干什么了,呵呵呵!

  • assets目录

assets目录可以存放一些配置文件,这些文件的内容在程序运行过程中可以通过相关的API获得。具体的方法可以参考SDK中的例子:在sdk的 \SDK\1.6\android-sdk-windows-1.6_r1\platforms\android-1.6\samples\ApiDemos 例子中,有个com.example..android.apis.content 的例子,在这个例子中他把一个text文件放到工程的asset目录下,然后把这个txt当作普通文件处理。处理的过程在ReadAsset.java中。同理,asset也可以放置其他文件。

  • classes.dex文件

classes.dex是java源码编译后生成的java字节码文件。但由于Android使用的dalvik虚拟机与标准的java虚拟机是不兼容的,dex文件与class文件相比,不论是文件结构还是opcode都不一样。目前常见的java反编译工具都不能处理dex文件。Android模拟器中提供了一个dex文件的反编译工具,dexdump。用法为首先启动Android模拟器,把要查看的dex文件用adb push上传的模拟器中,然后通过adb shell登录,找到要查看的dex文件,执行dexdump xxx.dex。另,有人介绍到Dedexer是目前在网上能找到的唯一一个反编译dex文件的开源工具,需要自己编译源代码。

  • resources.arsc

编译后的二进制资源文件  ”
 
2).     找到下面的目录META-INF,删除目录META-INF
3).     将PhoneBook整个文件夹用zip工具,重新打包成zip压缩包,然后更改后缀为apk (注意:产生的PhoneBook.zip中没有二级根目录)
 
3.      重新签名APK文件
1).     将证书复制到与需要重新签名的apk文件相同的目录下(如:复制到D:\Sign)
2).     在doc中切换到需要重新前面的apk文件的目录下
cd D:\Sign
3).     运行下面的命令
jarsigner –verbose –keystore mine123.keystore –signedjar PhoneBook_signed.apk PhoneBook.apk mine.keystore
/*解释:hjarsigner是Java的签名工具
-verbose参数表示:显示出签名详细信息
-keystore表示使用当前目录中的mine123.keystore签名证书文件。
-signedjar PhoneBook_signed.apk表示签名后生成的APK名称,PhoneBook.apk表示未签名的APK Android软件, mine.keystore表示别名
*/
输入完回车后屏幕如下图显示:

查看D:\Sign目录,已生成重新签名后的PhoneBook_signed.apk文件

另外,有时候会发现这种方式打出的APK包在某些地方用不了,文章《简单修改APK和重新签名》提供了一个更为便捷的方案。

参考资料:

重新签名APK文件

转 对APK进行重签名的更多相关文章

  1. 使用re-sign.jar对apk进行重签名

    准备: ① re-sign.jar重签名工具:(下载地址为:http://troido.de/downloads/category/1): ② 待重签名的apk:      重签名步骤: ① 右键re ...

  2. mac下自己实现re-sign.jar对apk进行重签名

    利用Robotinum对给的apk文件进行自动化测试,在不知道源码的情况下,只有apk文件如何进行自动化测试呢? 首先需要对apk文件进行重签名,并获得该apk文件的包名和程序入口的类名. 最开始网上 ...

  3. apk的重签名

    1.      生成Android APK包签名证书 1).     在doc中切换到jdk的bin目录 cd C:\Program Files\Java\jdk1.6.0_18\bin 2).    ...

  4. apk重签名的两种方法

    因为robotium要求被测应用和测试代码要有一致的签名, 所以需要将apk包重签名. 方法一:通过re-sign.jar来产生debug key的apk(不适用于jdk 7以上) re-sign.j ...

  5. Android APK 重签名

    对APK 进行在线 加固后,Apk体积一般会变大,而且Apk会无法直接安装,因为缺少了你的签名.是的,你需要对这个Apk进行重签名. 如何重签名 重签名的方法,一般来说,有两种,第一种是用JDK自带的 ...

  6. re-sign重签名

    准备: ① re-sign.jar重签名工具:(下载地址为:http://troido.de/downloads/category/1): ② 从D:\Android\sdk\build-tools\ ...

  7. Android测试之 APK重签名方法

    方法一:命令行重签名 D:\>keytool -helpkeytool 用法: -certreq [-v] [-protected] [-alias <别名>] [-sigalg & ...

  8. 用re-sign.jar重签名apk后安装失败的解决办法

    问题 打开re-sign.jar,将下载好的apk拖入re-sign.jar的界面进行重签名.重签名成功后,通过adb intall命令安装重签名后的apk文件失败.提示:Failure [INSTA ...

  9. [转]Android应用安装包apk文件的反编译与重编译、重签名

    背景介绍: 最近在做Robotium自动化测试,使用到solo.takeScreenshot()函数以在测试过程中截图,但此函数需要被测试APP具有<uses-permission androi ...

随机推荐

  1. session 购物车

    package session; import java.io.IOException;import java.util.ArrayList;import java.util.List; import ...

  2. request 防盗链

    package request; import java.io.IOException;import javax.servlet.ServletException;import javax.servl ...

  3. JavaWeb学习总结第四篇--Servlet开发

    Servlet开发 用户在浏览器中输入一个网址并回车,浏览器会向服务器发送一个HTTP请求.服务器端程序接受这个请求,并对请求进行处理,然后发送一个回应.浏览器收到回应,再把回应的内容显示出来.这种请 ...

  4. BZOJ 1002 FJOI2007 轮状病毒 递推+高精度

    题目大意:轮状病毒基定义如图.求有多少n轮状病毒 这个递推实在是不会--所以我选择了打表找规律 首先执行下面程序 #include<cstdio> #include<cstring& ...

  5. python 基础 2.1 if 流程控制(一)

    一.if  else 1.if 语句     if expression:   //注意if后有冒号,必须有        statement(s)     //相对于if缩进4个空格 注:pytho ...

  6. 九度OJ 1022:游船出租 (统计)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3670 解决:1444 题目描述:     现有公园游船租赁处请你编写一个租船管理系统.当游客租船时,管理员输入船号并按下S键,系统开始计时 ...

  7. 使用python实现二分法查找

    最近开始学习mit的python课程,其中手工实现的一个关于二分法查找的练习代码个人感觉比较有参考价值,贴上来分享交流一下. 主要功能是在1-100中自己猜测一个数值,随后系统产生数值看是否符合猜测, ...

  8. VC调用Delphi DLL

    别的没什么,是一定可以调用成功的.但是意外的是,ShowMessage函数在DLL里也可以轻易被调用.此外,Delphi里的var 相当于VC里的引用,需要在函数原型里正确标识,否则传递普通变量甚至常 ...

  9. Linux入门基础(一)——ls、mkdir命令

  10. debian7 amd64版本添加对x86包的支持

    dpkg --add-architecture i386apt-get updateapt-get install ia32-libs ia32-libs-gtk