宅科技 - 科技,宅出新生活

搜索
热搜: 活动 交友 discuz
如果你还没有论坛的账号,赶快注册吧!
立即注册

合作站点账号登陆

快捷导航
查看: 487|回复: 4

[知识点] APK/ROM签名之keytool生成自己的keystore和jarsigner签名

[复制链接] [提交至百度]

92

主题

100

帖子

2133

积分

超级版主

Rank: 8Rank: 8

积分
2133
发表于 2018-12-11 11:00:05 | 显示全部楼层 |阅读模式
扫码领红包
本帖最后由 Jimoy 于 2018-12-11 11:07 编辑

android程序的签名和Symbian类似都可以自签名(Self-signed),但是在android平台中APK签名的证书初期还显得形同虚设,平时开发时通过ADB接口上传的程序会自动被签有Debug权限的APK签名程序。需要签名验证在上传程序到android Market的时候大家都发现问题可。下面是android signed生成的制作方法


  首先在android开发时没有安装JAVA JDK的网友在甲骨文官方网站下载JDK ,我们所用到的就是其中的Keytool和Jarsigner。


官网下载最新版 地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

官网下载提示:点击链接按钮 Java Platform (JDK) 8u5 或按钮 JDK(Download)都可进入jdk下载页面

进入JDK下载页面后要点选 Accept License Agreement 才能下载,不知道电脑是多少位系统的都可下32位的

32位系统下载:Windows x86 151.71 MB jdk-8u5-windows-i586.exe

64位系统下载:Windows x64 155.18 MB jdk-8u5-windows-x64.exe



APK签名分为两个步骤,首先通过keytool生成用来签名的 xxx.keystore ,然后再用jarsigner签名apk


第一步 :生成Keystore

唤出CMD: 开始—运行—输入CMD后点确定或按ENTER回车键,唤出CMD后输入下面命令后按回车键:

cd /d C:\Program Files\Java\jdk1.7.0\bin    (JDK的安装目录)

            

输入后按回车

再输入下面命令后按回车

  1. keytool -genkey -alias abc.keystore -keyalg RSA -validity 20000 -keystore abc.keystore
复制代码

abc可改为abc等,命令区分大小写。


执行命令后会出现下面步骤:

  1. 输入keystore密码:[密码不显示,输入密码按回车即可开

  2. 再次输入新密码:[密码 不显示,输入密码按回车即可开

  3. 您的名字与姓氏是什么?

  4.   [Unknown]:  tttabc            

  5. 您的组织单位名称是什么?

  6.   [Unknown]:  bbs.zecoki.com

  7. 您的组织名称是什么?

  8.   [Unknown]:  bbs.zecoki.com

  9. 您的组织名称是什么?

  10.   [Unknown]:  bbs.zecoki.com

  11. 您所在的城市或区域名称是什么?

  12.   [Unknown]:  Shen Zhen

  13. 您所在的州或省份名称是什么?

  14.   [Unknown]:  Shen Zhen

  15. 该单位的两字母国家代码是什么

  16.   [Unknown]:  CN

  17. CN=abc, OU=www.tttabc.com, O=www.tttabc.com, L=New York, ST

  18. =New York, C=CN 正确吗?

  19.   [否]:  Y

  20. 输入<abc.keystore>的主密码

  21.         (如果和 keystore 密码相同,按回车):
复制代码

成功后将会在C:\Program Files\Java\jdk1.7.0\bin 下产生一个名为abc.keystore的文件



其中参数-validity为证书有效天数,这里我们写的大些20000天。还有在输入密码时没有回显,只管输入就可以了,一般位数建议使用20位,最后需要记下来后面还要用:

  接下来我们开始为apk文件签名了。



第二步 :用jarsigner签名apk

将要签名的APK放到C:\Program Files\Java\jdk1.7.0\bin 下

apk最好命名为简单的名字 如123.apk

唤出CMD: 开始—运行—输入CMD后点确定或按ENTER回车键,唤出CMD后输入下面命令后按回车键:

cd /d C:\Program Files\Java\jdk1.7.0\bin      

           

输入后按回车

再输入下面命令后按回车

  1. jarsigner -verbose -keystore abc.keystore -signedjar 123x.apk 123.apk abc.keystore
复制代码

然后输入密码按回车

就可以生 成签名的apk文件,这里输入文件abc.apk,最终生成123x.apk为android签名后的APK执行文件。下面提示输入的密码和keytool输入的一样就行了 。


如果是修改APK或ZIP格式刷机ROM需要签名推荐用auto-sign签名,简单方便:

下载 APK/ROM签名工具 ,运行需安装JAVA jdk,auto-sign解压到如E盘下,将需要签名的APK或ZIP放到 auto-sign签名工具同目录下,运行auto-sign签名批处理工具即可自动签名。

---------------------------------------------------------------------------

下面内容没什么用的:

有关android程序发布和签名可以查看SDK中 http://code.google.com/android/devel/sign-publish.html 一文.


  附上keytool参数以及jarsigner参数:

  keytool用法:

-certreq     [-v] [-protected]

             [-alias <别名>] [-sigalg <sigalg>]

             [-file <csr_file>] [-keypass <密钥库口令>]

             [-keystore <密钥库>] [-storepass <存储库口令>]

             [-storetype <存储类型>] [-providername <名称>]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

-changealias [-v] [-protected] -alias <别名> -destalias <目标别名>

             [-keypass <密钥库口令>]

             [-keystore <密钥库>] [-storepass <存储库口令>]

             [-storetype <存储类型>] [-providername <名称>]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

-delete      [-v] [-protected] -alias <别名>

             [-keystore <密钥库>] [-storepass <存储库口令>]

             [-storetype <存储类型>] [-providername <名称>]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

-exportcert  [-v] [-rfc] [-protected]

             [-alias <别名>] [-file <认证文件>]

             [-keystore <密钥库>] [-storepass <存储库口令>]

             [-storetype <存储类型>] [-providername <名称>]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

-genkeypair  [-v] [-protected]

             [-alias <别名>]

             [-keyalg <keyalg>] [-keysize <密钥大小>]

             [-sigalg <sigalg>] [-dname <dname>]

             [-validity <valDays>] [-keypass <密钥库口令>]

             [-keystore <密钥库>] [-storepass <存储库口令>]

             [-storetype <存储类型>] [-providername <名称>]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

-genseckey   [-v] [-protected]

             [-alias <别名>] [-keypass <密钥库口令>]

             [-keyalg <keyalg>] [-keysize <密钥大小>]

             [-keystore <密钥库>] [-storepass <存储库口令>]

             [-storetype <存储类型>] [-providername <名称>]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

-help

-importcert  [-v] [-noprompt] [-trustcacerts] [-protected]

             [-alias <别名>]

             [-file <认证文件>] [-keypass <密钥库口令>]

             [-keystore <密钥库>] [-storepass <存储库口令>]

             [-storetype <存储类型>] [-providername <名称>]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

-importkeystore [-v]

             [-srckeystore <源密钥库>] [-destkeystore <目标密钥库>]

             [-srcstoretype <源存储类型>] [-deststoretype <目标存储类型>]

             [-srcstorepass <源存储库口令>] [-deststorepass <目标存储库口令>]

             [-srcprotected] [-destprotected]

             [-srcprovidername <源提供方名称>]

             [-destprovidername <目标提供方名称>]

             [-srcalias <源别名> [-destalias <目标别名>]

               [-srckeypass <源密钥库口令>] [-destkeypass <目标密钥库口令>]]

             [-noprompt]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

-keypasswd   [-v] [-alias <别名>]

             [-keypass <旧密钥库口令>] [-new <新密钥库口令>]

             [-keystore <密钥库>] [-storepass <存储库口令>]

             [-storetype <存储类型>] [-providername <名称>]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

-list        [-v | -rfc] [-protected]

             [-alias <别名>]

             [-keystore <密钥库>] [-storepass <存储库口令>]

             [-storetype <存储类型>] [-providername <名称>]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

-printcert   [-v] [-file <认证文件>]

-storepasswd [-v] [-new <新存储库口令>]

             [-keystore <密钥库>] [-storepass <存储库口令>]

             [-storetype <存储类型>] [-providername <名称>]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

jarsigner用法: [选项] jar 文件别名

       jarsigner -verify [选项] jar 文件

[-keystore <url>]           密钥库位置

[-storepass <口令>]         用于密钥库完整性的口令

[-storetype <类型>]         密钥库类型

[-keypass <口令>]           专用密钥的口令(如果不同)

[-sigfile <文件>]           .SF/.DSA 文件的名称

[-signedjar <文件>]         已签名的 JAR 文件的名称

[-digestalg <算法>]    摘要算法的名称

[-sigalg <算法>]       签名算法的名称

[-verify]                   验证已签名的 JAR 文件

[-verbose]                  签名/验证时输出详细信息

[-certs]                    输出详细信息和验证时显示证书

[-tsa <url>]                时间戳机构的位置

[-tsacert <别名>]           时间戳机构的公共密钥证书

[-altsigner <类>]           替代的签名机制的类名

[-altsignerpath <路径列表>] 替代的签名机制的位置

[-internalsf]               在签名块内包含 .SF 文件

[-sectionsonly]             不计算整个清单的散列

[-protected]                密钥库已保护验证路径

[-providerName <名称>]      提供者名称

[-providerClass <类>        加密服务提供者的名称

[-providerArg <参数>]] ... 主类文件和构造函数参数

默认生成的APK文件是debug签名的,如果要发布到android Market那么需要另外用

keytool和jarsigner来给你的APK签名(主要是设定时间和所有者).


按照常见步骤

第一步:

  1. keytool -genkey -v -keystore android.keystore -alias android.keystore -keyalg RSA -validity 20000
复制代码

第二步:

  1. jarsigner -verbose -keystore android.keystore -signedjar android_signed.apk android.apk android.keystore
复制代码





上一篇:APK/ROM签名工具
下一篇:360 N6官方线刷固件ROM包 更新合集及刷机指南
回复

使用道具 举报

1

主题

14

帖子

38

积分

吃瓜群众

Rank: 1

积分
38
发表于 2018-12-18 08:08:10 | 显示全部楼层
看看,以后可能有用
回复 支持 反对

使用道具 举报

1

主题

14

帖子

38

积分

吃瓜群众

Rank: 1

积分
38
发表于 2018-12-18 08:08:59 | 显示全部楼层
为什么要签名?这个有什么作用?
回复 支持 反对

使用道具 举报

0

主题

12

帖子

29

积分

吃瓜群众

Rank: 1

积分
29
发表于 2019-1-6 18:23:26 | 显示全部楼层
不错,很详细
回复 支持 反对

使用道具 举报

0

主题

20

帖子

21

积分

吃瓜群众

Rank: 1

积分
21
发表于 2019-2-19 16:39:06 | 显示全部楼层
楼主威武楼主威武
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

微信公众号
微信扫码关注,
回复“领取金币”
每周抽取5位
会员奖励500金币

手机版|小黑屋|网站地图|宅科技 ( 粤ICP备15107403号

GMT+8, 2019-8-21 11:05 , Processed in 0.987323 second(s), 32 queries .

Copyright © 2016 宅科技 | 智能终端极客社区

Powered by Discuz! X3.2 Licensed

快速回复 返回顶部 返回列表