`
king_tt
  • 浏览: 2267233 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android 项目编译过程

 
阅读更多

Android 工程构建的持续集成,需要搭建一套编译和打包自动化流程,比如建立每日构建系统、自动生成发布文件等等。这些都需要我们对Android工程的编译和打包有一个比较深入的理解,例如知道它的每一步都做了什么,需要什么环境和工具,输入和输出是什么,等等。


首先,假定你的系统(Windows、Linux、Mac OS都行,本文默认使用Linux系统来举例子,但在 Windows中几乎没有什么差别)已经安装了JDK和Android SDK, 如果没有安装,可以参考我先前的博客: Ubuntu搭建Eclipse+JDK+SDK的AndroidWindows搭建Eclipse+JDK+SDK的Android

再假定你的Android SDK的路径是ANDROID_SDK_HOME,你想要编译的Android OS版本是ANDROID_OS_VERSION(比如android-1.6、android-8、android-10等)。

我们重点关心的是:

(1)这个过程的输入是什么?

(2)这个过程的输出是什么?

(3)这个过程使用了什么工具?

至于使用什么参数,可以自己去看对应命令的帮助文件,或者在网上搜索,这不是本文的重点。




提前列出下列步骤中需要用到的工具,如下表:

名称 功能介绍 在操作系统中的路径
aapt Android资源打包工具 ${ANDROID_SDK_HOME}/platform-tools/appt
aidl Android接口描述语言转化为.java文件的工具 ${ANDROID_SDK_HOME}/platform-tools/aidl
javac Java Compiler ${JDK_HOME}/javac或/usr/bin/javac
dex 转化.class文件为Davik VM能识别的.dex文件 ${ANDROID_SDK_HOME}/platform-tools/dx
apkbuilder 生成apk包 ${ANDROID_SDK_HOME}/tools/opkbuilder
jarsigner .jar文件的签名工具 ${JDK_HOME}/jarsigner或/usr/bin/jarsigner
zipalign 字节码对齐工具 ${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文件
【工具】dex工具


第五步:打包生成未签名的.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以下。当然,还可以做很多事情,前提是你真正弄懂了它。



参考推荐:

Android 工程的编译过程

Android使用ANT打包,签名,混淆


分享到:
评论

相关推荐

    Android项目编译系统

    二、Android项目编译过程: 1. 环境准备:开发Android应用需要先在开发机上配置好Android SDK和NDK环境。 2. 编写源代码:开发者需要使用Java或Kotlin编写应用的主要逻辑,并用XML编写界面布局。 3. 编写...

    Android编译过程详解

    Android 编译过程是 Android 开源项目中的一部分,了解 Android 编译过程对于理解 Android 系统的工作机理和对其进行定制至关重要。 Android 的编译过程可以分为三个阶段:环境变量设置、平台编译选项选择和编译执行...

    Android Studio编译过程太慢的解决方法

    ### Android Studio编译过程太慢的解决方法 在Android开发过程中,经常遇到的一个问题就是编译速度过慢,这不仅降低了开发效率,还可能影响到团队的合作进度。本文将详细介绍如何通过配置Gradle来优化Android ...

    编译Android源码全过程

    Repo是一个由Android项目团队编写的Python脚本,用于统一管理多个项目的仓库。通过Repo脚本,可以简化获取Android源代码的过程。安装步骤如下: 1. **下载Repo脚本**: ```bash curl ...

    android编译过程详解

    ### Android编译过程详解 #### 一、概览 Android作为一个全球范围内广泛应用的操作系统平台,其内部机制和构建流程对于开发者来说非常重要。本文将以Android 2.1版本为基础,使用华清远见研发的FS_S5PC100A8开发板...

    PCL for Android 编译过程遇到的问题及办法

    ### PCL for Android 编译过程遇到的问题及解决办法 #### 环境配置与工具安装 在开始PCL(Point Cloud Library)for Android的编译之前,首先需要准备一些必要的开发环境和工具: 1. **CMake安装**:CMake是一种...

    Android项目编译系统.doc

    三 Android项目编译系统修改方案 修改Android项目编译系统通常涉及以下几个方面: 1. 修改`buildspec.mk`和`envsetup.mk`:这两个文件定义了编译环境的设置和特定设备的配置。在`buildspec.mk`中,可以调整构建...

    android4.2编译过程

    ### Android 4.2 编译过程解析 #### 核心知识点概览 - **编译环境设置**:包括目标架构、操作系统版本等。 - **编译参数详解**:了解不同参数的作用及其如何影响编译过程。 - **编译过程中遇到的问题及解决方案**...

    使用Android NDK编译Android平台的eXosip库

    5. **编译过程**:运行`./gradlew build`命令,Android Studio将调用NDK进行编译。这个过程将生成适用于不同架构的`.so`文件,它们是eXosip的动态库。 6. **静态库编译**:如果需要静态库,可以在Android.mk中添加`...

    反编译Android项目

    下面我们将详细探讨反编译Android项目的过程、工具以及注意事项。 首先,我们需要了解反编译的基本流程。Android应用程序通常以APK格式发布,这是一种包含了Dalvik字节码(DEX文件)和资源文件的打包格式。反编译...

    zbar android源码编译

    第二步,“使用NDK-R9可直接编译生成zbar的库”,这表明了特定版本的NDK(在本例中是R9)是编译过程的关键。NDK的每个版本可能会有不同的API级别支持和编译器特性,因此选择一个兼容的版本很重要。NDK-R9是较旧的一...

    SQLCipher_for_Android_source_build_源码编译过程

    标题《SQLCipher_for_Android_source_build_源码编译过程》和描述《SQLCipher_for_Android_sourcebuild_源码编译过程》指向了一个关于如何在Android平台上构建SQLCipher源码的过程。SQLCipher是一个开源的数据库加密...

    android P android9源码编译.ipr.iml文件

    总的来说,`.ipr`和`.iml`文件在Android P源码编译过程中起着关键作用,它们帮助开发者在Android Studio环境中高效地管理和编译大规模的源代码项目。通过理解这些文件的作用,开发者可以更流畅地进行源码级别的调试...

    Android 源码编译过程

    Repo是Google为管理Android项目而开发的一个工具,它基于Git。首先,下载Repo脚本并使其可执行: ```bash mkdir -p ~/bin curl http://android.git.kernel.org/repo > ~/bin/repo chmod a+x ~/bin/repo ``` ...

    android反编译资源获取

    此外,反编译过程也可能导致资源文件格式的丢失或破坏,因此在提取和修改资源时需谨慎操作。 总的来说,APKTool是Android开发者和逆向工程师的利器,它提供了强大的资源文件提取和反编译能力,帮助我们更好地理解和...

    android Qt 编译

    编译过程中,Qt会生成一个Android项目结构,包括源代码、资源和配置文件。 4. **生成APK**:编译成功后,你需要使用Android SDK的`androiddeployqt`工具将Qt项目打包成APK。在命令行中,导航到项目目录的`release`...

    X264静态库 android平台编译

    以下将详细介绍如何进行编译过程。 ### 1. 准备环境 首先,你需要一个装有Android NDK的开发环境。Android NDK是Android开发工具集的一部分,它允许你在C或C++中编写部分应用程序,并在Android设备上运行。确保...

    android反编译工具包

    总的来说,"android反编译工具包"是Android开发者不可或缺的利器,它可以帮助我们深入理解应用程序的工作原理,提高开发效率,同时在维护和优化项目时提供有力的支持。不过,使用这些工具时,一定要遵守相关法律法规...

Global site tag (gtag.js) - Google Analytics