目标描述
打包,就是把文件夹打包为zip文件,一般的打包工具就可以,然后改后缀为apk即可
签名,为zip中的各个文件进行签名,生成的信息放在META-INF文件夹下
签名
签名有很多方法,可以用jdk提供的jarsigner,也可以用android源码编译生成的signapk.jar。
利用jdk工具jarsigner 【1】
大致流程
签名的过程:
1.需要先有自己的密钥,没有的话用java的keytool生成一个
2.用密钥对apk文件签名
签名的意义大概是保障只有用相同密钥签名的apk才可以覆盖(待验证),安装签名不同的同名apk只能卸载后进行替换。
具体流程和注意
命令行具体使用到的命令:
1.产生keystore文件
keytool -genkey -alias [ALIAS] -keyalg RSA -validity 365 -keystore xxx.keystore
-alias,别名
-validity,有效时间
查看keystore
keytool -list -keystore xxx.keystore
2.用keystore文件签名
jarsigner -verbose -keystore [xxx.keystore] -signedjar [out.apk] [in.apk] [ALIAS]
-verbose,显示签名过程的详细信息
注,签名前可能需要把原始包中的META-INF文件夹删掉
验证已签名apk包
jarsigner -verify xxx.apk
注,这里可能会出现签名时没问题,验证却失败的情况,把jre7换位jre6可以解决这一问题,不明白具体原因。
利用android源码编译生成的signapk.jar 【2】
1.signapk.jar在android编译后的/out/host/linux86/framwork目录中
2.签名文件可以用android源码目录下的build/target/product/security/中的testkey.pk8和testkey.x509.pem
3.java -jar signapk.jar testkey.x509.pem testkey.pk8 [in.apk] [out.apk]
参考资料:
【1】http://www.tttabc.com/android/keytool-keystore-jarsigner-apk.htm
【2】《Android软件安全与逆向分析》