Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 547|回复: 0

开发交流:Android 数字签名

[复制链接]

该用户从未签到

发表于 2011-10-24 10:06:39 | 显示全部楼层 |阅读模式
Android 数字签名
同一个开发者的多个程序尽可能使用同一个数字证书,这可以带来以下好处。
(1)有利于程序升级,当新版程序和旧版程序的数字证书相同时,Android系统才会认为这两个程序是同一个程序的不同版本。如果新版程序和旧版程序的数字证书不相同,则Android系统认为他们是不同的程序,并产生冲突,会要求新程序更改包名。


(2)有利于程序的模块化设计和开发。Android系统允许拥有同一个数字签名的程序运行在一个进程中,Android程序会将他们视为同一个程序。所以开发者可以将自己的程序分模块开发,而用户只需要在需要的时候下载适当的模块。


(3)可以通过权限(permission)的方式在多个程序间共享数据和代码。Android提供了基于数字证书的权限赋予机制,应用程序可以和其他的程序共享概功能或者数据给那那些与自己拥有相同数字证书的程序。如果某个权限(permission)的protectionLevel是signature,则这个权限就只能授予那些跟该权限所在的包拥有同一个数字证书的程序。



在签名时,需要考虑数字证书的有效期:
(1)数字证书的有效期要包含程序的预计生命周期,一旦数字证书失效,持有改数字证书的程序将不能正常升级。
(2)如果多个程序使用同一个数字证书,则该数字证书的有效期要包含所有程序的预计生命周期。
(3)Android Market强制要求所有应用程序数字证书的有效期要持续到2033年10月22日以后。


Android数字证书包含以下几个要点:
(1)所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序
(2)Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证
(3)如果要正式发布一个Android ,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布。
(4)数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。
(5)Android使用标准的java工具 Keytool and Jarsigner 来生成数字证书,并给应用程序包签名。
(6)使用zipalign优化程序。



Android系统不会安装运行任何一款未经数字签名的apk程序,无论是在模拟器上还是在实际的物理设备上。Android的开发工具(ADT插件和Ant)都可以协助开发者给apk程序签名,它们都有两种模式:调试模式(debug mode)和发布模式(release mode)。


在调试模式下,android的开发工具会在每次编译时使用调试用的数字证书给程序签名,开发者无须关心。
当要发布程序时,开发者就需要使用自己的数字证书给apk包签名,可以有两种方法。
(1)在命令行下使用JDK中的和Keytool(用于生成数字证书)和Jarsigner(用于使用数字证书签名)来给apk包签名。
(2)使用ADT Export Wizard进行签名(如果没有数字证书可能需要生成数字证书)。


使用Keytool和Jarsigner给程序签名
命令:keytool -genkey -v -keystore XSM_Mobile_Client.keystore -alias XSM_Mobile_Client -keyalg RSA -validity 20000

此时,我们会在互用主目录下看到ophone.keystore,即我们刚刚创建的证书。
接着对程序进行签名:
jarsigner用法: [选项] jar 文件别名
       jarsigner -verify [选项] jar 文件
执行:jarsigner -verbose -keystore XSM_Mobile_Client.keystore -signedjar XSM_Mobile_Client.apk XSM_Moblie.apk XSM_Mobile_Client  android 就可以生成签名的apk文件,XSM_Mobile_Client 为key文件的别名 ,这里输入文件XSM_Moblie.apk,最终生成XSM_Mobile_Client.apk为Android签名后的APK执行文件。下面提示输入的密码和keytool输入的一样就行了。(不过在我用命令行没有生成.apk文件,一直报错误)
使用ADT Export Wizard进行签名
应用程序(apk)签名,在EC中,右键单击应用程序工程,如图选择
     
选择证书的存放路径,填写相关资料,完成,即可生成被签名的apk文件。如下图所示:
     
如上图所示,我们可以看到也可以在这里选择”Create new keystore“来创建一个证书。输入密码,点击下一步,填写相关信息,如下图所示。


  
选择生成添加签名后的.dpk文件,然后测试运行下
命令行打开虚拟器
输入emulator -avd avd2.2 , Avd2.2是模拟器的名字
   


命令行安装启动签名后的APK程序
将你要运行的xxx.apk文件复制到android SDK安装目录之下的tools文件夹中。
新开一个cmd命令窗口,并进入android SDK安装目录之下的tools文件夹中输入命令“adb install xxx.apk”,这个apk将会部署到你当前的模拟器中去,这样你刷新Android手机的模拟界面就可以看到你安装的程序了。
adb install XSM_Moblie.apk
   
这就添加数字签名成功了。
回复

使用道具 举报

该用户从未签到

发表于 2011-10-24 10:06:42 | 显示全部楼层

Re:开发交

沙发~~
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-24 10:06:44 | 显示全部楼层

Re:开发交

学习学习。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2011-10-24 10:06:47 | 显示全部楼层

Re:开发交

学习了,谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 01:32 , Processed in 0.370411 second(s), 45 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表