android项目编译过程---详细分析与实例

来源:互联网 发布:算法设计的基本要素 编辑:程序博客网 时间:2024/04/28 19:49

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的资料:http://www.cnblogs.com/JeffChen/archive/2008/01/16/1041783.html

本例子中:由于没有库文件,将资源文件源文件进行编译成资源文件。


四、生成 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
  
说明:
      1
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!!!!

http://www.cnblogs.com/jacktu/archive/2009/02/09/1386842.html 签名的参考文章。

    总结:

1、生成资源类文件

2、编译本地库文件

3、编译源码文件、资源类文件、本地库文件生成..class文件

4、用DX工具将..class转换为android指向的DX文件

5、用AAPt工具编译资源文件生成resources文件

6、这一步就是打包资源文件盒dex文件生成APK文件

7、签名APK文件 以便发布APK文件

本文为我亲身试验的过程,这也就是android项目的完整编译过程。本人知识有限,如有不对的地方,望高手指出,感激不尽微笑





原创粉丝点击