企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
#### **Android 打包应用程序并安装的过程** 目前,是使用**Eclipse编译工具打包安装APK的过程分析**,至于使用AndroidStudio的过程可以参考 :-: ![](https://box.kancloud.cn/350b2d3af15a6a088018a32426d639ef_762x200.png) 图1 Android 打包应用程序并安装的过程 1. 拷贝apk文件到 /data/app/xx.apk 2. 写注册表 /data/system/package.xml packages.list #### **Eclipse对安卓测试程序启动过程** **程序**: * adt: android develop tools (eclipse的一个插件) * ddms : dalvik debug manager system * adb.exe android debug bridge android调试桥 * aapt.exe android application package tools android程序打包工具 1. Eclipse将.java源文件编译成.class 2. 使用dx工具将所有.class文件转换为.dex文件 3. 再将.dex文件和所有资源打包成.apk文件 4. 将.apk文件安装到虚拟机完成程序安装 5. 启动程序 – 开启进程 – 开启主线程 6. 创建Activity对象 – 执行OnCreate()方法 7. 按照main.xml文件初始化界面 #### **工程编译步骤** 步骤中提到的工具如下表: ![](https://box.kancloud.cn/4131d904339fda67b3dd4705a54657f5_662x244.jpg) * **第一步:打包资源文件,生成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下的Bash,Java下的Ant,Python、Perl这样的脚本语言,甚至直接用Java、.net这们的强类型语言也是可以的。**如果你真正弄懂了上面的步骤,了解了编译打包过程的本质,你完全可以以你想要的任何方式实现它的自动化,这才是真正的“举一反三,以不变应万变”**。再比如,**对Android SDK的精简**,大家知道,现在Android SDK动辙几百兆,我们完全可以应用上面的知识,只保留必要的工具,把SDK精简到10M以下。当然,还可以做很多事情,前提是你真正弄懂了它。