如何给apk文件签名

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

时间: 2024-12-16 09:44:26

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

读取Android APK文件签名的方法

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

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

1.使用platform密钥对apk进行签名 1.1.进入<Android_Source_Path>/build/target/product/security,找到[platform.pk8]和[platform.x509.pem]系统密钥. 1.2.进入<Android_Source_Path>/build/tools/signapk找到SignApk.java,执行javac编译成SignApk.class 1.3.运行命令java com.android.signapk.S

Android之apk文件签名——keytool 和 jarsigner

一.生成密钥库将位置定位在jdk的bin文件中,输入以下命名行: keytool -genkey -alias ChangeBackgroundWid get.keystore -keyalg RSA -validity 20000 -keystore ChangeBackgroundWidget.keystore 上面的命令中间不换行,按下"Enter"键,并根据提示填写相关信息,详细信息如下及图1(validity为有效期,这里有效期为20000天):输入keystore密码:再次

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

你看到的这个文章来自于http://www.cnblogs.com/ayanmw 一个android apk的编译过程 请参考: http://www.2cto.com/kf/201312/261475.html 典型的编译过程: aapt( Android Asset Packaging Tool): 把你的应用程序资源文件(例如: AndroidManifest.xml file and the XML files for your Activities),编译成R.java .它可以让你从

替换APK文件内容后重新打包签名脚本

由于业务需求,需要替换APK文件内容后重新打包签名,调研后发现使用JDK里提供的命令可以很方便地实现.关键命令如下: jar -uf:替换apk文件内的某个文件或文件夹. jarsigner:为apk文件签名 zipalign:对签名后的apk文件进行字节对齐优化 下面以替换某apk包中assets目录下的1.ini和2.ini文件,并重新打包签名优化为例,先放上脚本代码: start.bat(windows版本) SET KEYSTORE_NAME=.\data\signature.keyst

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

Android开发中很重要的一部就是用自己的密钥给Apk文件签名,不经过签名的Apk文件一般是无法安装的,就算装了最后也是失败. 网上流传的"勾选允许安装未知来源的应用"其实跟签不签名没啥关系,说白了就是允许安装不从电子市场上下载的应用而已. 近几日需要修改一个Apk中JNI调用的.so文件,苦于没有apk源代码,只好研究了一下签名相关的问题.当然有很多第三方工具可以做到,但其实JDK中已经提供了强大的签名工具jarsigner. 去除签名 其实很简单,用WinRAR打开apk,找到M

android如何给apk重新签名

1.用压缩软件打开apk文件,删掉META-INF目录下的CERT.SF和CERT.RSA两个文件. 2. 使用目标系统的platform密钥来重新给apk文件签名. 2.1密钥文件,在代码目录中的位置是build\target\product\security下面的     platform.pk8和platform.x509.pem两个文件. 2.2 用系统提供的Signapk工具来签名,signapk的源代码是在"build\tools\signapk"下,在out\host\l

android apk的签名和权限问题

一. android apk的签名问题(http://blog.csdn.net/lyq8479/article/details/6401093) 1.为什么要给Android应用程序签名?      如果只能用一句简单的话语来回答这个问题的话,我会说:“这是Android系统所要求的”.      Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中,也就是说如果一个Android应用程序没有经过数字签名,是没有办法安装到系统中的!Android通过数字签名来

apk去广告工具(利用apktool去除apk文件里的广告)

基本知识 apk安装包的文件结构 以知名桌面软件“LauncherPro”为例,apk安装包文件目录: 文件目录如下: - META-INF - res - anim - color - drawable - drawable-hdpi - drawable-land - drawable-land-hdpi - drawable-mdpi - drawable-port - drawable-port-hdpi - layout - layout-land - layout-port - xm