怎么给Android应用程序签名

 我来答
千锋教育
2015-12-02 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
1、准备工作
apk的签名工作可以通过两种方式来完成:
1)通过ADT提供的图形化界面完成apk签名;
2)完全通过DOS命令来完成apk签名
我比较喜欢第2)种方式,所以下面将讲解如何通过命令的方式完成apk签名。
给apk签名一共要用到3个工具,或者说3个命令,分别是:keytool、jarsigner和zipalign,下面是对这3个工具的简单介绍:
1)keytool:生成数字证书,即密钥,也就是上面说到的扩展名为.keystore的那类文件;
2)jarsigner:使用数字证书给apk文件签名;
3)zipalign:对签名后的apk进行优化,提高与Android系统交互的效率(Android SDK1.6版本开始包含此工具)
从这3个工具的作用也可以看出,这3个工具的使用顺序。通常我们自己所开发的所有应用程序,都是使用同样的签名,即使用同一个数字证书,这就意味着:如果你是第一次做Android应用程序签名,上面的3个工具都将用到;但如果你已经有数字证书了,以后再给其它apk签名时,只需要用到jarsigner和zipalign就可以完成。
为了方便使用上面3个命令,首先需要将上面3个工具所在路径添加到环境变量path中(我说的是为了方便使用,没有说必须要这么做)。怎么配置环境变量就不在此讲解了,这里需要说一下这3个工具默认所在的路径:
1)keytool:该工具位于jdk安装路径的bin目录下;
2)jarsigner:该工具位于jdk安装路径的bin目录下;
3)zipalign:该工具位于android-sdk-windows/tools/目录下
不知道大家是否注意到keytool和jarsigner两个工具是jdk自带的,也就意味着生成数字证书和文件签名不是Android的专利;另外从字面上理解jarsigner也能猜得出该工具主要是用来给jar文件签名的。
2、生成未经签名的apk文件
既然我们要自己对apk进行签名,就不再需要ADT默认帮我们签名了。如何得到一个未经签名的apk文件呢?打开Eclipse,在Android工程名称上点击右键,依次选择“Android Tools” - “Export Unsigned Application Package ...”,然后选择一个存储位置保存即可。这样就得到了一个未经签名的apk文件。
3、使用keytool工具生成数字证书
keytool -genkey -v -keystore liufeng.keystore -alias liufeng.keystore -keyalg RSA -validity 20000
说明:
1)keytool是工具名称,-genkey意味着执行的是生成数字证书操作,-v表示将生成证书的详细信息打印出来,显示在dos窗口中;
2)-keystore liufeng.keystore 表示生成的数字证书的文件名为“liufeng.keystore”;
3)-alias liufeng.keystore 表示证书的别名为“liufeng.keystore”,当然可以不和上面的文件名一样;
4)-keyalg RSA 表示生成密钥文件所采用的算法为RSA;
5)-validity 20000 表示该数字证书的有效期为20000天,意味着20000天之后该证书将失效
穷比组丶瘲vp
2013-10-26 · 超过71用户采纳过TA的回答
知道答主
回答量:126
采纳率:100%
帮助的人:63.3万
展开全部
不管是模拟器还是真实手机。因此,在设备或者是模拟器上运行调试程序之前,必须为应用程序设置数字签名。 ·所有的程序都必须签名,没有被签名的程序,系统将不能安装。 ·可使用自签署证书签署应用程序,无须授权凭证。 ·系统仅仅会在安装的时候测试签名证书的有效期,如果应用程序的签名是在安装之后才到期,那么应用程序仍然可以正常启用。 ·可以使用标准工具-Keytool and Jarsigner-生成密钥,来签名应用程序的.apk文件。 Android SDK 工具可以在调试时给应用程序签名。ADT插件和Ant编译工具都提供了两种签名模式-debug模式和release模式 ·debug模式下,编译工具使用JDK中的通用程序Keytool通过已知方法和密码创建秘锁和密钥。每次编译的时候,工具使用debug密钥签名应用程序的.apk文件。因为密码是已知的,工具不需要在每次编译的时候提示输入密锁和密钥。 ·当应用程序调试完毕准备要发布release版本时,可以在release模式下编译。release模式下,编译工具不会将.apk文件签名。需要自己用Keytool生成密钥和密锁,再用JDK中的Jarsigner工具给.apk文件签名。 签名基本设置 首先设置JAVA_HOME环境变量,告诉SDK如何找到Keytool,或者可以在Windows 系统环境变量PATH变量中添加Keytool的JDK路径。 在发布release版本时,从Package面版上按选中你的project,按鼠标右键,依次选择Android Tools、Export Application Package。或者可以点击Manifest Editor,overview 页面上的“Exporting the unsigned .apk”连接 ,导出未签名apk文件。保存.apk文件后,用Jarsigner及自己的密钥给apk文件签名,如果没有密钥, 可以用Keystore创建密钥和密锁。如果已经有一个密钥了,如公共密钥,就可以给.apk文件签名了。 也可以把上面这个完整的步骤写成一个bat文件,这样需要签名的时候只要运行这个bat就可以了。下面给出一个完整的bat文件示例: @Rem android签名程序 //注释指令 @Rem echo是显示指令 格式:echo [{on|off}] [message] @echo ********************************************************** @Rem 文件是否存在命令格式:if exist 路径+文件名 命令 @if exist d:sign/MyFirstApp.keystore goto sign @echo 创建签名文件MyFirstApp.keystore @Rem keytool命令格式:-genkey产生签名 -alias别名 -keyalg加密算法 -validity有效天数 -keystore生产签名文件名称 keytool -genkey -alias MyFirstApp.keystore -keyalg RSA -validity 40000 -keystore MyFirstApp.keystore @echo 开始签名: @Rem jarsigner命令格式:-verbose输出详细信息 -keystore密钥库位置 -signedjar要生成的文件 要签名的文件 密钥库文件 jarsigner -verbose -keystore MyFirstApp.keystore -signedjar MyFirstApp_signed.apk MyFirstApp.apk MyFirstApp.keystore @goto over :sign @echo 开始签名: jarsigner -verbose -keystore MyFirstApp.keystore -signedjar MyFirstApp_signed.apk MyFirstApp.apk MyFirstApp.keystore :over @echo ********************MyFirstApp.apk 签名完成************************ pause ================ 以上是一个给应用签名的完整bat文件,在运行这个bat文件时,还需要按照屏幕提示的步骤输入一些必要信息,最后生成一个签名后的文件是:MyFirstApp_signed.apk。 签名完成以后最好再把这个文件压缩一下,使用Android SDK安装路径下tools文件夹里的zipalign进行压缩,以刚才这个文件为例,也可以写成一个bat文件,示例如下: D:\soft\android-sdk-windows\tools\zipalign -f -v 4 MyFirstApp_signed.apk MyFirstApp_zip.apk D:\soft\android-sdk-windows\tools\zipalign -c -v 4 MyFirstApp_zip.apk pause ================ 上面的D:\soft\android-sdk-windows用你的实际Android SDK安装路径代替。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式