如何对apk文件进行签名

有没有发现自己重新打包过后的apk程序无法安装到手机上?那是因为你的程序没有签名或者签名不对。下面就简单介绍一下如何对apk文件进行签名。

请确保你的机器上已经安装了JDK。

1)首先第一步要生成一个签名用的证书,这个可以用Java自带的工具来做

进入到JDK安装路径下的bin目录下,或者在环境变量PATH中加入这个目录,然后敲入命令:

keytool -genkeypair -alias roland.keystore -keyalg RSA -validity 500000 -keystore roland.keystore

稍微解释一下这个命令,keytool是JDK自带的一个命令行证书生成工具,参数-genkeypair表示要生成证书,除此之外还有一些子参数:

    a)参数-alias是证书的别名,这里是roland.keystore,这个别名待会在后面签名的时候要使用到;

    b)参数-keyalg表示加密的类型,这里使用RSA;

    c)参数-validity表示证书的有效期限,这里设置的是500000天,足够长了;

    d)参数-keystore表示要生成的证书文件名是roland.keystore,注意这个和别名不一样,虽然我写成一样了,但实际上可以完全不一样。

敲回车后,会有一堆问题需要你回答:


先是要输入密码,两次输入要一致。然后是名字,组织单位名称,组织名称,所在地省份,国家代码,这些信息可以写真实的,也可以乱写。如果要正式发布应用,最好写真的,如果是玩玩的,那就随便了。然后下一步确认一下输入信息是正确的。最后要求输入keystore的主密码,直接回车就好了。

一切都完成后,就会在当前目录下生成一个-keystore参数后面指定的文件。好了,到此签名所需证书已经生成好了。

2)用证书对apk文件进行签名,也是用Java自带的命令行工具来做

jarsigner -verbose -keystore roland.keystore -signedjar test_signed.apk test.apk roland.keystore
再稍微解释一下这些参数

    a)参数-verbose表示要显示签名过程中的详细信息,如果出了问题方便查看,不要也可以;

    b)参数-keystore表示签名所需要的证书,这里指定的是上一个步骤生成的证书,注意如果不在当前目录下的话,请指定路径名,保证程序一定可以访问到那个keystore;

    c)参数-signedjar表示要签名的apk文件,签名后的apk文件和证书的别名。注意这里是反的,紧接着-signedjar后面的是签名后的apk文件名,再之后才是要签名的apk文件,最后是证书的别名,这个别名就是在上一步中,参数-alias后面写的名字。

输入完后敲回车,会显示如下信息:


到此,表明签名已经成功了,可以把你的程序安装到设备上咯,:-)

顺带着我们再看看签名前后的apk包有什么区别。其实apk包就是一个zip文件,可以用所有打开zip文件的工具打开它。在win7下还有更方便的做法,直接把文件的扩展名从.apk改成.zip就可以直接打开了,就像打开一个目录一样。先看看没签名前的包里有什么:


再来看看签名后的包里有什么:


非常明显,多了一个目录出来,这就是签名的秘密所在啦。

顺带提一句,如果你想换掉一个包的签名或者由于你往包里面加了或者修改了一些东西导致原始证书无效了,其实很简单,先把apk包里面的这个“META-INF”目录整体删掉,然后再对这个apk文件用你自己的证书签名就好了。

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值