1 首先一个android项目生成的文件如图所示:
androidManifest文件:android项目的配置文件包括软件包、系统版本、程序组件、运行权限等。
res:资源文件:drawable文件夹下的图标资源、layout子目录下的布局资源、values目录下的字符串资源等
bin:存放最后生成的APk文件夹
src:按包名组织的源码文件
assets/:程序需要使用的其他文件,例如额外的数据和可执行文件等
properties:Eclipse 使用的项目配置文件
另外如果程序中使用链接库则会另有文件夹
jni/:NDK 开发的 C/C++ 源码,和 Makefile 文件
lib/:NDK 编译得到的 ELF 文件
********************************分割线***************************************************
分析完项目文件结构后我们来分析项目编译过程:
一 manifest和resource asset一起编译生成资源包文件r.java。
二 编译本地库文件
使用 NDK 中的工具链,将jni/目录下的 C/C++ 源文件,根据Makefile中的规则编译为 ELF 动态链接库文件,放到lib/目录下。扩展名为SO文件。由于本例子没有库文件。所以本步骤略。
三 编译 Java 源码:使用 Java SDK 中的javac,将源文件、SO文件、资源文件,一起打包成.class文件
javac:javac 是javac语言编程编译器。javac工具由java语言编写的类和接口的定义,并将它们编译成字节代码的class文件。也就是java虚拟机读写的指令码文件。
Javac的资料:
本例子中:由于没有库文件,将资源文件和源文件进行编译成资源文件。
四、生成 DEX 文件:使用 SDK 中的dx,将所有.class文件转换为一个classes.dex文件,即android虚拟机所执行指令代码。
如图所示DX命令格式
生成完的包文件
五 生成资源文件
使用SDK提供的aapt工具,根据参数将manifest\res\assets\ 文件生成resources资源文件。
六、资源文件包和dex类文件包进行打包成APK
七、最后一步签名APK文件
所有的APK文件必须签名,android的APK文件是自签名的,不是经过官方验证的签名。如果尝试安装一个没有签名的APK会报错的
签名是分:调试版和发布版的
Eclipse生成的apk都是经过调试版签名的。这样的程序是不允许发布的官方市场的,如果想发布,必须有自己的一个签名。才可以发布。本文介绍一下如何签名
用到的 工具是
keytool 生成数字证书
jarsigner 根据数字证书签名APK文件
keytool 工具
keytool -genkey -v -keystore zhangxueyi.keystore -alias zhangxueyi.keystore -keyalg RSA -validity 20000
说明:
)keytool是工具名称,-genkey意味着执行的是生成数字证书操作,-v表示将生成证书的详细信息打印出来,显示在dos窗口中;
2)-keystore zhangxueyi.keystore 表示生成的数字证书的文件名为“lzhangxueyi.keystore”;
3)-alias zhangxueyi.keystore 表示证书的别名为“zhangxueyi.keystore”,当然可以不和上面的文件名一样;
4)-keyalg RSA 表示生成密钥文件所采用的算法为RSA;
5)-validity 20000 表示该数字证书的有效期为20000天,意味着20000天之后该证书将失效.
好根据这个生成数字证书
OK,数字证书生成完毕
接下来用jarsigner 工具来签名文件,如何查看APK是否签名呢?
$ jarsigner -verifymy_signed.apk
用这个命令查看是否签名如果未签名则显示no manifest.
如果已经签名,显示 jar is unsigned
可见此程序(0806test.apkl)还没有签名
接下来签名此文件
Ok签名成功。。。下面我们来验证一下吧
Ok!!!!
签名的参考文章。
总结:
1、生成资源类文件
2、编译本地库文件
3、编译源码文件、资源类文件、本地库文件生成..class文件
4、用DX工具将..class转换为android指向的DX文件
5、用AAPt工具编译资源文件生成resources文件
6、这一步就是打包资源文件盒dex文件生成APK文件
7、签名APK文件 以便发布APK文件
本文为我亲身试验的过程,这也就是android项目的完整编译过程。本人知识有限,如有不对的地方,望高手指出,感激不尽。