android应用之——为自己的apk签名
2015-06-23 11:16
337 查看
1.为何需要签名
每个发布的应用都有自己的一个唯一合法的ID,这个就是应用自身的签名,签名可以保证你软件升级的一致性,使用相同签名的应用可以实现覆盖安装,而不一致的签名将无法共享使用数据,也即是无法覆盖安装,这样可以防止别人篡改,盗用开发者的应用,造成对开发者利益的损害。那么如何为自己的应用进行签名呢?
2.APK签名之两步走
a.创建一个key
b.使用步骤a中产生的key对apk签名
3.具体操作
方法一:命令行下对apk签名
(笔者之前使用1.7版本的sdk用该方法签名发现签名后的文件无法正常安装,1.6版本是没有任何问题的,所以1.7的朋友建议使用方法二)
创建key,需要用到java的keytool.exe工具(该工具位于java环境的安装目录下jdk1.6.0_24\jre\bin,不同jdk版本可能略有差异),使用产生的key对apk签名用到的是jarsigner.exe
(位于安装目录下的jdk1.6.0_24\bin),如果你正确安装了java环境,并配置了正解的环境变量,那么你可以直接打开运行命令窗口输入
注意事项:android工程的bin目录下的demo.apk默认是已经使用debug用户签名的,所以不能使用上述步骤对此文件再次签名。正确步骤应该是:在工程点击右键->AnroidTools-ExportUnsignedApplicationPackage导出的apk采用上述步骤签名。
方法二:使用Eclipse导出带签名的apk
Ps:这个是使用adt插件导出已经签名的apk文件,简单快捷,强烈推荐该方法!!
1、右键工程,选择Export,出现如下窗口,选择ExportAndroidApplication==》next!
2、选择需要签名的工程(AndroidApplication)
3、创建一个新的key文件(如果已经有key文件可以选择第一个)
4、输入新的key的信息,alias(别名)、password(key密码,请牢记)、Confirm(确认key密码)、validity(证书有效期,单位为年)、First
andLastName(姓名)、OrgnizationalUnit(公司单位)、Organization(组织)、CityorLocality(县、市区)、StateorProvince(省份)、CountryCode(国家的两位英文缩写)
5、生成的签名apk文件的存放路径
6、生成的key文件和已经签名好的apk文件
7、如果是已经存在的key文件签名,第三步改成如下就行了:
至此apk文件的签名介绍完毕,你的签名文件也可以拿出去工用户使用了,但是谷歌还提供一个优化工具对你的apk文件进行优化,用法介绍如下:
4.签名之后,用zipalign(压缩对齐)优化你的APK文件。
未签名的apk不能使用,也不能优化。签名之后的apk谷歌推荐使用zipalign.exe(位于android-sdk-windows\tools目录下)工具对其优化:
这样,zipalign能够使apk文件中未压缩的数据在4个字节边界上对齐(一般4个字节是一个性能很好的值),这样android系统就可以使用mmap()(请自行查阅这个函数的用途)函数读取文件,可以在读取资源上获得较高的性能,
PS:
1.在4个字节边界上对齐的意思就是指编译器把4个字节作为一个单位来进行读取的数据资源,因此,CPU能够对变量进行较之前不对齐更高效、快速的访问。
2.对齐的根源:android系统中的Davlik虚拟机使用自己专有的格式DEX,DEX的结构是紧凑的,为了让运行时的性能更好,可以进一步用"对齐"进一步优化,但是大小一般会有所增加。
原创博文,欢迎转载!
转载请注明出处:http://blog.sina.com.cn/s/blog_6dee445401011gk6.html
每个发布的应用都有自己的一个唯一合法的ID,这个就是应用自身的签名,签名可以保证你软件升级的一致性,使用相同签名的应用可以实现覆盖安装,而不一致的签名将无法共享使用数据,也即是无法覆盖安装,这样可以防止别人篡改,盗用开发者的应用,造成对开发者利益的损害。那么如何为自己的应用进行签名呢?
2.APK签名之两步走
a.创建一个key
b.使用步骤a中产生的key对apk签名
3.具体操作
方法一:命令行下对apk签名
(笔者之前使用1.7版本的sdk用该方法签名发现签名后的文件无法正常安装,1.6版本是没有任何问题的,所以1.7的朋友建议使用方法二)
创建key,需要用到java的keytool.exe工具(该工具位于java环境的安装目录下jdk1.6.0_24\jre\bin,不同jdk版本可能略有差异),使用产生的key对apk签名用到的是jarsigner.exe
(位于安装目录下的jdk1.6.0_24\bin),如果你正确安装了java环境,并配置了正解的环境变量,那么你可以直接打开运行命令窗口输入
C:\Users\CodeApe>keytool-genkey-aliasdemo.keystore-keyalgRSA-validity40000-keystoredemo.keystore
说明:-genkey产生密钥
-aliasdemo.keystorekey的别名demo.keystore
-keyalgRSA使用RSA算法对签名加密
-validity40000证书有效期限4000天
-keystoredemo.keystore生成key的存放路径,你可以生成到指定路径(例如:D:\demo.keystore在D盘根目录生成key文件,文件名为demo.keystor,如果不指定绝对路径将在当前cmd所在目录生成key文件)
输入以上命令之后,需要输入一些信息,ps:提示输入口令的时候是不会有任何显示的,只管输入就是了,请牢记自己输入的两个口令!!!如下图:
C:\Users\CodeApe>jarsigner-verbose-keystoredemo.keystore-signedjardemo_signed.apkdemo.apkdemo.keystore
说明:-verbose输出签名的详细信息
-keystoredemo.keystore使用key的绝对路径,就是在第一步中生成的key
-signedjardemor_signed.apkdemo.apkdemo.keystore正式签名,三个参数中依次为签名后产生的文件demo_signed,要签名的文件demo.apk和密钥库demo.keystore
注意事项:android工程的bin目录下的demo.apk默认是已经使用debug用户签名的,所以不能使用上述步骤对此文件再次签名。正确步骤应该是:在工程点击右键->AnroidTools-ExportUnsignedApplicationPackage导出的apk采用上述步骤签名。
方法二:使用Eclipse导出带签名的apk
Ps:这个是使用adt插件导出已经签名的apk文件,简单快捷,强烈推荐该方法!!
1、右键工程,选择Export,出现如下窗口,选择ExportAndroidApplication==》next!
2、选择需要签名的工程(AndroidApplication)
3、创建一个新的key文件(如果已经有key文件可以选择第一个)
4、输入新的key的信息,alias(别名)、password(key密码,请牢记)、Confirm(确认key密码)、validity(证书有效期,单位为年)、First
andLastName(姓名)、OrgnizationalUnit(公司单位)、Organization(组织)、CityorLocality(县、市区)、StateorProvince(省份)、CountryCode(国家的两位英文缩写)
5、生成的签名apk文件的存放路径
6、生成的key文件和已经签名好的apk文件
7、如果是已经存在的key文件签名,第三步改成如下就行了:
至此apk文件的签名介绍完毕,你的签名文件也可以拿出去工用户使用了,但是谷歌还提供一个优化工具对你的apk文件进行优化,用法介绍如下:
4.签名之后,用zipalign(压缩对齐)优化你的APK文件。
未签名的apk不能使用,也不能优化。签名之后的apk谷歌推荐使用zipalign.exe(位于android-sdk-windows\tools目录下)工具对其优化:
C:\Users\CodeApe>zipalign-v4demo_signed.apkfinal.apk
这样,zipalign能够使apk文件中未压缩的数据在4个字节边界上对齐(一般4个字节是一个性能很好的值),这样android系统就可以使用mmap()(请自行查阅这个函数的用途)函数读取文件,可以在读取资源上获得较高的性能,
PS:
1.在4个字节边界上对齐的意思就是指编译器把4个字节作为一个单位来进行读取的数据资源,因此,CPU能够对变量进行较之前不对齐更高效、快速的访问。
2.对齐的根源:android系统中的Davlik虚拟机使用自己专有的格式DEX,DEX的结构是紧凑的,为了让运行时的性能更好,可以进一步用"对齐"进一步优化,但是大小一般会有所增加。
原创博文,欢迎转载!
转载请注明出处:
相关文章推荐
- Android xml资源文件中@、@android:type、@*、?、@+含义和区别
- Android 开启或关闭WIFI实现
- Android Media Playback 中的MediaPlayer的用法及注意事项(二)
- android学习之路(三)----RxJava/RxAndroid
- Android Studio 添加.SO文件
- Android Matrix
- Android之QQ授权登录获取用户信息
- android学习之路(二)----java8
- android应用中去掉标题栏的方法
- android-Service和Thread的区别
- android的一些常用手机信息获取
- android.content.res.Resources$NotFoundException
- Android学习_17_SQLite数据库存储方式
- 如何正确的使用 Android 中的 themes 和 styles
- Android Studio SHA1证书指纹数据
- 安卓-----文件目录
- Android内存优化之磁盘缓存
- Android 应用中十大导航设计错误
- Android横屏竖屏切换的问题
- logcat/Toast.makeText中文显示乱码的解决方法