- 浏览: 415594 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
Glogo:
楼主您好,我在试验您的代码的时候发现新开的三个子线程并没有一直 ...
java 高并发 ReentrantLock -- 可重入的锁 -
univasity:
最近发觉也被限速了,投诉一下就好一会~~ 看来明天又要和电信M ...
ADSL上网速度慢 都是帐号限速惹的祸 -
liuyuanhui0301:
java 高并发 ReentrantLock -- 可重入的锁 -
dang_java:
呵.很好的说明文档.
JXTA技术与应用发展 -
helloqidi:
谢谢,学习了
SQL中exists和in的区别
在
Android系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个
permission的protectionLevel为signature,那么就只有那些跟该permission所在的程序拥有同一个数字证书的应
用程序才能取得该权限。Android使用Java的数字证书相关的机制来给apk加盖数字证书,要理解android的数字证书,需要先了解以下数字证
书的概念和java的数字证书机制。Android系统要求每一个安装进系统的应用程序都是经过数字证书签名的,数字证书的私钥则保存在程序开发者的手
中。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 android.keystore -alias android -keyalg RSA -validity 20000
该
命令中,-keystore ophone.keystore 表示生成的证书,可以加上路径(默认在用户主目录下);-alias ophone
表示证书的别名是ophone;-keyalg RSA 表示采用的RSA算法;-validity 20000表示证书的有效期是20000天。 此时,我们会在互用主目录下看到ophone.keystore,即我们刚刚创建的证书。 接着对程序进行签名: jarsigner用法
: [选项] jar 文件别名 执行:jarsigner -verbose -keystore android.keystore -signedjar android123_signed.apk android123.apk
android
就
可以生成签名的apk文件,这里输入文件android123.apk,最终生成android123_signed.apk为Android签名后的
APK执行文件。下面提示输入的密码和keytool输入的一样就行了。(不过在我的JDK目录下没有找到jarsigner这个程序,不知道是怎么回
事) 使用ADT Export Wizard进行签名
应用程序(apk)签名,在EC中,右键单击应用程序工程,如图选择 选择证书的存放路径,填写相关资料,完成,即可生成被签名的apk文件。如下图所示: 如上图所示,我们可以看到也可以在这里选择”Create new keystore“来创建一个证书。输入密码,点击下一步,填写相关信息,如下图所示。 使用zipalign优化APK
根据官方文档的描述,Android系统中Application的数据都保存在它的APK文件中,同时可以被多个进程访问,安装的过程包括如下几个步骤: zipalign
优化的最根本目的是帮助操作系统更高效率的根据请求索引资源,将resource-handling code统一将Data structure
alignment(数 据结构对齐标准:DSA)限定为4-byte boundaries。如果不采取对齐的标
准,处理器无法准确和快速的在内存地址中定位相关资源。目前的系统中使用fallback
mechanism机制处理那些没有应用DSA标准的应用程序,这的确大大的方便了普通开发者无需关注繁琐的内存操作问题。但是相反,对于这样的应用程序
将给普通用户带来一定的麻烦,不但影响程序的运行的效率,而且使系统的整体执行效率下降和占用大量不必要的内存资源,甚至消耗一定的电池资源
(battery life)。 命令行方式手动优化
: 使用ADT自动优化:
综上所述,可以使用Keytool、Jarsigner、zipalign 给程序签名并优化程序,这样就需要三个不同的工具:
keytool -genkey -v -keystore android.keystore -alias android -keyalg RSA -validity 20000
jarsigner -verbose -keystore android.keystore -signedjar android123_signed.apk android123.apk android
zipalign -v 4 android123_signed.apk android123_signed_aligned.apk
当然,也可以通过ADT插件中Export Signed Application Package…来执行,图形界面更为简单、形象、直观。
参考:blog.csdn.net/zgfee/archive/2009/11/11/4796831.aspx Android SDK:androidappdocs.appspot.com/guide/publishing/app-signing.html android123.com.cn/androidkaifa/173.html yarin.javaeye.com/blog/549280 androidres.com/index.php/2009/10/18/use-zipalign-to-optimize-your-application-packages/
jarsigner -verify [选项] jar 文件
发表评论
-
序列化:serializable,hessian,protobuf性能对比
2011-10-31 17:08 1187分布式应用系统中,系统之间的通讯的质量决定了系统的可用性 ... -
JAR 文件揭密
2011-10-18 01:28 858JAR 文件是什么? ... -
SSL双向认证java实现
2011-10-17 23:49 984本文通过模拟场景,介绍SSL双向认证的java实现默认的情况下 ... -
Benchmark Analysis: Guice vs Spring
2011-04-19 14:35 1011The original link can be found ... -
Java Network Launching Protocol
2011-04-18 17:43 837在java开发的早期,重点被放在了客户端开发。语言中对于app ... -
NIO 包及工作原理
2011-03-11 11:14 1703NIO 包及工作原理 针对 ... -
使用Java NIO编写高性能的服务器
2011-03-11 01:19 735从JDK 1.4开始,Java的标 ... -
RMI, RMI-IIOP,JNDI
2009-05-21 17:31 14341. RMI-IIOP(Java Remote ... -
企业中的 RMI-IIOP
2009-05-21 17:13 980RMI 和 CORBA 常被视 ... -
JMX
2009-05-21 15:44 933JMX规范 1.1 J ... -
使用Eclipse IDE的技巧
2009-02-24 11:00 1751使用Eclipse IDE的技巧 作 ... -
spring quartz 动态定时任务
2009-01-22 13:31 4417什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什 ... -
基于struts+spring+ibatis的轻量级
2009-01-12 16:21 1009基于struts+spring+ibatis的轻量级J2 ... -
Log4j配置实例[经典]
2009-01-12 14:53 1253Log4j配置实例[经典] 0 推荐 ... -
jbpm工作流学习心得
2008-09-19 13:59 1272一,装载流程: 第一种: java 代码 JbpmCo ... -
jbpm请假工作流
2008-09-19 13:56 1822请假流程(备用) 工作中要用到JBPM写工作流,自习的时 ... -
利用JExcel API操作EXCEL文件
2008-09-08 10:52 1441使用Windows操作系统的朋 ... -
jExcel API讲解
2008-09-08 10:51 1453转自:http://jhobby.iteye.com/blog ... -
Tomcat5.0乱码全解决方案
2008-09-02 11:56 1054http://hi.baidu.com/liet2008/bl ... -
Linux_Macintosh 平台下 Eclipse 环境中的 JNI 混合语言调试
2008-08-28 18:27 1459Linux_Macintosh 平台下 Eclipse ...
相关推荐
Android数字签名学习笔记.pdf
Android 开发学习笔记,学习android的好资料
Android学习笔记 Android学习笔记 Android学习笔记
Android学习笔记
Android学习笔记(一)——创建第一个Android项目 Android学习笔记(二)android studio基本控件及布局(实现图片查看器) Android学习笔记(三)android studio中CheckBox自定义样式(更换复选框左侧的勾选图像) ...
Android开发学习笔记(整理),整理论坛android学习笔记,较完整的讲解了android的内容。包括:view、activity、service、intent、广播机制、http连接、数据sqllite存储、后台线程、各种layout、偏好、本地文件操作、...
Android基础学习笔记,自己总结,适合初学者。
android 学习笔记(全全整理),吧android学习笔记全部整理下来了,可以去好好学习学习
第一行代码 android学习笔记 修改完整版
Android学习笔记,介绍怎么学习android。
android入门学习笔记
在学习Android O的HIDL内容时,使用Xmind将内容梳理了一下,给大家分享一下
Android_学习笔记 Android_学习笔记 Android_学习笔记
记录了作者学习安卓开发过程中见到的各种各样的问题 ,主要是用ANDROID STUDIO 3.2 开发,是学习ANDROID 开发不可多得的学习笔记,作者三个多月的心血,
Android ROM定制学习笔记
android 学习笔记 android 学习笔记 android 学习笔记
学习java和android的笔记 更容易学习android 资深学习android 具有大量学习的笔记 很多的错误 都是从细节开始学习的
这是一个用android studio开发的小demo,只有一个TextView和一个Button,button实现了点击事件