`
huangqinqin
  • 浏览: 367344 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

Android编译全过程

阅读更多
转载至: http://dev.10086.cn/cmdn/wiki/index.php?doc-view-3882.html



编译环境:ubuntu9.10,widnows平台目前不被支持。

安装必要的软件环境
  $ sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev

  官方推荐的就是上面这些,如果在编译过程中发现某些命令找不到,就apt-get它。可能需要的包还有:

  $ sudo apt-get install make

  $ sudo apt-get install gcc

  $ sudo apt-get install g++

  $ sudo apt-get install libc6-dev

  $ sudo apt-get install patch

  $ sudo apt-get install texinfo

  $ sudo apt-get install zlib1g-dev

  $ sudo apt-get install valgrind

  $ sudo apt-get install python2.5(或者更高版本)

  需要注意的是,官方文档说如果用sun-java6-jdk可出问题,得要用sun-java5- jdk。经测试发现,如果仅仅make(make不包括make sdk),用sun-java6-jdk是没有问题的。而make sdk,就会有问题,严格来说是在make doc出问题,它需要的javadoc版本为1.5。

  因此,我们安装完sun-java6-jdk后最好再安装sun-java5-jdk,或者只安装sun-java5-jdk。这里sun-java6-jdk和sun-java5-jdk都安装,并只修改javadoc.1.gz和javadoc。因为只有这两个是make sdk用到的。这样的话,除了javadoc工具是用1.5版本,其它均用1.6版本:

  $ sudo apt-get install sun-java6-jdk

  修改javadoc的link

  $ cd /etc/alternatives

  $ sudo rm javadoc.1.gz

  $ sudo ln -s /usr/lib/jvm/java-1.5.0-sun/man/man1/javadoc.1.gz javadoc.1.gz

  $ sudo rm javadoc

  $ sudo ln -s /usr/lib/jvm/java-1.5.0-sun/bin/javadoc javadoc

设置环境变量
    $ emacs ~/.bashrc

  在.bashrc中新增或整合PATH变量,如下:

  #java 程序开发/运行的一些环境变量

  JAVA_HOME=/usr/lib/jvm/java-6-sun

  JRE_HOME=${JAVA_HOME}/jre

  export ANDROID_JAVA_HOME=$JAVA_HOME

  export CLASSPATH=.:${JAVA_HOME}/lib:$JRE_HOME/lib:$CLASSPATH

  export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin

  export JAVA_HOME;

  export JRE_HOME;

  export CLASSPATH;

  HOME_BIN=~/bin/

  export PATH=${PATH}:${JAVA_PATH}:${HOME_BIN};

  保存后,同步更新:

  source ~/.bashrc

安装repo(用来更新android源码)
  创建~/bin目录,用来存放repo程序,如下:

  $ cd ~

  $ mkdir bin

  并加到环境变量PATH中,在第2步中已经加入

  下载repo脚本并使其可执行:

  $ curl http://android.git.kernel.org/repo >~/bin/repo

  $ chmod a+x ~/bin/repo

初始化repo
  repo是android对git的一个封装,简化了一些git的操作。

  创建工程目录:

  $ mkdir android

  $ cd android

  repo初始化

  $ repo init -u git://android.git.kernel.org/platform/manifest.git

  在此过程中需要输入名字和email地址。初始化成功后,会显示:

  repo initialized in /android

  在~/android下会有一个.repo的隐藏目录。

同步源代码
  $ repo sync

  这一步要很久很久

编译android源码
并得到~/android/out目录

  $ cd ~/andoird

  $ make

  这一过程很久

在模拟器上运行编译好的android
  编译好android之后,emulator在~/android/out/host /linux-x86/bin下,ramdisk.img,system.img和userdata.img则在~/android/out /target/product/generic下

  $ cd ~/android/out/host/linux-x86/bin

  增加环境变量

  $ emacs ~/.bashrc

  在.bashrc中新增环境变量,如下

  #java 程序开发/运行的一些环境变量

  export ANDROID_PRODUCT_OUT=~/android/out/target/product/generic

    ANDROID_PRODUCT_OUT_BIN=~/android/out/host/linux-x86/bin

  export PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN}:${ANDROID_PRODUCT_OUT};

  最后,同步这些变化:

  $ source ~/.bashrc

  $ cd ~/android/out/target/product/generic

  $ emulator -system system.img -data userdata.img -ramdisk ramdisk.img

  最后进入android桌面,就说明成功了。

编译模块
  android中的一个应用程序可以单独编译,编译后要重新生成system.img

  在源码目录下执行

  $ . build/envsetup.sh (.后面有空格)

  就多出一些命令:

  - croot: Changes directory to the top of the tree.

  - m: Makes from the top of the tree.

  - mm: Builds all of the modules in the current directory.

  - mmm: Builds all of the modules in the supplied directories.

  - cgrep: Greps on all local C/C++ files.

  - jgrep: Greps on all local Java files.

  - resgrep: Greps on all local res/*.xml files.

  - godir: Go to the directory containing a file.

  可以加—help查看用法

  我们可以使用mmm来编译指定目录的模块,如编译联系人:

  $ mmm packages/apps/Contacts/

  编完之后生成两个文件:

  out/target/product/generic/data/app/ContactsTests.apk

  out/target/product/generic/system/app/Contacts.apk

  可以使用

  $ make snod

  重新生成system.img,再运行模拟器

编译SDK
  直接执行make是不包括make sdk的。make sdk用来生成SDK,这样,我们就可以用与源码同步的SDK来开发android了。

  a)修改/frameworks/base/include/utils/Asset.h

  ‘UNCOMPRESS_DATA_MAX = 1 * 1024 * 1024’ 改为 ‘UNCOMPRESS_DATA_MAX = 2 * 1024 * 1024’

  原因是eclipse编译工程需要大于1.3M的buffer;

  b)编译ADT。

  由于本人不使用eclipse,所以没有进行这步;

  c)执行make sdk。

  注意,这里需要的javadoc版本为1.5,所以你需要在步骤1中同时安装sun-java5-jdk

$ make sdk

  编译很慢。编译后生成的SDK存放在out/host/linux-x86/sdk/,此目录下有android-sdk_eng.xxx_linux- x86.zip和android-sdk_eng.xxx_linux-x86目录。android-sdk_eng.xxx_linux-x86就是 SDK目录

  实际上,当用mmm命令编译模块时,一样会把SDK的输出文件清除,因此,最好把android-sdk_eng.xxx_linux-x86移出来

  此后的应用开发,就在该SDK上进行,所以把7)对于~/.bashrc的修改注释掉,增加如下一行:

  export PATH=${PATH}:~/android/out/host/linux-x86/sdk/android-sdk_eng.xxx_linux-x86/tools

  注意要把xxx换成真实的路径;

  d)关于环境变量、android工具的选择

  目前的android工具有:

  A、我们从网上下载的SDK,如果你下载过的话( tools下有许多android工具,lib/images下有img映像)

  B、我们用make sdk编译出来的SDK( tools下也有许多android工具,lib/images下有img映像)

  C、我们用make编译出来的out目录( tools下也有许多android工具,lib/images下有img映像)

  那么我们应该用那些工具和img呢?

  首先,我们一般不会用A选项的工具和img,因为一般来说它比较旧,也源码不同步。其次,也不会用C选项的工具和img,因为这些工具和img没有经过 SDK的归类处理,会有工具和配置找不到的情况;事实上,make sdk产生的很多工具和img,在make编译出来out目录的时候,已经编译产生了,make sdk只是做了copy而已。

  e)安装、配置ADT

  略过;

  f)创建Android Virtual Device

  编译出来的SDK是没有AVD(Android Virtual Device)的,我们可以通过android工具查看:

  $ android list

  创建AVD:

  $ android create avd -t 1 -n myavd

  可以android ?help来查看上面命令选项的用法。创建中有一些选项,默认就行了

  再执行android list,可以看到AVD存放的位置

  以后每次运行emulator都要加-avd myavd或@myavd选项:

  $ emulator -avd myavd

 

编译linux内核映像
  a)准备交叉编译工具链

  android代码树中有一个prebuilt项目,包含了我们编译内核所需的交叉编译工具。

  b)设定环境变量

  $ emacs ~/.bashrc

   增加如下两行:

  export PATH=$PATH:~/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin

  export ARCH=arm

  保存后,同步变化:

  $ source ~/.bashrc

  c)获得合适的内核源代码

  $ cd ~/android

  获得内核源代码仓库

  $ git clone git://android.git.kernel.org/kernel/common.git kernel

  $ cd kernel

  $ git branch

  显示

  * android-2.6.27

  说明你现在在android-2.6.27这个分支上,也是kernel/common.git的默认主分支。

  显示所有head分支:

  $ git branch -a

  显示

  * android-2.6.27

  remotes/origin/HEAD -> origin/android-2.6.27

  remotes/origin/android-2.6.25

  remotes/origin/android-2.6.27

  remotes/origin/android-2.6.29

  remotes/origin/android-goldfish-2.6.27

  remotes/origin/android-goldfish-2.6.29

  我们选取最新的android-goldfish-2.6.29,其中goldfish是android的模拟器模拟的CPU。

  $ git checkout -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29

  $ git branch

  显示

  android-2.6.27

  * android-goldfish-2.6.29

  我们已经工作在android-goldfish-2.6.29分支上了。

  d)设定交叉编译参数

  打开kernel目录下的Makefile文件,把CROSS_COMPILE指向刚才下载的prebuilt中的arm-eabi编译器

  CROSS_COMPILE ?= arm-eabi-

  把LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,$(call ld-option, -Wl$(comma)?build-id,))

  这一行注释掉,并且添加一个空的LDFLAGS_BUILD_ID定义,如下:

  LDFLAGS_BUILD_ID =

  e)编译内核映像

  $ cd ~/android/kernel

  $ make goldfish_defconfig

  $ make

  f)测试生成的内核映像

  $ emulator -avd myavd -kernel ~/android/kernel/arch/arm/boot/zImage
分享到:
评论

相关推荐

    编译Android源码全过程

    ### 编译Android源码全过程详解 #### 一、获取Android源代码 在开始编译Android源码之前,首先需要确保获取完整的Android源代码。这一部分将详细介绍如何使用Git和Repo脚本完成这一任务。 ##### Git简介 Git是一...

    Ubuntu_10.04下编译Android源码全过程

    ### Ubuntu 10.04下编译Android源码全过程详解 #### 一、获取Android源代码 在Ubuntu 10.04环境下编译Android源码的第一步是从官方仓库获取完整的源代码。这一过程主要依赖于Git,一种由Linux之父Linus Torvalds...

    Ubuntu平台下Android2.3源码下载编译全过程

    在Ubuntu平台上编译Android 2.3源码是一项复杂的过程,需要遵循一系列步骤。首先,确保你的系统满足必要的要求,即运行Ubuntu 10.04或更新版本,并且是64位系统。同时,安装Java Development Kit (JDK) 1.6或更高...

    编译 android 全过程

    ### 编译 Android 全过程详解 #### 一、获取 Android 源代码 在开始编译 Android 源码之前,第一步自然是获取完整的源代码。对于 Ubuntu 10.04 这样的 Linux 发行版,有几种方法可以获得源码,其中最常见的是使用 ...

    高通搭建android编译环境的方法

    本文档涵盖了从环境搭建到Android系统编译以及固件刷写等全过程。 在环境搭建环节,文档首先指导用户准备所需的设备和软件。其中,Ubuntu操作系统是推荐使用的平台,因此需要在计算机上安装Ubuntu系统。此外,若...

    Android反编译全套工具

    在Android开发过程中,有时我们需要对已有的APK应用进行反编译,以便了解其工作原理、查看源代码或进行二次开发。"Android反编译全套工具"是一个集合了多种工具的压缩包,提供了完整的反编译流程支持,包括APK的拆解...

    X264静态库 android平台编译

    **X264静态库在Android平台上的编译详解** X264是一个开源的H.264视频编码库,广泛应用于视频编码、转码和流媒体领域。在Android平台上,为了在不同架构(如ARM32, ARM64, x86)上运行,需要将X264编译为静态库。...

    Android MP4v2 编译全类型so文件

    本篇将详细介绍如何在Android环境中编译MP4v2库,生成适用于不同架构的.so文件,以满足跨平台的需求。 首先,我们需要了解MP4v2库的基本概念。MP4v2,全称为ISO Base Media File Format,是基于MPEG-4标准的一个...

    Ubuntu 8.04下编译Android源码全过程.doc

    ### Ubuntu 8.04下编译Android源码全过程知识点详解 #### 一、获取Android源代码 在本文档中,介绍了如何在Ubuntu 8.04系统环境下获取Android源代码的过程。此过程主要涉及到了Git版本控制系统的使用以及Repo脚本...

    SQLCipher_for_Android_source_build_源码编译过程

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

    ubuntu 安装,android4源代码下载编译全过程

    ubuntu 安装,android4源代码下载编译全过程

    Ubuntu 10.04下编译Android源码全过程

    在Ubuntu 10.04环境下编译Android源码的过程是一项复杂的任务,涉及到多个步骤和技术。首先,要了解Git,这是一个分布式版本控制系统,由Linux Torvalds创建,用于管理Linux内核开发。与传统的集中式版本控制系统如...

    Ubuntu10.04下编译Android源码全过程.pdf

    ### Ubuntu 10.04 下编译 Android 源码全过程详解 #### 一、获取 Android 源代码 **Git与集中式版本控制系统对比** - **Git**:由 Linux Torvalds 开发,是一种分布式版本控制系统。与 Subversion 和 CVS 这样的...

    Android源码从下载到编译全过程

    ### Android源码从下载到编译全过程 #### 一、环境搭建 在开始介绍如何从零开始搭建Android系统开发环境并完成源码的下载及编译前,我们需要明确几个关键点: 1. **操作系统**: 本教程适用于Ubuntu 10.04 x86 32...

    编译Android过程

    本篇文章将详细介绍从建立编译环境到最终生成APK的全过程。 #### 二、编译前准备 ##### 1. 安装Ubuntu Linux操作系统 - **获取Ubuntu ISO镜像**:首先需要从官方服务器下载Ubuntu 8.04.1版本的ISO镜像文件,例如...

    史上最详细android4.4源码下载和编译全过程

    史上最详细的android4.4源码下载和编译过程,文档每个步骤都采用图解的方式详细讲解以及错误的解决方案。包括了最新版的android4.4的源码下载,编译和vm安装,ubuntu12.04的安装,很详细,很详细。文档见。

    android反编译全套工具

    这通常涉及到反编译过程。本文将详细介绍三个关键的Android反编译工具:Apktool、AXMLPrinter和dex2jar。 首先,Apktool(在压缩包中为apktool2.2.1)是一款强大的工具,由IzzySoft开发,主要用于反编译APK文件。它...

    (修正的)Ubuntu_10.04下编译Android源码全过程.doc

    ### Ubuntu 10.04 下编译 Android 源码全过程详解 #### 一、获取 Android 源代码 1. **Git 的介绍与安装**: - Git 是一种分布式版本控制系统,由 Linux Torvalds 为了更好地管理 Linux 内核开发而创建。 - **...

Global site tag (gtag.js) - Google Analytics