让iis做跳转网站,佛山市城乡住房建设局网站,好用的在线代理网页,如何提升网站加载速度现在很多人想对Android工程的编译和打包进行自动化#xff0c;比如建立每日构建系统、自动生成发布文件等等。这些都需要我们对Android工程的编译和打包有一个深入的理解#xff0c;至少要知道它的每一步都做了什么#xff0c;需要什么环境和工具#xff0c;输入和输出是什… 现在很多人想对Android工程的编译和打包进行自动化比如建立每日构建系统、自动生成发布文件等等。这些都需要我们对Android工程的编译和打包有一个深入的理解至少要知道它的每一步都做了什么需要什么环境和工具输入和输出是什么。那么我们就来挖掘一下Android的编译过程中的细节。 首先我们假定你的系统什么系统都行不限于Linux还是Windows系统当然我在这里默认使用Linux系统来举例子但在 Windows中几乎没有什么差别已经安装了JDK和Android SDK。再假定你的Android SDK的路径是ANDROID_SDK_HOME你想要编译的Android OS版本是ANDROID_OS_VERSION比如android-1.6、android-8、android-10等。 我们重点关心的是1这个过程的输入是什么2这个过程的输出是什么3这个过程使用了什么工具至于使用什么参数可以自己去看对应命令的帮助文件或者在网上搜索这不是本文的重点。 步骤中提到的工具如下表 名称功能介绍在操作系统中的路径aaptAndroid资源打包工具${ANDROID_SDK_HOME}/platform-tools/apptaidlAndroid接口描述语言转化为.java文件的工具${ANDROID_SDK_HOME}/platform-tools/aidljavacJava Compiler${JDK_HOME}/javac或/usr/bin/javacdex转化.class文件为Davik VM能识别的.dex文件${ANDROID_SDK_HOME}/platform-tools/dxapkbuilder生成apk包${ANDROID_SDK_HOME}/tools/opkbuilderjarsigner.jar文件的签名工具${JDK_HOME}/jarsigner或/usr/bin/jarsignerzipalign字节码对齐工具${ANDROID_SDK_HOME}/tools/zipalign第一步打包资源文件生成R.java文件【输入】Resource文件就是工程中res中的文件、Assets文件相当于另外一种资源这种资源Android系统并不像对res中的文件那样优化它、AndroidManifest.xml文件包名就是从这里读取的因为生成R.java文件需要包名、Android基础类库Android.jar文件【输出】打包好的资源一般在Android工程的bin目录可以看到一个叫resources.ap_的文件就是它了、R.java文件在gen目录中大家应该很熟悉了【工具】aapt工具它的路径在${ANDROID_SDK_HOME}/platform-tools/aapt如果你使用的是Windows系统按惯例路径应该这样写%ANDROID_SDK_HOME%\platform-tools\aapt.exe下同。 第二步处理AIDL文件生成对应的.java文件当然有很多工程没有用到AIDL那这个过程就可以省了【输入】源码文件、aidl文件、framework.aidl文件【输出】对应的.java文件【工具】aidl工具 第三步编译Java文件生成对应的.class文件【输入】源码文件包括R.java和AIDL生成的.java文件、库文件.jar文件【输出】.class文件【工具】javac工具 第四步把.class文件转化成Davik VM支持的.dex文件【输入】 .class文件包括Aidl生成.class文件R生成的.class文件源文件生成的.class文件库文件.jar文件【输出】.dex文件【工具】javac工具 第五步打包生成未签名的.apk文件【输入】打包后的资源文件、打包后类文件.dex文件、libs文件包括.so文件当然很多工程都没有这样的文件如果你不使用C/C开发的话【输出】未签名的.apk文件【工具】apkbuilder工具 第六步对未签名.apk文件进行签名【输入】未签名的.apk文件【输出】签名的.apk文件【工具】jarsigner 第七步对签名后的.apk文件进行对齐处理不进行对齐处理是不能发布到Google Market的【输入】签名后的.apk文件【输出】对齐后的.apk文件【工具】zipalign工具 知道了这些细节之后我们就可以实现很多我们想实现东西了比如自动化我们可以使用某种脚本像Windows下的批处理linux下的BashJava下的AntPython、Perl这样的脚本语言甚至直接用Java、.net这们的强类型语言也是可以的。如果你真正弄懂了上面的步骤了解了编译打包过程的本质你完全可以以你想要的任何方式实现它的自动化这才是真正的“举一反三以不变应万变”。再比如对Android SDK的精简大家知道现在Android SDK动辙几百兆我们完全可以应用上面的知识只保留必要的工具把SDK精简到10M以下。当然还可以做很多事情前提是你真正弄懂了它。 转载于:https://www.cnblogs.com/wd-one/p/4724774.html