apk中的签名文件格式apk是什么格式?

Android生成签名文件并用其对apk文件进行签名(Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]错误完美解决) - (Never Give Up)--(我的知识点滴) - ITeye技术网站
博客分类:
最近编程时遇到问题:写了一个android小程序,打包后用apktool反编译再打包都没问题,安装时出现Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]错误,网上查资料原来是签名的问题,解决方案如下。
《一》使用命令行生成签名文件
(1)创建一个用来存放签名文件的文件夹Android_keystore(2)在命令行窗口中输入命令:(粗体部分)
D:\Android_keystore&keytool -genkey -alias aeo_android.keystore -keyalg RSA -val
idity 20000 -keystore aeo_android.keystore
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]:
您的组织单位名称是什么?
[Unknown]:
您的组织名称是什么?
[Unknown]:
您所在的城市或区域名称是什么?
[Unknown]:
您所在的省/市/自治区名称是什么?
[Unknown]:
该单位的双字母国家/地区代码是什么?
[Unknown]:
CN=XiaoFeng, OU=btbu, O=btbu, L=beijing, ST=beijing, C=cn是否正确?
输入 &aeo_android.keystore& 的密钥口令
(如果和密钥库口令相同, 按回车):
这时会在D盘的Android_keystore文件夹下生成aeo_android.keystore文件,就是我们需要的签名文件,(-validity 20000 表示证书的有效天数为20000天) 《二》用生成的签名文件对apk文件进行签名 (1)在Eclipse中用“Export the unsigned apk”工具导出项目,这里保存到D盘的Android_keystore文件夹下,名为testbim.apk
(2)使用jarsigner给 testbim.apk 文件签名,如下所示:
D:\Android_keystore&"C:\Program Files\Java\jdk1.6.0_30\bin\jarsigner.exe" -verbo
se -keystore aeo_android.keystore -signedjar testbim_signed.apk testbim.apk aeo_
android.keystore
输入密钥库的口令短语:
正在添加: META-INF/MANIFEST.MF
正在添加: META-INF/AEO_ANDR.SF
正在添加: META-INF/AEO_ANDR.RSA
正在签名: res/drawable-hdpi/ic_action_search.png
正在签名: res/drawable-hdpi/ic_launcher.png
正在签名: res/drawable-ldpi/ic_launcher.png
正在签名: res/drawable-mdpi/ic_action_search.png
正在签名: res/drawable-mdpi/ic_launcher.png
正在签名: res/drawable-xhdpi/ic_action_search.png
正在签名: res/drawable-xhdpi/ic_launcher.png
正在签名: res/layout/activity_main.xml
正在签名: res/layout/two.xml
正在签名: res/menu/activity_main.xml
正在签名: AndroidManifest.xml
正在签名: classes.dex
正在签名: resources.arsc
keytool 是个密钥和证书管理工具。jarsigner 工具利用密钥仓库中的信息来产生或校验 Java 存档 (JAR) 文件的数字签名 (JAR 文件将类文件、图象、声音和/或其它数字化数据打包在一个文件中)。
这两个工具都是JDK自带的,所以你当前需要先确保JDK安装正确。并且环境变量设置正确,以便可以以命令行的方式进行处理。
输入密匙的口令短语: ...... 通过上面的命令就可以讲未签名的testbim.apk 文件签名为
testbim_signed.apk
(3)最后验证是否签名成功 Android_keystore&"C:\Program Files\Java\jdk1.6.0_30\bin\jarsigner.exe" -verify testbim_signed.apk如果成功则 输出:
jar 已验证
( 4 )安装到虚拟机上
命令参数说明:
产生证书文件 -keystore
指定密钥库的.keystore文件中
指定密钥的算法
为证书有效天数,这里我们写的是20000天。 -alias
在输入密码时没有回显,只管输入就可以了,一般位数建议使用20位,切忌需要记下来后面还要用,
1、CN(Common Name - 名字与姓氏):其实这个“名字与姓氏”应该是域名,比如说localhost或是blog.devep.net之类的。输成了姓名,和真正运行的时候域名不符,会出问题。浏览器访问时,弹出一个对话框,提示“安全证书上的名称无效,或者与站点名称不匹配”,用户选择继续还是可以浏览网页。但是用http client写程序访问的时候,会抛出类似于“javax.servlet.ServletException: HTTPS hostname wrong: should be ”的异常。
2、在用keytool生成数字证书时必须保证:-keystore androidapp.keystore -alias androidapp.keystore 两者名称必须相同。否则下一步签名时会出现错误:jarsigner: 找不到 androidapp.keystore 的证书链。androidapp.keystore 必须引用包含专用密钥和相应的公共密钥证书链的有效密钥库密钥条目。
$jarsigner -h
用法:jarsigner [选项] jar 文件别名(key的别名)
jarsigner -verify [选项] jar 文件
[-keystore &url&]
密钥库位置
[-storepass &口令&]
用于密钥库完整性的口令
[-storetype &类型&]
密钥库类型
[-keypass &口令&]
专用密钥的口令(如果不同)
[-sigfile &文件&]
.SF/.DSA 文件的名称
[-signedjar &文件&]
已签名的 JAR 文件的名称
[-digestalg &算法&]
摘要算法的名称
[-sigalg &算法&]
签名算法的名称
验证已签名的 JAR 文件
[-verbose]
签名/验证时输出详细信息
输出详细信息和验证时显示证书
[-tsa &url&]
时间戳机构的位置
[-tsacert &别名&]
时间戳机构的公共密钥证书
[-altsigner &类&]
替代的签名机制的类名
[-altsignerpath &路径列表&] 替代的签名机制的位置
[-internalsf]
在签名块内包含 .SF 文件
[-sectionsonly]
不计算整个清单的散列
[-protected]
密钥库已保护验证路径
[-providerName &名称&]
提供者名称
[-providerClass &类&
加密服务提供者的名称
[-providerArg &参数&]] ... 主类文件和构造函数参数
浏览: 473203 次
来自: 广州
写的不错,作为笔记了
好文章是要顶的!
理解了许多。解释的不错。3Q.
挺好的,讲的后使用快捷导航没有帐号?
一步搞定
只需一步,快速开始
查看: 7084|回复: 9
积分558在线时间202 小时分享阅读权限20主题UID2205950帖子精华0 战斗力0 点 技术1 点 金币372 元 人气19 点 贡献563 点 手机U8800+注册时间最后登录
, 积分 558, 距离下一级还需 142 积分
金币372 元 手机U8800+
下了个APK,不解压winrar直接替换里面的媒体文件,删除LAMIAN.SF、LAMIAN.RSA文件,用AndroidResEdit_v_1.5签名工具和AUTO-SIGN工具,都不能签名。前者显示“……失败,……包含空格、中文……”什么的,但我满足条件后也不能签名。
后者干脆什么显示都没有(因为是BAT文件,一闪而过。)
为了摸清关系,我将原APK用WINRAR打开,仅删除LAMIAN.SF、LAMIAN.RSA文件,签名之,仍然不行。
积分8942在线时间3115 小时分享阅读权限100主题UID1726804帖子精华1 战斗力0 点 技术178 点 金币4327 元 人气2058 点 贡献5888 点 手机华为U8800+注册时间最后登录
金币4327 元 手机华为U8800+
如果是一般的APK不进行反编译只是用压缩软件替换了部分内容是不用签名的哦
积分558在线时间202 小时分享阅读权限20主题UID2205950帖子精华0 战斗力0 点 技术1 点 金币372 元 人气19 点 贡献563 点 手机U8800+注册时间最后登录
, 积分 558, 距离下一级还需 142 积分
金币372 元 手机U8800+
石难子 发表于
如果是一般的APK不进行反编译只是用压缩软件替换了部分内容是不用签名的哦
求教:APK的签名是什么意义?
积分558在线时间202 小时分享阅读权限20主题UID2205950帖子精华0 战斗力0 点 技术1 点 金币372 元 人气19 点 贡献563 点 手机U8800+注册时间最后登录
, 积分 558, 距离下一级还需 142 积分
金币372 元 手机U8800+
被我搞定!
下载APKsign的软件,叫“万能签名工具”,可以签名,可以安装,程序运行也没问题了。
我改的是一个叫POP STAR的消除游戏,与S60V5的MATCH'EM 很像,但是图案我不喜欢。
积分19在线时间7 小时分享阅读权限10主题UID2955454帖子精华0 战斗力0 点 技术0 点 金币6 元 人气0 点 贡献21 点 手机x8注册时间最后登录
, 积分 19, 距离下一级还需 1 积分
金币6 元 手机x8
多谢,试过了有用
积分19在线时间7 小时分享阅读权限10主题UID2955454帖子精华0 战斗力0 点 技术0 点 金币6 元 人气0 点 贡献21 点 手机x8注册时间最后登录
, 积分 19, 距离下一级还需 1 积分
金币6 元 手机x8
多谢& && &
积分1338在线时间891 小时分享阅读权限35主题UID2760819帖子精华0 战斗力0 点 技术0 点 金币877 元 人气6 点 贡献737 点 手机u8800+注册时间最后登录
, 积分 1338, 距离下一级还需 462 积分
金币877 元 手机u8800+
安卓还要签名
积分84在线时间38 小时分享阅读权限15主题UID205978帖子精华0 战斗力0 点 技术0 点 金币252 元 人气0 点 贡献68 点注册时间最后登录
, 积分 84, 距离下一级还需 16 积分
金币252 元
APK文件签名失败原因分析:1、没有安装Microsoft .Net Framework;2、没有安装JAVA程序;3、文件名有空格或中文名;4、APK程序路径有中文名
积分10729在线时间3851 小时分享阅读权限150主题UID2574061帖子精华1 战斗力0 点 技术233 点 金币1483 元 人气4426 点 贡献3577 点 手机U8800+注册时间最后登录
金币1483 元 手机U8800+
还有有些软件不支持再次替换文件和发编译的,签名会不成功,一般来说不上系统文件都能签名成功
积分1在线时间0 小时分享阅读权限10主题UID3947525帖子精华0 战斗力0 点 技术0 点 金币10 元 人气0 点 贡献2 点 手机S5660注册时间最后登录
, 积分 1, 距离下一级还需 4 积分
金币10 元 手机S5660
它上面写着签名成功 可是却在保存目录找不到
双鱼座勋章,申请勋章需要扣除200金币
十二生肖-午马
十二生肖-午马勋章,申请勋章需要扣除200金币
安智灌水王勋章
主题达到2000可申请
安智帅哥勋章
安智帅哥勋章
安智全勤勋章
签到满一百天即可申请
安智伯乐勋章
推荐5个版主并且全部转正后可申请
安智网才子勋章
安智网才子勋章
安智网友聚会勋章
安智历届网友聚会勋章
500万会员勋章
参加500万会员活动获得此勋章,限量勋章
天蝎座勋章,申请勋章需要扣除200金币
十二生肖-辰龙
十二生肖-辰龙勋章,申请勋章需要扣除200金币
安智版主勋章
安智版主勋章
Powered byterry_龙 的BLOG
用户名:terry_龙
文章数:109
评论数:383
访问量:1016146
注册日期:
阅读量:26676
51CTO推荐博文
昨天写应用,涉及到需要修改系统时间等操作,查了一下Android 的设置源码,里面的一个方法如下:
&&&public&void&onDateSet(DatePicker&view,&int&year,&int&month,&int&day)&{
&&&&&&&&Calendar&c&=&Calendar.getInstance();
&&&&&&&&c.set(Calendar.YEAR,&year);
&&&&&&&&c.set(Calendar.MONTH,&month);
&&&&&&&&c.set(Calendar.DAY_OF_MONTH,&day);
&&&&&&&&long&when&=&c.getTimeInMillis();
&&&&&&&&if&(when&/&<span style="color: #00&&&Integer.MAX_VALUE)&{
&&&&&&&&&&&&SystemClock.setCurrentTimeMillis(when);
&&&&&&&&updateTimeAndDateDisplay();
从上面的 Android 应用程序源码可以看出,修改系统日期需要为Calendar 设置年月日,然后通过调用&SystemClock.setCurrentTimeMillis 方法,设置系统日期,既然源码是这样写的,那我们也依样画葫芦来学一下吧,下面是通过使用datePicker修改日期的代码:
canlendar&=&Calendar.getInstance();
&&&&&&&&&&&&&&&&&&&&year&=&datePicker.getYear();
&&&&&&&&&&&&&&&&&&&&month&=&datePicker.getMonth();
&&&&&&&&&&&&&&&&&&&&day&=&datePicker.getDayOfMonth();
&&&&&&&&&&&&&&&&&&&&canlendar.set(Calendar.YEAR,&year);
&&&&&&&&&&&&&&&&&&&&canlendar.set(Calendar.MONTH,&month);
&&&&&&&&&&&&&&&&&&&&canlendar.set(Calendar.DAY_OF_MONTH,&day);
&&&&&&&&&&&&&&&&&&&&long&when&=&canlendar.getTimeInMillis();
&&&&&&&&&&&&&&&&&&&&if&(when&/&<span style="color: #00&&&Integer.MAX_VALUE)&{
&&&&&&&&&&&&&&&&&&&&&&&&SystemClock.setCurrentTimeMillis(when);
&&&&&&&&&&&&&&&&&&&&&&&&tv_date.setText(canlendar.get(Calendar.YEAR)&+&&/&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&+&((canlendar.get(Calendar.MONTH)&+&<span style="color: #))&+&&/&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&+&canlendar.get(Calendar.DAY_OF_MONTH));
&&&&&&&&&&&&&&&&&&&&}
Tip:每次需要使用Calendar 必须获得一次实例,否则会它会使用上一次获取实例的日期格式,修改的时候可能会有点小问题
可是,照着上面的代码敲了之后,运行却出现如下的警告:
650) this.width=650;" onclick='window.open("/viewpic.php?refimg=" + this.src)'
border="0" alt="" src="/cnblogs_com/terryblog/permission_denied.jpg" width="684" height="85" />
网上查了一下,说SystemClock.setCurrentTimeMillis& 这个函数需要root 权限或者运行在系统进程中才可以用,通过参考了这一篇文章我得到了解决办法:&,不过这篇文章的第二个办法说得有点不是很清楚,这里我重新为大家详细说一下
先进入 Android 源码目录 F:\android_source\build\target\product\security ,具体机器目录自己选择。找到 【platform.pk8】和【platform.x509.pem】这两个文件,这里为了方便将它们复制到根目录,如:F:\sign 文件夹内,本来下一步就是需要打包jar 包了,不过里我们在android系统的源码内找到 out 编绎目录下
signApk.jar 这个包,可以自行打jar 包或者下载我这个jar 包都是可以的,下载地址:&请自行将后缀名改为.jar 格式,把此jar 包放于F:\sign& 文件内,打开dos 操作界面,定们到F:\sign,如下:650) this.width=650;" onclick='window.open("/viewpic.php?refimg=" + this.src)'
border="0" alt="" src="/cnblogs_com/terryblog/docs.jpg" width="119" height="39" />,接着输入如下命令:java -jar signapk.jar platform.x509.pem platform.pk8 test.apk testnew.apk ,在dos 命令名如下图:650) this.width=650;" onclick='window.open("/viewpic.php?refimg=" + this.src)'
border="0" alt="" src="/cnblogs_com/terryblog/tteew.jpg" width="638" height="32" />,其中set.apk 是指我们要签名的原始文件apk,后面setnew.apk 是指我们签名后输出的apk文件的名称
Tip:在签名的时候必须将set.apk事先用rar 文件打开,进入META-INF目录下,将CERT.SF和CERT.RSA这两个文件删除掉,再执行如上操作。到了这一步,程序己经可以正常安装了。
如果提示 FaiLure [INSTALL_FAILED_ALREADY_EXISTS],请使用如下命令,将应用程序移除:650) this.width=650;" onclick='window.open("/viewpic.php?refimg=" + this.src)'
border="0" alt="" src="/cnblogs_com/terryblog/uninstall.jpg" width="324" height="45" />,uninstall 后面字符是指应用程序所在的包名,再运行adb install [package name] 就可以安装成功。
Tip:不要忘了在你的manifest文件下注册android:sharedUserId=&android.uid.system& 。
如果你照着如上的步骤一步一步写的话,保证可以成功修改系统的时间或者日期等操作。
&本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)
本文收录至博客专题:《》
17:14:32 11:37:05 11:39:48 15:09:54怎样给APK文件签名?用什么方法?_百度知道
怎样给APK文件签名?用什么方法?
用什么方法或者软件能给APK文件签名 让它能安装在手机上面
提问者采纳
给apk文件签名主要分三步,创建证书(如果没有)--&签名--&优化(可选)1)使用jdk的keytool工具生成签名用的证书& keytool -genkey -v -alias CERT -keyalg RSA -keysize 2048 -validity 10000 -keystoreCERT.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 签名过程需要输入证书的密码,一些重要的参数值说明如下(根据自己的需要要进行相应的修改): 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 3)使用android sdk的zipalign工具优化已签名的apk文件& zipalign -v 4 unaligned.apk aligned.apk 注意要在签名后再zipalign。这个工具不是jdk自带的,而是在%ANDROID_HOME%&#92;tools&#92;zipalign.exe。
提问者评价
太给力了,你的回答完美的解决了我的问题!
其他类似问题
为您推荐:
文件签名的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁4381人阅读
re-sign.jar中后自动去除签名这个方法,经试验不可用!
1.去除准备重新签名SinaVoice.apk软件本身的签名
将apk文件后缀改为.zip,然后从winrar中删除META-INF文件夹,删除后重新将文件名改成apk的后缀
2.开始-运行-cmd
cd到android-sdk下的platform-tools文件运行
输入:jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore D:\tools\robotium\debug.keystore -storepass android -keypass android
D:\tools\robotium\SinaVoice.apk androiddebugkey &按回车
备注:D:\tools\robotium\debug.keystore &这个是自己debug.key的位置
& & & & & & D:\tools\robotium\SinaVoice.apk & &这个是我准备签名的apk
3. 再cd到android-sdk的tools文件下运行
输入:zipalign 4
D:\tools\robotium\SinaVoice.apk D:\tools\robotium\SinaVoice_debug.apk&
最后:D:\tools\robotium\SinaVoice_debug.apk就是我们自动化测试用的apk文件
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:93268次
积分:1396
积分:1396
排名:第16079名
原创:46篇
转载:18篇
评论:19条
(2)(2)(6)(3)(3)(13)(12)(1)(2)(1)(1)(3)(11)(4)

我要回帖

更多关于 apk签名是什么 的文章

 

随机推荐