Android项目以它的包名作为唯一标识,如果在同一设备上安装两个相同的应用,后面安装的应用就会覆盖前面安装的应用。为了避免这种情况的发生,我们需要对作为产品发布的应用进行签名。

签名其实有两个作用:

(1) 确定发布者的身份。防止别人用相同包名来替换你已安装的程序。

(2) 确保应用的完整性。签名会对应用包中的每个文件进行处理,以确保程序包中的文件不会被替换。

在应用的开发和调试阶段,Eclipse的ADT插件或ANT工具会自动生成调试证书,对Android应用签名。但是,如果要正式发布一个Android应用的话,就必须使用合适的数字证书来给应用程序签名,不能使用ADT插件或ANT工具生成的调试证书来发布。

这有又两种方式对Android应用签名:

1.在Eclipse中对Android应用签名

(1) 右击Android项目,Android Tools-->Export Signed Application Package...

(2) 如果系统还没有数字证书,可以选择"Create new keystore",按如图格式填写数字证书的存储路径和密码。

(3) 填写数字证书的详细信息。

(4)指定生成签名后的APK安装包的存储路径。

签名证书制作完后,以后就可以直接使用该数字证书签名了。

(1)选择前面创建的keystore,输入创建keystore时的指定密码。

(2)选择前面创建时的别名yq的key,并输入创建该key时指定的密码,生成签名后的apk包。

 2.使用命令对APK包签名

在某些场合下, 我们可能需要对一个“未签名”的APK包进行签名,则可通过“命令”来对Android应用进行手动签名。

(1) 创建keystore库。JDK的安装目录下的bin子目录下提供了keytool.exe来生成数字证书。

在命令窗口输入:

keytool -genkeypair -alias yqkey.keystore -keyalg RSA -validity 100 -keystore yqkey.keystore

说明:

-genkeypair:指定生成数字证书。

-alias:指定生成数字证书的别名。

-keyalg:指定生成数字证书的算法。使用RSA算法。

-validity:指定生成的数字证书的有效期。

-keystore:指定所生成的数字证书的存储路径。

回车后,接下来将会以交互的方式让我们输入数字证书keystore的密码、作者、公司等详细信息。

该步骤只要做一次即可,一旦数字证书创建成功后,只要在该证书的有效期内,可以移植重复使用该证书。

(2) 生成未签名的APK安装包。在Eclipse中右击Android项目,Android Tools-->Export Unsigned Application Package...

(3) 使用jarsigner命令对未签名的APK安装包进行签名。JDK的安装目录下的bin子目录下提供了jarsigner.exe工具进行签名。在命令窗口输入:

jarsigner -verbose -keystore crazyit.keystore -signedjar Demo_yqkey.apk Demo.apk yqkey.keystore

说明:

-verbose:指定生成详细输出。

-keystore:指定数字证书的存储路径。

-signedjar:该选项的三个参数分别分签名的APK包、未签名的APK包、数字证书别名。

回车后,接下来将会以交互的方式让我们输入数字证书keystore的密码。

(4) 使用zipalign.exe工具优化APK安装包。zipalign.exe是Android自带的一个档案整理工具,它可用于优化APK安装包,从而提升Android应用与系统之间的交互效率,提升应用程序的运行速度。在命令行窗口输入:

zipalign -f -v 4 Demo_yqkey.apk

Demo_yqkey_zip.apk

说明:

-f:指定强制覆盖已有文件。

-v:指定生成详细输出。

4:指定档案整理所基于的字节数,通常指定为4,也就是基于32位进行整理。

Demo_yqkey.apk和Demo_yqkey_zip.apk,分别制定整理前的APK和整理后生成的APK。

生成的Demo_yqkey_zip.apk文件,就是签名完成且经过优化的APK安装包,该安装包可以对外发布了。

Android APK如何签名的更多相关文章

  1. Visual Studio 2017为Android APK包签名

    Visual Studio 2017为Android APK包签名   为Android APK包签名,可以保证后期的App顺利升级.在Visual Studio 2015中,IDE会自动生成两个AP ...

  2. android apk的签名和权限问题

    一. android apk的签名问题(http://blog.csdn.net/lyq8479/article/details/6401093) 1.为什么要给Android应用程序签名?      ...

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

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

  4. Android APK 重签名

    对APK 进行在线 加固后,Apk体积一般会变大,而且Apk会无法直接安装,因为缺少了你的签名.是的,你需要对这个Apk进行重签名. 如何重签名 重签名的方法,一般来说,有两种,第一种是用JDK自带的 ...

  5. Android APK 手动签名

    首先,如果没有签名密钥,先生成密钥: keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore and ...

  6. android apk jarsigner 签名打包

    cmd 命令符打包: 规则:  jarsigner -verbose -keystore 签名路径 -signedjar 签名后的apk存放路径  未签名的apk 签名文件的别名 项目如我的项目是: ...

  7. android apk重新[签名]

    1,删除之前的签名文件 用解压缩工具打开,删除 [META-INF] 文件夹 2,打开命令行窗口 3,[保证签名文件和apk在同一级目录下] 然后执行如下命令,将 (xx) 处替换自己的签名.apk ...

  8. 【Android Apk重新签名报错re-sign.jar之解决方法】

    故障现象:

  9. apk重签名方法

    转载(http://www.51testing.com/?uid-115892-action-viewspace-itemid-223023) 1.      生成Android APK包签名证书 1 ...

随机推荐

  1. Spring缓存框架原理浅谈

    运维在上线,无聊写博客.最近看了下Spring的缓存框架,这里写一下 1.Spring 缓存框架 原理浅谈 2.Spring 缓存框架 注解使用说明 3.Spring 缓存配置 + Ehcache(默 ...

  2. 使用libjpeg.framework压缩UIImage

    +(void)writeFile:(NSString *)filePath withQuality:(int)quality { //初始化图片参数 UIImage *image=[UIImage i ...

  3. shell简单用法笔记(一)

    一.linux中主要用的bash shell:查看linux系统中支持的shell种类可用: vim /etc/shell 执行shel脚步的方式: 1.赋予脚步可执行权限,使用相对或绝对路径调用该脚 ...

  4. Android应用安全开发之浅谈加密算法的坑

      <Android应用安全开发之浅谈加密算法的坑> 作者:阿里移动安全@伊樵,@舟海 阿里聚安全,一站式解决应用开发安全问题     Android开发中,难免会遇到需要加解密一些数据内 ...

  5. .Net开发笔记(十九) 创建一个可以可视化设计的对象

    阅读本篇博客之前需要了解VS窗体设计器的工作原理,详细可参见本系列博客(十).(十一).(十二).必须需要知道的一条结论就是:处于窗体设计器(Form Designer)中的任何组件(包含控件,下同) ...

  6. 备忘录:hadoop技术一点积累

    1.hbase的rowkey是按字典排序的,我看有的资料建议rowkey设计不应该是自增的,应该和这个字典排序相关吧 2.hbase的数据存储是按照region来的,region的设计前段时间在坐飞机 ...

  7. Web3DGame之路,Babylonjs 和TypeScript学习笔记(二)

    先来认识一下Babylonjs,由于基于webgl来开发,所以先介绍一下基础知识. Webgl是一个html标准,他要在canvas元素上初始化. Html页面上的准备 所以我们先从html页面开始看 ...

  8. [nRF51822] 13、浅谈nRF51822和NRF24LE1/NRF24LU1/NRF24L01经典2.4G模块无线通信配置与流程

    前言:  nRF51可以支持基于2.4G的互相通信.与NRF24LE1的通信.与NRF24LU1的通信.与NRF24L01的通信. 一.nRF51822基于2.4G和nRF51822通信 其中nRF5 ...

  9. .NET陷阱之六:从枚举值持久化带来大量空间消耗谈起

    好长时间没有写博文了,今天继续. 这次跟大家分享的内容起因于对一个枚举值列表的序列化,下面简化后的代码即能重现.为了明确起见,我显式指定了枚举的基础类型. // 定义一个枚举类型. public en ...

  10. 老司机学新平台 - Xamarin开发之我的第一个MvvmCross跨平台插件:SimpleAudioPlayer

    大家好,老司机学Xamarin系列又来啦!上一篇MvvmCross插件精选文末提到,Xamarin平台下,一直没找到一个可用的跨平台AudioPlayer插件.那就自力更生,让我们就自己来写一个吧! ...