1.签名的意义
  为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装)。

2.签名的步骤
  a.创建key
  b.使用步骤a中产生的key对apk签名

3.具体操作

      方法一: 命令行下对apk签名(原理)


 
 1)创建key,需要用到keytool.exe (位于jdk1.6.0_24\jre\bin目录下),使用产生的key对apk签名用到的是jarsigner.exe (位于      jdk1.6.0_24\bin目录下),把上两个软件所在的目录添加到环境变量path后,打开cmd输入

> keytool -genkey -v -alias CERT -keyalg RSA -keysize 2048 -validity 10000 -keystore CERT.keystore 
创建过程需要输入一些标识信息和密码,一些重要的参数值说明如下(根据自己的需要要进行相应的修改): 
    CERT.keystore ---- 证书保存的文件名 
    CERT ---- 证书的别名 
    10000 ---- 10000天的有效期 
    2048 ---- 默认为1024 bits,Android 建议使用2048 bits或更高
其他的详细信息可以使用keytool -help查看帮助 
证书生成后使用如下命令可以查看证书的信息:

> keytool -list -alias CERT -keystore CERT.keystore

2)使用jdk的jarsigner工具对apk文件签名

> jarsigner -verbose -keystore CERT.keystore to_sign.apk CERT 
(jarsigner -verbose -keystore d:\project\360Wallpaper.keystore -signedjar d:\qihusign.apk d:\Qihuunsign.apk cret)
签名过程需要输入证书的密码,一些重要的参数值说明如下(根据自己的需要要进行相应的修改): 
    CERT.keystore ---- 证书保存的文件名 
    CERT ---- 证书的别名 
待签名的apk文件根根目录下如果有文件夹“META-INFO”,请先删除(重新签名就需要这样做)。
如果不想创建过程输出太多信息,可以删除“-verbose” 。
上述签名会直接覆盖原来的文件,如果不想被覆盖而签名为另外的新文件 signed.akp,
只需将 to_sign.apk 改为 -signedjar to_sign.apk signed.akp 即可。
签名后可以使用如下命令验证是否签名成功: 
> jarsigner -verify to_sign.apk 
如果需要查看更详细的验证信息,可修改为:
> jarsigner -certs -verbose -verify to_sign.apk 
     注意事项:android工程的bin目录下的demo.apk默认是已经使用debug用户签名的,所以不能使用上述步骤对此文件再次签名。正确步骤应该是:在工程点击右键->Anroid Tools-Export Unsigned Application Package导出的apk采用上述步骤签名。
     3)使用android sdk的zipalign工具优化已签名的apk文件
> zipalign -v 4 unaligned.apk aligned.apk 
注意要在签名后再zipalign。这个工具不是jdk自带的,而是在%ANDROID_HOME%\tools\zipalign.exe。

例子:

为APK重新生成签名

1)、将证书复制到与需要重新签名的apk文件相同的目录下
2)、进入该目录下执行以下语句

 
jarsigner -verbose -keystore CERT.keystore -signedjar weibo_signed.apk
netease_microblog_android_unsigned.apk CERT

命令解释:
jarsigner是Java的签名工具,JDK自带
-verbose参数表示:显示出签名详细信息
-keystore表示使用当前目录中的android.keystore签名证书文件。
--signedjar weibo_signed.apk netease_microblog_android_unsigned.apk表示签名后生成的APK名称为 weibo_signed.apk,未签名的APK Android软件名称为netease_microblog_android_unsigned.apk
CERT: 表示签名文件的别名,生成证书的时候有书写

执行以上操作之后在目录下生成了weibo_signed.apk ,经过自己签名的APK文件

方法二:使用Eclipse导出带签名的apk
  Eclipse直接能导出带签名的最终apk,非常方便,推荐使用,步骤如下:
  第一步:导出。
 
  第二步:创建密钥库keystore,输入密钥库导出位置和密码,记住密码,下次Use existing keystore会用到。
 
  第三步:填写密钥库信息,填写一些apk文件的密码,使用期限和组织单位的信息。

  第四步:生成带签名的apk文件,到此就结束了。

  第五步:如果下次发布版本的时候,使用前面生成的keystore再签名。


  第六步:Next,Next,结束!

本文参考:http://www.cnblogs.com/qianxudetianxia/archive/2011/04/09/2010468.html

http://blog.csdn.net/shandong_chu/article/details/7672474

如何给apk文件签名的更多相关文章

  1. 读取Android APK文件签名的方法

    在微信开放平台等申请API key 和secret时经常要用到apk文件签名,那么如何读取呢? 下面贴一下相关读取源码: 一共两个文件MainActivity和MD5, package com.lcg ...

  2. apk文件签名绕过

    声明: 1.本文转载自:http://www.2cto.com/Article/201311/256406.html,为了留作日后参考上传博客 2.如有转载请复试上面连接,尊重原创 apk文件签名绕过 ...

  3. (转载)重新对APK文件签名

    1.将证书(debug.keystore)复制到与需要重新签名的apk文件相同的目录下(如:复制到D:\Sign) 2.在cmd中切换到需要重新签名的apk文件的目录下 3.使用WinRAR打开要重新 ...

  4. Android之APK文件签名——keytool和jarsigner

    一.生成密钥库将位置定位在jdk的bin文件中,输入以下命名行:keytool -genkey -alias ChangeBackgroundWidget.keystore -keyalg RSA - ...

  5. [Android]使用platform密钥来给apk文件签名的命令

    1.使用platform密钥对apk进行签名 1.1.进入<Android_Source_Path>/build/target/product/security,找到[platform.p ...

  6. React Native之APK文件签名及打包

    生成apk签名文件 我们使用android studio的方式进行签名 AS工具栏找到并点击 build->gennrate signed apk 两种情况: 1.这里如果已经有签名文件了则直接 ...

  7. 【keytool jarsigner工具的使用】Android 使用JDK1.7的工具 进行APK文件的签名,以及keystore文件的使用

    一个android apk的编译过程 请参考: http://www.2cto.com/kf/201312/261475.html 典型的编译过程: aapt( Android Asset Packa ...

  8. Apk去掉签名以及重新签名的方法

    Android开发中很重要的一部就是用自己的密钥给Apk文件签名,不经过签名的Apk文件一般是无法安装的,就算装了最后也是失败. 网上流传的"勾选允许安装未知来源的应用"其实跟签不 ...

  9. 【转】adb uninstall卸载apk文件说明

    昨天在使用adb卸载程序,结果死活卸载不了.我输入的命令和系统提示如下: [plain] view plaincopy   arthur@arthur-laptop:~$ adb uninstall  ...

随机推荐

  1. nginx 应用篇

    nginx 信号控制(commanLine) kill singel  pid ps aux|grep nginx nginx 有两个进程,一个 master 一个worker 一个master管理一 ...

  2. 一道java笔试题

    输入一串用空格隔开的数字串,对于数字串的奇数位按升序排序,偶数位按降序排序. 示例输入: 4 6 2 3 6 7 8 1 处理过程: 奇数位:4 2 6 8 升序排序结果: 2 4 6 8 偶数位:6 ...

  3. c# CLR无法从 COM 上下文 0x51cd20 转换为 COM 上下文 0x51ce90

    调试菜单--->异常---->managed debugging assistants栏下ContextSwitchDeadlock 前面的√去掉

  4. 代替iframe的方法

    $('#framecont').html('').load("pageURL"); 使用jQuery.

  5. MVC中验证码的实现(经常用,记录备用)

    一.目录 1.多层架构+MVC+EF+AUTOFAC+AUTOMAPPER: 2.MVC中验证码的实现(经常用,记录备用) 3.Ligerui首页的快速搭建 二 正文 Ok,我们的验证码开始,这篇文章 ...

  6. 通过access_token openid获取微信用户昵称等信息

    <?php header('Access-Control-Allow-Origin:*'); $access_token = !empty($_GET['access_token'])?$_GE ...

  7. 《Effective C#》快速笔记(四)- 使用框架

    .NET 是一个类库,你了解的越多,自己需要编写的代码就越少. 目录 三十.使用重写而不是事件处理函数 三十一.使用 IComparable<T> 和 IComparer<T> ...

  8. COM 自动化控制Excel应用程序

    class Program { static void Main(string[] args) { var dt = new System.Data.DataTable(); dt.Columns.A ...

  9. Axure RP 的安装与卸载

    官网:http://www.axure.com/download 支持Windows和Mac

  10. bzoj3168-钙铁锌硒维生素

    题目 这道题的题意理解很重要,直接写原题了. 小林把人体需要的营养分成了\(n\)种,他准备了2套厨师机器人,一套厨师机器人有\(n\)个,每个厨师机器人只会做一道菜,这道菜一斤能提供第\(i\)种营 ...