AndroidAndroid-SignatureAndroid…
来源:互联网 发布:淘宝产品上下架时间 编辑:程序博客网 时间:2024/05/15 09:08
1. 为什么要签名
1)
由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,以此保证签名不同的包不被替换
2)
签名对于包中的每个文件进行处理,以此确保包中内容不被替换
3)
2.
1)
2)
3)
4)
5)
6)
3.
1)
a)
eclipse插件默认赋予程序一个DEBUG权限的签名,此签名的程序不能发布到market上,此签名有效期为一年,如果过期则导致你无法生成apk文件,此时你只要删除debugkeystore即可,系统又会为你生成有效期为一年的新签名
b)
右键点击项目名,在菜单中选择Android Tools,然后选择Export Signed ApplicationPackage…,即可通过eclipse自定义证书并签名
c)
右键点击项目名,在菜单中选择Android Tools,然后选择Export Signed ApplicationPackage…,即可导出未签名的包,之后可通过命令行方式签名
2)
使用标准的java工具keytool和jarsigner来生成证书和给程序签名
a)
$ keytool -genkey -keystore keyfile -keyalg RSA -validity 10000-alias yan
注:validity为天数,keyfile为生成key存放的文件,yan为私钥,RSA为指定的加密算法(可用RSA或DSA)
b)
$ jarsigner -verbose -keystore keyfile -signedjar signed.apkbase.apk yan
注:keyfile为生成key存放的文件,signed.apk为签名后的apk,base.apk
c)
$ jarsigner -verify my_application.apk
d)
$ zipalign -v 4 your_project_name-unaligned.apkyour_project_name.apk
3)
a)
在源码中编译一般都使用默认签名的,在某源码目录中用运行
$ mm showcommands能看到签名命令
Android提供了签名的程序signapk.jar,用法如下:
$ signapk publickey.x509[.pem] privatekey.pk8 input.jaroutput.jar
*.x509.pem为x509格式公钥,pk8为私钥
build/target /product/security目录中有四组默认签名可选:testkey, platform,shared,media(具体见README.txt),应用程序中Android.mk中有一个LOCAL_CERTIFICATE字段,由它指定用哪个key签名,未指定的默认用testkey.
b)
Android提供了一个脚本mkkey.sh(build/target/product/security/mkkey.sh),用于生成密钥,生成后在应用程序中通过Android.mk中的LOCAL_CERTIFICATE字段指名用哪个签名
c)
i.
1
openssl genrsa -3 -out testkey.pem 2048
其中-3是算法的参数,2048是密钥长度,testkey.pem 是输出的文件
ii. 转成x509格式(含作者有效期等)
1
openssl req -new -x509 -key testkey.pem -out testkey.x509.pem -days 10000 -subj ‘/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com’
iii. 生成私钥
1
openssl pkcs8 -in testkey.pem -topk8 -outform DER -out testkey.pk8 -nocrypt
4. 签名的相关文件
1)
CERT.SF:生成每个文件相对的密钥
MANIFEST.MF:数字签名信息
xxx.SF:这是 JAR 文件的签名文件,占位符 xxx标识了签名者
xxx.DSA:对输出文件的签名和公钥
2)
12345678910111213
development/tools/jarutils/src/com.anroid.jarutils/SignedJarBuilder.javaframeworks/base/services/java/com/android/server/PackageManagerService.java frameworks/base/core/java/android/content/pm/PackageManager.java frameworks/base/cmds/pm/src/com/android/commands/pm/Pm.java dalvik/libcore/security/src/main/java/java/security/Sign* build/target/product/security/platform.* build/tools/signapk/*
5.
一般在安装时提示出错:INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES
1)
2)
3)
4)
5)
6)
6.
1)
在SignApk.java中打印出publicKey.getNotAfter()即可
- AndroidAndroid-SignatureAndroid…
- AndroidAndroid-SignatureAndroid…
- Androidandroid内核编译方法
- 在eclipse查看androidandroid sdk源码
- Androidandroid之官方下拉刷新组件SwipeRefreshLayout
- …………
- …………
- …
- …………
- …………
- …^-^
- …………
- Delphi………………
- ………………
- ……
- ……
- ……
- ……
- [android常见ERROR] : This attrib…
- [android常见ERROR] : This attrib…
- eclipse源码编译的apk开发,使用系…
- eclipse源码编译的apk开发,使用系…
- AndroidAndroid-SignatureAndroid…
- AndroidAndroid-SignatureAndroid…
- UVa445 - Marvelous Mazes-字符串-难度1
- Android编译大全 (转载)
- Android编译大全 (转载)
- java -jar /home/newdisk/android-…
- java -jar /home/newdisk/android-…
- 使用android隐藏api实现亮度调节
- 使用android隐藏api实现亮度调节
- 2011年07月30日