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. jvm 语法糖

    jvm 语法糖主要包括:   1. 泛型 相同擦除类型参数,返回值不同也可以编译成功, 对比方法重载矛盾.     原因:class文件格式中,只要描述符不是完全一致的两个方法就可以共存.     擦 ...

  2. 搭建hexo博客并部署到github上

    hexo是由Node.js驱动的一款快速.简单且功能强大的博客框架,支持多线程,数百篇文章只需几秒即可生成.支持markdown编写文章,可以方便的生成静态网页托管在github上. 感觉不错. 前端 ...

  3. JavaScript 的一些基础知识

    JavaScript基本语法 调试 打开 Chrome 开发工具 Win F12 Mac Command + Option + I 输入代码.测试执行 var str = 'evenyao' cons ...

  4. solidity 智能合约操作

    合约编译 #!/usr/bin/env python # coding: utf8 import json import os # Solc Compiler from functools impor ...

  5. Python3 小工具-UDP扫描

    from scapy.all import * import optparse import threading def scan(target,port): pkt=IP(dst=target)/U ...

  6. 冥冥中转到了mac 上进行开发

    2013年愚人节前我的开发环境情况 我是一个有着15年windows使用经历的老programer,如果算上dos那还可以加两年.当过小企业网管,做过十二年的开发工作(直到老死,~_~).这期间当然也 ...

  7. JavaScript筑基篇(一)->变量、值与对象

    说明 JavaScript中变量.值.对象的理解.本文为了简化理解,前半部分暂时刨除与执行上下文的相关概念.另外本文是个人的见解,如有疑问或不正支持,欢迎提出指正和讨论! 目录 前言 参考来源 变量与 ...

  8. Thunder团队贡献分分配规则

    规则1:基础分,拿出总分的40%进行均分. 规则2:参与会议者,每人次加0.5分. 规则3:积极贡献者,通过团队投票,半数及以上同意,每次加0.5分. 规则4:根据项目完成情况,核实每个人的工作量,投 ...

  9. k邻近算法理解及代码实现

    github:代码实现 本文算法均使用python3实现 1 KNN   KNN(k-nearest neighbor, k近邻法),故名思议,是根据最近的 $ k $ 个邻居来判断未知点属于哪个类别 ...

  10. LintCode-366.斐波纳契数

    斐波纳契数列 查找斐波纳契数列中第 N 个数. 所谓的斐波纳契数列是指: 前2个数是 0 和 1 . 第 i 个数是第 i-1 个数和第i-2 个数的和. 斐波纳契数列的前10个数字是:0, 1, 1 ...