一个android apk的编译过程 请参考:

http://www.2cto.com/kf/201312/261475.html

典型的编译过程:

aapt( Android Asset Packaging Tool): 把你的应用程序资源文件(例如: AndroidManifest.xml file and the XML filesforyour Activities),编译成R.java 。它可以让你从java代码中引用你的资源。

aidl :转换.aidl 接口成为java接口

java编译工具(javac):所有的java代码(包括 :java源码,R.java , .aidl 转换后的接口文件)由java编译工具(javac) 编译成中间代码(.class) 文件。

dex工具(dx):转换中间代码和第三方库的中间代码为Dalvikbytecodeapk建立工具:把所有不需要编译的资源,编译的资源和Dalvik代码(.dex)打包成 .apk 文件签名(jarsigner).apk 建立后,它必须被签名才能安装到设备上,否则设备会拒绝安装。

因为编译工具包含了调试签名的私钥,所以在编译时就直接签名了。但是你要发行版本时,你必须自己对apk包进行签名。

对齐工具(zipalign):最后,还需要用zipalign工具对包进行对齐。

安装JDK,确保可以使用keytool jarsigner两个工具,因为apk格式其实就是jar,jar又是基于zip格式 添加一些扩展内容的格式.

1.制作签名工具

C:\>where keytool

C:\Program Files\Java\jdk1.7.0_45\bin\keytool.exe

2.进行签名工具

C:\>where jarsigner

C:\Program Files\Java\jdk1.7.0_45\bin\jarsigner.exe

签名分两个部分:

生成私钥

keytool:

Keytool 选项描述

-genkey

产生一个键值对(公钥和私钥)

-v

允许动作输出

-alias

键的别名。只有前八位字符有效。

-keyalg

产生键的加密算法。支持DSA和RSA。

-keysize

产生键的长度。如果不支持,keytool用默认值1024 bits.通常我们用2048 bits 或更长的key。

-dname

专有名称,描述谁创建的密钥。该值被用作自签名证书的颁发者和主题字段。注意你可以不在命令行指定。如果没有指定keytool会提示你(CN, OU, and so on)。

-keypass

键的密码。

主要为了安全起见,如果没提供,keytool会提示你输入。

-validity

键的有效期,单位:天

Note: A value of 10000 or greater is recommended.

-keystore.keystore

用于存储私钥的文件。

-storepass

私钥存储文件的密码。

主要为了安全起见,如果没提供,keytool会提示你输入。这个密码不会存储在你的shell历史记录中。

keytool -genkey -v -keyalg DSA -keysize 1024 -sigalg SHA1withDSA  -validity 20000  -keystore MyDevel.keystore -alias devel   -keypass MyDevel -storepass MyDevel

用私钥进行签名

jarsigner:

Jarsigner 选项描述

-keystore.keystore

包含你私钥的存储文件

-verbose

显示输出动作。

-sigalg

签名算法,用 SHA1withRSA.

-digestalg

消息摘要算法,用 SHA1.

-storepass

存储文件的密码。

主要为了安全起见,如果没提供,jarsigner会提示你输入。这个密码不会存储在你的shell历史记录中。

-keypass

私钥的密码。

主要为了安全起见,如果没提供,jarsigner会提示你输入。这个密码不会存储在你的shell历史记录中。

jarsigner  -verbose -sigalg SHA1withDSA -digestalg SHA1  -keystore myDevel.keystore -storepass MyDevel test.apk devel

用eclipse工具进行签名:

在工程上点右键->android tools->export singedappplication package

用已经存在的keystore KEY存储文件签名:

也可以创建一个新的keystore文件:

这里validity 年的有效期为1-1000哦..其他就错了,改成500试试.

同样是MyDevel.keystore,一个是jarsigner签名,一个是eclipse签名。

对齐工具(zipalign):

一旦你已经签署了APK与你的私钥,在文件上运行zipalign。此工具可确保所有未压缩的数据开始于一个特定的字节对齐,相对于文件的开始。当一个设备上安装,确保对齐在4字节边界提供了性能优化。当对齐,Android系统能够读取文件使用mmap(),即使它们包含与对齐限制二进制数据,而不是复制所有从包中的数据的。其好处是在RAM中的运行应用程序所消耗的量减少。

zipalign -v 4 HelloWorld.apk HelloWorld_Release.apk

=========================================

在使用jarsigner签名的时候,遇到无法安装,提示无签名的错误:

正常的安装应该是:

C:\>adb install test.apk360 KB/s (19576 bytes in 0.053s)

pkg: /data/local/tmp/test.apk

Success

如果已经安装,adb貌似无法直接覆盖安装

C:\>adb install test.apk367 KB/s (19576 bytes in 0.052s)

pkg: /data/local/tmp/test.apk

Failure[INSTALL_FAILED_ALREADY_EXISTS]

对于【没有签名或签名有错误】的安装为

C:\>adb install test_Unsigned.apk315 KB/s (18113 bytes in 0.056s)

pkg: /data/local/tmp/test_Unsigned.apk

Failure[INSTALL_PARSE_FAILED_NO_CERTIFICATES]

其他人也遇到过这个问题:如这位兄弟所言

JDK1.7签名APK异常 http://blog.csdn.net/sgz_china/article/details/8060315

错误的签名为:

C:\>jarsigner -verbose -keystore myDevel.keystore -storepass MyDevel test.apk devel

正在添加: META-INF/DEVEL.SF

正在添加: META-INF/DEVEL.DSA

正在签名: res/layout/main.xml

正在签名: AndroidManifest.xml

正在签名: resources.arsc

正在签名: res/drawable-hdpi/icon.png

正在签名: res/drawable-ldpi/icon.png

正在签名: res/drawable-mdpi/icon.png

正在签名: classes.dex

C:\>adb install test.apk349 KB/s (19697 bytes in 0.055s)

pkg: /data/local/tmp/test.apk

Failure[INSTALL_PARSE_FAILED_NO_CERTIFICATES]C:\>

主要是去掉了 jarsigner的两个参数:  -sigalg SHA1withDSA -digestalg SHA1

其实在Android官网有说明的:

Caution:As of JDK 7, the default signing algorithim has changed, requiring you to specify the signature and digest algorithims (-sigalgand-digestalg) when you sign an APK.

jarsigner -..... -sigalg SHA1withRSA-digestalg SHA1 ...

JDK1.7 由于默认签名算法改变,需要指定 签名算法 和 密钥  算法.应该是对应keytool的

-sigalg 签名算法名称

-keyalg 密钥算法名称

两个参数.

===============

另外关于签名后的META-INFO中的 SF RSA文件名

不过默认的APK的META-INFO的签名后的文件名是 CERT.SF 和 CERT.RSA. 我使用jarsigner 签名后 就是 那个 .SF .RSA。;用eclipse签名的就是这种命名。

这个CERT应该不是keytool指定的alias吧? 可以通过其他方式改成这个名字么?不知道,直接修改apk,那么apk的zip头信息中的签名信息将会被修改掉,导致无法安装了。

======================

TODO:关于APK签名,还有一种是Android源码中的 signapk.jar [编译 打包后,有SignApk.java的源码文件的]

使用方法:

Usage: signapk publickey.x509[.pem] privatekey.pk8 input.jar output.jar

其中

testkey.pk8 是二进制,

0?? 0*咹嗺

???? ? 謸奁$表莃噘?>>蚻??尐杓ㄍk觴n????Y?w〤玷=Kd镐渔V疋g?坎0祒?C綥r窮?嗮8壜?幘蠌拭??申撔躂驪"P2鄝?頹3Y姒旍,瞅劆葄斬;1 :g7./d纍mB馲唼佁訢趌菝?XH?dO哭樕(wH埘gjT

乀然?光GU3膋汍o揿處i缛⑿巟& ?檙}

?

﹁á赟hgk3掘樆M汎祷?F?,蛅v瓴酛w掔 祿*鱃鞴wU?

柏#v媂j駖m凝@?厙o_

,交啛!y玌pzu{a?亖 辋?4ǒ7欑珬漗u柇峣fI?洧?/b$4M+垑┨濏Go0.躈鎇陊綉蝠L?4??D(郩[葡N?aC~ |硭綴彵K2`MA62r?)?e"乫7~疑?\洀?崤慇?亖 渶fhg概*i?X??rb曚p0??餻l憣餌?Le???襰l/Mr葓鳲G!g雴?歴鵘蝏ぺ?O嶼\u錡l葫?聆R筘ㄕ舉i甖J?\右Y縦8跄鍽'杇亖 ?Of#zf?re?9?鸶钲筯榣sZ?Amx3r[

茍iH贘 =夘珩?鱆?x|y{偱?@8缳邏虼@砖UW噁~鎋藝d藹3€翁LνqE狢h? 钕┽叟f?_枭A.?3亐c*荬b贂b[桐F!糸Ys顝?雚×??

症塽?j{雗Ua础,`¥i飠wX+5区U狗l氏纖HEE/便麣h拍I?鳞;喳亙)4v広z????{塭邚鬄?

使用winhex复制16进制为:

308204BD020100300D06092A864886F70D0101010500048204A7308204A30201000282010100D6931904DEC60B24B1EDC762E0D9D8253E3ECD6CEB1DE2FF068CA8E8BCA8CD6BD3786EA70AA76CE60EBB0F993559FFD93E77A943E7E83D4B64B8E4FEA2D3E656F1E267A81BBFB230B578C20443BE4C7218B846F5211586F038A14E89C2BE387F8EBECF8FCAC3DA1EE330C9EA93D0A7C3DC4AF350220D50080732E0809717EE6A053359E6A694EC2CB3F284A0A466C87A94D83B31093A67372E2F6412C06E6D42F15818DFFE0381CC0CD444DA6CDDC3B82458194801B32564134FBFDE98C9287748DBF5676A540D8154C8BBCA07B9E247553311C46B9AF76FDEECCC8E69E7C8A2D08E782620943F99727D3C04FE72991D99DF9BAE38A0B2177FA31D5B6AFEE91F02010302820101008F0CBB589484076DCBF3DA41EB3BE56E297F339DF213ECAA045DC5F07DC5DE47E25049C4B1C4F34409D20A662391553B7EFA70D7EFF028DCEDD098A9C1E2998F4BEC451ABD2A76CB23A5D6AD827EDDA165D02F4E160E59F57B16345BD7297AFFB47F350A872D3C149775DBF1B7E06FD7E831F78AC15E355AAF774055BA0FF44575A286798E35C533B40276E44E5836A1DA7564ADFAF538A493A9BF10F213A657AC12291C1BE56997FC6AD27B99A7FC8977D2654CEBAA7C753B9CDA4C64671A8EE8FD476B7EE2C37E95579D70441E6FAB93A413AB664AC998FA25943F2B52C1F9C5EA64EF4A1BCA0149E717A214017896080C48A407DC4776CBDE96BD4CA1847B02818100EAC099171C9B95278C07BF9E974518855791769EA7B52BF6BA93E0D6A848C4A70D18A6E8A8A2DA5368676B33BEF298BB144D9AF8B5BBAD2246F42C2CCD7476EAB21BE14A771F92E7ADF600B5932AF747F7B9775587110AB0D8032318768B586AF17C6DC4FD40A8181E85876F5F0A2CBDBB03869F2179AB5570A7597A757B619B02818100E9FEF71934A8AF3799E712AB979D5E027596AD8D69156649961CE4A2AD082F186224344D2B888914A9CC9DED476F302EDC4EE65BEA77BD91F2F04C3F34BA09B6394428FBB4E0555BC6CF4EEC0E61437E00037CEDCB19BE598FB14B1732604D41363272FA3429E87F651D11228166377ED2C9A8190B5C9B8FDD2DE1C5029140CD028181009C80660F6867B8C508052A69BA2E1058E50BA469C52372A47C6295E47030831A08BB19F0706C918CF044F2227F4C65D20D8911FB23D2736C2F4D72C888F84F472167EB86FA150C9A73F955CE621CA4DAA5264F8E5A0B5C75E5576CBAF9B23AF1F652F3D8A8D5C56569AE5A4A3F5C1DD3D20259BF6BA67238F5C4E651A3A79667028181009BFF4F66231B1F7A669A0C7265139401A3B9C908F0B8EEDBB968986C735ACA10416D7833725B060DC6886948DA4A201F3D89EEE7F1A5290BF74ADD7F787C06797B82C5FD234038E7D9DF89F2B440D7A95557A89E87667EE65FCB8764CC403380CECC4CA6CD7145AA4368B61700EECFA9E1DBC5660793125FE8C9412E01B62B33028180632AADD91ADDA462D995A672625B05CDA94621F4E95973EE8F9A2DEB71A1C1AC1BD31A0DD6A28975871B6A7BEB6E5561B4A12C60A3A469EF7A77582B35C7F855B9B76CCACFC0774845FEA9452FB1E3A98C05FB9AA7526819C5C4498E0DC1DB1BA58A3BD4FB8183291E34768EDA7AB4058726FD1C8D147B8965DF8F15F39EBC37

testkey.x509.pem内容是:

-----BEGIN CERTIFICATE-----

MIIEqDCCA5CgAwIBAgIJAJNurL4H8gHfMA0GCSqGSIb3DQEBBQUAMIGUMQswCQYD

VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4g

VmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UE

AxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAe

Fw0wODAyMjkwMTMzNDZaFw0zNTA3MTcwMTMzNDZaMIGUMQswCQYDVQQGEwJVUzET

MBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4G

A1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9p

ZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASAwDQYJKoZI

hvcNAQEBBQADggENADCCAQgCggEBANaTGQTexgskse3HYuDZ2CU+Ps1s6x3i/waM

qOi8qM1r03hupwqnbOYOuw+ZNVn/2T53qUPn6D1LZLjk/qLT5lbx4meoG7+yMLV4

wgRDvkxyGLhG9SEVhvA4oU6Jwr44f46+z4/Kw9oe4zDJ6pPQp8PcSvNQIg1QCAcy

4ICXF+5qBTNZ5qaU7Cyz8oSgpGbIepTYOzEJOmc3Li9kEsBubULxWBjf/gOBzAzU

RNps3cO4JFgZSAGzJWQTT7/emMkod0jb9WdqVA2BVMi7yge54kdVMxHEa5r3b97s

zI5p58ii0I54JiCUP5lyfTwE/nKZHZnfm644oLIXf6MdW2r+6R8CAQOjgfwwgfkw

HQYDVR0OBBYEFEhZAFY9JyxGrhGGBaR0GawJyowRMIHJBgNVHSMEgcEwgb6AFEhZ

AFY9JyxGrhGGBaR0GawJyowRoYGapIGXMIGUMQswCQYDVQQGEwJVUzETMBEGA1UE

CBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMH

QW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAG

CSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbYIJAJNurL4H8gHfMAwGA1Ud

EwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHqvlozrUMRBBVEY0NqrrwFbinZa

J6cVosK0TyIUFf/azgMJWr+kLfcHCHJsIGnlw27drgQAvilFLAhLwn62oX6snb4Y

LCBOsVMR9FXYJLZW2+TcIkCRLXWG/oiVHQGo/rWuWkJgU134NDEFJCJGjDbiLCpe

+ZTWHdcwauTJ9pUbo8EvHRkU3cYfGmLaLfgn9gP+pWA7LFQNvXwBnDa6sppCccEX

31I828XzgXpJ4O+mDL1/dBd+ek8ZPUP0IgdyZm5MTYPhvVqGCHzzTy3sIeJFymwr

sBbmg2OAUNLEMO6nwmocSdN2ClirfxqCzJOLSDE4QyS9BAH6EhY6UFcOaE0=-----END CERTIFICATE-----

pem文件是openSSL生成的.但是跟keystore如何转换,不知道啊...

=============================================

新问题,签名一个68.2MB的apk,遇到的问题:

C:\>jarsigner -verbose -sigalg SHA1withDSA -digestalg SHA1 -keystore .keystore -storep

ass %PASSWORD% "test_unsignedk.apk"%ALIAS%

jarsigner: 无法对 jar 进行签名: java.util.zip.ZipException: invalid entry compressed size (expecte

d35608 but got 35781bytes)

C:\>

我看了一下,在apk里面的 META-INF\MANIFEST.MF 文件的大小刚刚好是35608。那么35781 又是那个获取的呢???

另外 MANIFEST.MF 文件如果缺失,也无法签名的,应该如何自动生成这个文件呢?

内容大致是:

Manifest-Version: 1.0Created-By:1.0(Android)

Name: assets/bin/Data/923d96261c2b64444b64f28a11275a11

SHA1-Digest: YymIJSZJWwGCNdyKcK+IbYQeXIs=Name: assets/bin/Data/b0d7c3ef6f82be742a2695674230c34e

SHA1-Digest: aUHI5vRckg5oZ4YRBtQuOn34xxo=.............

.............

使用signapk.jar 以及.pk8 .x509.pem 文件密钥 进行签名 却没有问题。

发愁啊!不知其根本,连其基本用法都搞不懂!

可以使用keystore文件,利用eclipse 工具的导出签名apk  来导出新的apk了。

java1.7 apk 签名_【keytool jarsigner工具的使用】Android 使用JDK1.7的工具 进行APK文件的签名,以及keystore文件的使用...相关推荐

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

    你看到的这个文章来自于http://www.cnblogs.com/ayanmw 一个android apk的编译过程 请参考: http://www.2cto.com/kf/201312/26147 ...

  2. 抖音高贵气质的签名_范冰冰无惧被点名封杀,带5千围巾高调走机场,签名姿态巨星范足...

    虽说被官媒正式点名封杀,但是范冰冰的复出之路依旧强势而高调,垫肩皮衣搭配阔腿裤造型走机场,非常霸气的机场造型.一身大牌傍身,还是钟爱这种奢华的风格,而且还有各种配饰仔细装点细节,对于形象保持看来是非常 ...

  3. 抖音高贵气质的签名_星光红毯众星被冻成红鼻头,杨幂冷到拒绝签名,肖战表情严肃...

    2020年新光大赏于12月20日开始,又一场红毯比拼开启.此次的举办地在南京,天气也挺冷的,明星们又面临着一次考验. 第一个登场亮相的人就是江疏影,在2020年<三十而已>的大爆,让江疏影 ...

  4. android签名文件查看工具,ionic 发布android,并查看签名文件。

    1. 生成android包文件 ionic cordova build android --release 这时候已经cd到你app的目录下面了,然后 2. 生成签名文件 keytool -genke ...

  5. 【Android 逆向】逆向修改游戏应用 ( APK 解析工具 | 解包 -> 分析 -> 重打包 -> 签名 流程 )

    文章目录 一.APK 解析工具 二.解包 -> 分析 -> 重打包 -> 签名 流程 一.APK 解析工具 使用 [Android 逆向]使用 Python 编写 APK 批处理分析 ...

  6. apk私钥_移动安全(二)|APK打包流程及签名安全机制初探

    0x00.今天我们聊什么? 今天我们聊些啥?许久不见,是该聊些啥了,话不多说,先来个五毛钱得,聊一聊胡小毛的Android逆向之路吧,当然,你们想知道的一定不是走了这么远的路,胡小毛今年是不是又长高了 ...

  7. ionic 安卓apk签名_安卓 APP 三代加壳方案的研究报告

    安卓的加固方案是从 19 年底开始写的,到现在为止差不多快一年了,写这个目的还是学习怎么脱壳,前几个月再看雪看到有人直接分析壳来学习,不过我感觉从加壳写起也是一种浪漫.因为个人原因,在类指令抽取壳那里 ...

  8. (转) Android生成签名文件并用其对apk文件进行签名

    最近编程时遇到问题:写了一个android小程序,打包后用apktool反编译再打包都没问题,安装时出现Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]错误 ...

  9. java 扫描 apk 安全性_五大APP安全在线检测平台对比

    Android APP本文作者:ice@DMZLab 最近一直在研究的检测,写了一个系列的文章――手工检测,自动化检测,常见漏洞分析.今天给大家带来的是自动化检测.本篇没有深入的讲解每一个漏洞的详情, ...

最新文章

  1. 正定小主人机器人_石家庄正定县2015中小学生机器人运动大赛隆重开幕
  2. SAP 不支持交货单中同一个物料多个行项目HU与序列号组合发货场景
  3. Struts2配置文件【代码库】
  4. 为何那么多移动互联网APP慢慢失败
  5. MD5加密方式-工具类
  6. 黄金分割小数点后100位小数的c语言编程,黄金分割数小数点后100位
  7. JS学习笔记4-JavaScript 注释
  8. OpenDaylight风头正劲,华三通信在其中大显身手
  9. 类比 -高速缓存Cache/内存/磁盘读写速度类比
  10. SAP 信息记录条件 无法维护多个条件
  11. OSChina 周五乱弹 —— 闹钟一响就睡觉
  12. 这些数据结构基本概念你晓得几个嘞?
  13. js中将从ajax获得的时间戳数字串转换成理解的时间格式
  14. linux快速解压缩,快速了解linux压缩与解压
  15. 程序员实现 财务自由的 40 个案例
  16. 弱加密算法有哪几种_不安全的加密算法有哪几种
  17. 【opencv3】滑动条调节RGB颜色阈值并输出滑动条的值
  18. Cosmos 白皮书
  19. 清华计算机全球第4!USNews计算机专业排名出炉,67所大陆高校上榜
  20. 博优商业管理系统SQL Anywhere(ASA) 数据库“File is shorter than expected -- transaction rolled back”错误修复

热门文章

  1. 3.4 Docker最新入门教程-Docker入门-共享应用程序
  2. navacate连接不上mysql_解决Navicat无法连接到MySQL
  3. 'org.apache.ibatis.session.defaults.DefaultSqlSessionFactory' to requir
  4. js点击删除最后一个元素节点
  5. 一个十年程序员写给大家的忠告
  6. 牛人林达华推荐有关机器学习的数学书籍
  7. 南栖仙策强化学习突破发表NeurIPS 2020论文
  8. 第四章 android 命名规范和编码规范
  9. 哈工大软件构造 复习
  10. 轻松矿工没有内核_使用内核迁移器可以轻松进行SharePoint迁移