Ubuntu 10.04(64位)下载并编译 Android 2.2 源码

Ubuntu 10.04(64位)下载并编译 Android 2.2 源码
Ubuntu 10.04(64位)下载并编译 Android 2.2 源码

Ubuntu 10.04(64位)下载并编译Android 2.2 源码[只有11条命令]

为了方便,我把所有操作写成了命令,按顺序(软件安装--源码下载--编译)执行成功即可:

1. sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev

libx11-dev lib32readline5-dev lib32z-dev java-common unixodbc

2. sudo apt-get install sun-java6-jdk

3. cd

4. mkdir -p software/bin

5. curl https://www.360docs.net/doc/b08034799.html,/repo >software/bin/repo

6. chmod a+x software/bin/repo

7. mkdir -p software/android/src/new

8. cd software/android/src/new

9. repo init -u git://https://www.360docs.net/doc/b08034799.html,/platform/manifest.git -b froyo

10. repo sync

11. make -j4

=========================================================== ======================================================== 1.前言

本文叙述了如何从零开始搭建基于Google官方Android 2.2.1(froyo)源码的开发环境,包括如何下载源代码、编译源代码,以及在模拟器中运行编译生成的镜像。文中开发机是基于Ubuntu 10.04的,同样适用于其他版本的Ubuntu。现在需要弄清楚一下几点,防止后面出现误操作:下载源代码是用参数:repo init -u git://https://www.360docs.net/doc/b08034799.html,/platform/manifest.git -b froyo(下载的是2.2.1版本,编译环境操作系统必须是32位的,jdk1.5版本的---jdk1.5没有64位版本)。如果是没有带参数的下载源代码,将会下载所有的源代码,编译环境要求:操作系统64位,jdk1.6,(偶是2010年10月15日做)但很有可能会出现交叉编译工具错误:“/bin/bash:

prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-gcc: 没有那个文件或目录”(实际上是有arm-eabi-gcc这个文件的,偶怀疑是版本问题--32位的,而环境要求是64位的—-- 下载全部代码)

2. 下载JDK 1.5 (不建议此下载方式,防止配置环境参数出错。建议用apt-get install方式,请跳转到:第4步)

编译Android源码需要JDK1.5版(主要是需要其中的javadoc),1.6版是不兼容的。JDK1.5已经停止支持,其最终的版本是JDK 5.0 Update 22。

可从Sun官网上下载:

https://www.360docs.net/doc/b08034799.html,/javase/downloads/5u22/jdk

选择平台Linux,勾选同意许可协议:

单击Continue,在弹出的页面中一共有两个下载,选第一个

jdk-1_5_0_22-linux-i586.bin下载:

3. 部署JDK 1.5

3.1 解压缩JDK

以下命令均在root账户上执行,非root账户执行某些命令可能需要加sudo。将jdk-1_5_0_22-linux-i586.bin放在root目录下。进入该目录:

cd ~

然后赋予该bin文件可执行属性:

chmod +x jdk-1_5_0_22-linux-i586.bin

再执行安装(注意前面有./):

./jdk-1_5_0_22-linux-i586.bin

跳过协议阅读。

最后一行:

Do you agree to the above license terms? [yes or no]

键入yes,然后回车,开始解压。默认会解压到当前目录下的jdk1.5.0_22目录下(此处是~/ jdk1.5.0_22)。

3.2 JDK版本切换

如果同时需要使用JDK1.6版做应用开发,则系统中将同时存在JDK1.5和JDK1.6。因此需要实现能够在不同版本间切换。如果不使用JDK1.6,请做完1.5版的设置后跳至3.3节。

这里使用update-alternatives命令实现。

首先为JDK1.5版生成可选配置选项:

update-alternatives --install /usr/bin/jdk jdk /root/jdk1.5.22 255 (sudo update-alternatives --install /usr/bin/jdk jdk

/home/ynb/jdk1.5.0_22 255)

/usr/bin/jdk是符号链接,它指向/etc/alternatives/jdk(由第2个参数给出的),/root/jdk1.5.22(/home/ynb/jdk1.5.0_22)是实际目的链接,255是优先级(任意整数,在automatic mode自动模式时,数字大的优先级较高,被选为默认配置选项)。

然后再为JDK1.6版生成(如果有JDK1.6的话。不使用JDK1.6的请跳至3.3节):

update-alternatives --install /usr/bin/jdk jdk /root/jdk1.6.20 0

这样,默认jdk版本即为1.5版。需要切换到1.6版时,请使用

update-alternatives –config jdk

3.3 配置JDK环境变量

下面开始配置环境变量。

在终端中执行:sudo gedit ~/.bashrc

修改.bashrc文件,添加下面语句:

#set java environment

export JAVA_HOME=/usr/bin/jdk

export JRE_HOME=JAVA_HOME/jre

export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

该段代码最好设置在文件的尾部。

保存文件。在终端中执行source ~/.bashrc

重启系统请使用java –version检查JDK是否配置正确。

4.用apt-get install方式安装JDK1.5:

Android 要求的jdk 1.5,而Ubuntu10.4的源里只有JDK1.6. 如果安装了jdk1.6请先卸载:

$sudo apt-get remove remove openjdk-6-jdk

$sudo apt-get remove remove openjdk-6-jre

$sudo apt-get remove remove openjdk-6-jre-headless

安装jdk1.5目前网上解决方法有两种:

解决方法一(建议):安装JDK1.5

1)根据官方文档里所说,源代码的编译必须使用JDK5才能编译的了,所以这里偶使用jdk5

2)需要先更新源,在终端里执行sudo vim /etc/apt/sources.list

3)在source.list里把以下2行拷贝到文档最后面:

deb https://www.360docs.net/doc/b08034799.html,/ubuntu/ jaunty multiverse

deb-src https://www.360docs.net/doc/b08034799.html,/ubuntu/ jaunty multiverse

deb https://www.360docs.net/doc/b08034799.html,/ubuntu/ jaunty-updates multiverse

deb-src https://www.360docs.net/doc/b08034799.html,/ubuntu/ jaunty-updates multiverse

保存退出。

4)执行sudo apt-get update 更新源.

5)配置编译环境并下载JDK5:sudo apt-get install sun-java5-jdk

解决方法二:安装JDK 1.6 , 修改Android源文件。

1)安装jdk 1.6,修改(如果2.0版本源码请修改)

在文件中搜索并分别把:

java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1.5[. "$$]')

javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1.5[. "$$]')

两行改成:

java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1.6[. "$$]')

javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1.6[. "$$]')

即可。

推荐使用第一种解决方法。

5. 安装其他必备组件

在终端上,使用下面的命令安装:(前面的1、2、3步骤都可以省略啦)

sudo apt-get install git-core gnupg flex bison gperf libsdl-dev

libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev

因为JDK1.5在前面已经单独安装过了,因此此处apt-get install命令行中没有加入sun-java5-jdk。

6. 下载Android 源代码

6.1 安装repo脚本

首先安装repo。在当前用户:~目录下新建一个bin目录。在终端中执行:

cd ~

mkdir bin

然后,向PATH中添加bin路径:

export PATH=$PATH:~/bin

然后执行下面两行指令,下载repo脚本并修改可执行属性:

curl https://https://www.360docs.net/doc/b08034799.html,/repo >~/bin/repo

chmod a+x ~/bin/repo

6.2 初始化repo

首先建立一个目录用来存放Android源代码:

mkdir mydroid

cd mydroid

然后用最新的列表执行初始化。这里偶下载android 2.2.1(froyo),因此加了参数–b froyo:(android 2.2.2(froyo)源码下载:2G多

repo init -u git://https://www.360docs.net/doc/b08034799.html,/platform/manifest.git-b froyo ) (下载2.1_r2源码

repo init -u git://https://www.360docs.net/doc/b08034799.html,/platform/manifest.git –b android-2.1_r2

下载全部源码:repo init -u git://https://www.360docs.net/doc/b08034799.html,/platform/manifest.git)

(下载2.0源码:

repo init -u git://https://www.360docs.net/doc/b08034799.html,/platform/manifest.git –b eclair )

(上面下载2.0时有个莫名其妙的问题:

ynb@ynb-pc:~/bin$ repo init -u git://https://www.360docs.net/doc/b08034799.html,/platform/manifest.git –b eclair

Usage: repo init -u url [options]

出现上面问题,删除mydroid目录:rmdir mydroid ; mkdir mydroid2.0 ; cd mydroid2.0; 再:repo init -u git://https://www.360docs.net/doc/b08034799.html,/platform/manifest.git -b eclair 就可以了)(如果能通过浏览器浏览到android源码的主页,但运行repo init或repo sync的时候,却没法下载源码,形如:

只需要把git开头的地址改为http即可:

[1]

repo init -u https://www.360docs.net/doc/b08034799.html,/platform/manifest.git -b froyo

[2]修改manifest.git里的地址,也是把git://改为http://

vim .repo/manifest.git

如:

fetch="https://www.360docs.net/doc/b08034799.html,/"

review="https://www.360docs.net/doc/b08034799.html," />

remote="korg" /> )

这中间会问到你的名字和Email。如果你打算上传代码,Email须是一个Google账户。repo初始化成功后会看到类似于下面的提示:

repo initialized in /home/(当前用户名)/mydroid

最后执行$repo sync开始同步代码。过程比较漫长,下载速度取决于你的网速(偶的3-4小时左右),中间有可能遇到断线,重新执行repo sync即可断点续传。

7. 编译Android源代码

7.1 编译生成镜像

切换到android源码根目录下,执行$sudo make即可。首次编译非常耗时,取决于机器配置,大约需要2-3小时。有可能会出现:“Permission denied(权限拒绝的提示)”请命令赋予权限:$cd 无权限文件的当前目录回车;$sudo chmod -R +rwx * 回车;完成后镜像生成在/root/mydroid/out/target/product/generic下:android源码编译后得

到system.img,ramdisk.img,userdata.img映像文件。其中,ramdisk.img是emulator 的文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,emulator加载这3个映像文件后,会把system和userdata分别加载到ramdisk 文件系统中的system和userdata目录下。

7.2 编译、配置Android SDK

make编译完成后,执行$sudo make sdk命令,生成对应于该版本源代码的sdk,此过程用的时间偶的是10多分钟。注意这个sdk不能用于生产环境。

用于生产环境的最好用如下命令:$sudo make PRODUCT-sdk-sdk命令,生成对应于该版本源代码的用于生产环境的sdk,此过程用的时间偶的是1个多小时。

Android官方的SDK和偶自己编译Android源码时使用make sdk编译出的SDK有区别,模拟器版本不同,加载的默认镜像也不同(一个是官方的,一个是自己编译的)。下面将展示如何能够自由切换SDK版本。

首先是自己编译的SDK版本,实际位置是

/root/mydroid/out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86。

因为它比较常用,我们给它高优先级:

update-alternatives --install /usr/bin/AndroidSDK AndroidSDK

/root/mydroid/out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86 255

事先下载的官方SDK位置是/root/android-sdk-linux_86,执行:

update-alternatives --install /usr/bin/AndroidSDK AndroidSDK /root/android-sdk-linux_86 0

然后使用update-alternatives --display AndroidSDK查看当前配置情况:

如果要切换配置,使用update-alternatives --config AndroidSDK

配置AndroidSDK环境变量。终端中执行gedit ~/.bashrc

在文件最后添加下面三行:

# set android environment

export ANDROID_SDK_HOME=/usr/bin/ AndroidSDK

export PATH=$ANDROID_SDK_HOME/tools:$PATH

保存文件。在终端中执行source ~/.bashrc

8. 在模拟器中运行编译的镜像

打开终端,执行android脚本:

$android

出现下图所示窗口:

选择左边第一项Virtual Devices,然后在右边选择New,新建一个AVD。

Name:AVD的名称,随便取,但只能包含字母和数字以及点、下划线和连字符,这里取名test。

Traget:目标SDK版本,这里选自己编译的2.1-r1版Android SDK。

SD Card:SD卡。暂且不填,待需要时再设置。

Skin:皮肤(模拟器屏幕分辨率)。

Hardware:使用默认即可

然后点Create AVD,就创建好了一个AVD。点击Start即可启动模拟器,其运行的是自己编译的镜像。

若以后要再次启动此AVD,请在终端中运行:emulator –avd test 或者emulator @test

Ubuntu下Android源码修改、编译及运行、launcher定制

环境 Linux 版本:Ubuntu 11.04 (可由10.10的版本进行升级)64位系统 GCC版本:gcc version 4.5.2 Java版本:java version "1.6.0_26" 下载android源码前注意: 1、保证Ubuntu系统中的容量在80G左右,以保证足够的空间来存放android源码以及编译后的相关文件。 2、保证Ubuntu系统进行Internet访问。 联网方法:采用拨号进行连接。相关操作步骤如下所示: 1、虚拟机→设置→硬件→网络适配器→网络连接→桥接 2、启动Ubuntu系统,打开终端(在普通用户下),输入相关命令如下: $ pppoeconf //打开后输入上网账号跟密码,确认保存 $ sudo pon dsl-provider //上网连接命令 经过这两个步骤后就可以进行上网了。 Android源码编译所依赖的tools 01.$ sudo apt-get update 02.$ sudo apt-get -y install git-core 03.$ sudo apt-get -y install gnupg 04.$ sudo apt-get -y install sun-java6-jdk flex 05.$ sudo apt-get -y install bison 06.$ sudo apt-get -y install gperf 07.$ sudo apt-get -y install libsdl-dev 08.$ sudo apt-get -y install libesd0-dev 09.$ sudo apt-get -y install libwxgtk2.6-dev 10.$ sudo apt-get -y install build-essential 11.$ sudo apt-get -y install zip 12.$ sudo apt-get -y install curl 13.$ sudo apt-get -y install libncurses5-dev 14.$ sudo apt-get -y install zlib1g-dev 15.$ sudo apt-get -y install valgrind 注意:(如果是32bit的系统的话,则要更改几个Android.mk文件) 01./external/clearsilver/cgi/Android.mk 02./external/clearsilver/java-jni/Android.mk 03./external/clearsilver/util/Android.mk 04./external/clearsilver/cs/Android.mk 用gedit打开,修改m64为m32即可 另外 将build/core/main.mk中的ifneq (64,$(findstring 64,$(build_arch)))修改为: ifneq (i686,$(findstring i686,$(build_arch)))

Rockchip Android编译说明

v1.2.9 Android编译说明 1. 编译前预处理 (1) 1.1. 指定编译的产品名 (1) 1.2. 执行编译的预处理 (2) 1.3. 注意事项 (2) 2. 编译Android代码 (2) 3. 编译后处理 (3) 3.1. 生成FLASH烧写用的IMG (3) 3.2. 生成NFS用的文件目录 (3) 4. 在vendor下创建一个产品名 (4) 4.1. 新建产品目录 (4) 4.2. 功能裁剪 (4) 4.3. 注意事项 (5) 由于Android目录下可以包含多个产品的编译规则,所以编译源码要经过以下几个步骤:l编译前预处理(make prebuild) l编译Android代码(make) l编译后处理(make firmware) 1.编译前预处理 1.1. 指定编译的产品名 注意: 1.发布的Android SDK软件包已经做好以下配置,默认为sdkDemo产品,可以直接 跳到1.2的步骤。 2.如果要新建一个产品需要执行本小节1.1的操作。 3.新建产品请参见章节:在vendor下创建一个产品名 需要确认根目录下是否有buildspec.mk文件,如果有确认该文件内配置的产品名是否正确,例如sdkDemo的产品,则该文件内配置为如下值: 如果没有则拷($android)/build/buildspec.mk.default文件至根目录下,重复以上步骤。

1.2. 执行编译的预处理 在根目录下敲入make prebuild 该命令将执行一些产品相关功能的资源文件拷贝等操作。 1.3. 注意事项 l此部分步骤在只需要执行一次,后续编译不用再执行此命令。 l如何确认当前配置的产品名? 敲入make会立即弹出以下信息,确认下面的TARGET_PRODUCT字段值 l当前目录有多少的产品名? Android代码中,用户自定义扩展的产品名都存放在vendor目录下 2.编译Android代码 在根目录下敲入make

Android系统编译过程中常见问题汇总(2)

android源码编译常见问题 分类:android中级2013-03-09 16:20 397人阅读评论(2) 收藏举报编译过程: (在Ubuntu 11.04 64位机器上编译) 1. source build/envsetup.sh //初始化与环境envsetup.sh脚本 初始化完成,显示如下 including device/samsung/maguro/vendorsetup.sh including device/samsung/tuna/vendorsetup.sh including device/ti/panda/vendorsetup.sh including sdk/bash_completion/adb.bash 2. lunch full-eng //选择的目标 ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=4.0.1 TARGET_PRODUCT=full TARGET_BUILD_VARIANT=eng TARGET_BUILD_TYPE=release TARGET_BUILD_APPS= TARGET_ARCH=arm TARGET_ARCH_VARIANT=armv7-a HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID=ITL41D ============================================ //建立与一切使。GNU的make -JN参数可以并行处理任务,它是共同使用的任务数, //N的1倍和2倍之间是被用于建立计算机硬件线程数量。例如在E5520双机(2个CPU, //每个CPU 4核,每核心2线程),最快的构建与命令之间的J16和 -J32。 3. make -j4 编译完成

在Ubuntu上编译android

在Ubuntu7.10上编译android 1 概述 上个星期看到android开放源代码的消息,虽然觉得Google的这个动作会对业界产生很大影响,但没有时间仔细看,只浏览了Project layout。今天上午一个网友在mail中说已经编译、运行过android。我趁着中午休息时间,在一个Ubuntu7.10的虚拟机上编译、运行了一下。 我在这个虚拟机上编译过openmoko、poky。相对于这两个使用OpenEmbedded的平台,android的编译要简单一些,快一些。我在编译openmoko和poky时,将所有下载包都保存在一个目录中,将编译目录的sources子目录指向这个目录。这样做,一方面即使以后有些链接失效,也还可以编起来(其实编译时都不需要连接外网);另一方面在重新编译时,不用重新下载,可以加快编译速度。即使这样,完全编译一次poky也要一个晚上。编译android时,下载用了1个小时,编译也只需要1个小时。 2 编译中的两个小问题 2.1 python和JDK Google网站对编译过程的介绍还是很清晰的。不过在介绍其它软件包时,都给出了apt-get命令,却单独给出了python和JDK的链接地址,容易对读者产生误导,以为要手工安装这两个软件。其实这两个软件也应该通过apt-get安装。特别是python,如果从源代码安装,可能因为依赖其它软件,导致一些组件编译失败,影响android的编译。而且python 2.6的源代码包没有提供make uninstall,卸载也比较麻烦。其实我们只需要一个apt-get命令,就可以安装所有依赖的软件。 2.2 "fatal: git 1.5.4 or later required" 在Ubuntu7.10上执行repo init时,会出现"fatal: git 1.5.4 or later required"的错误提示。在Ubuntu8.04上编译没有这个问题。下面的流程里会介绍怎样解决这个问题。 3 在Ubuntu7.10上的编译流程

Android源码编译

Android源码编译 开发工具:Ubuntu10.04 在Ubuntu下使用root用户登录,注意root一开始是锁定的,使用如下命令解锁:sudopasswd root 按回车铵,提示输入当前密码,在提示输入二次密码。输入完成切换用户使用root用户登录。 Android源码结构 Makefile (全局的Makefile) bionic (Bionic含义为仿生,这里面是一些基础的库的源代码) bootloader(引导加载器) build (build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具) dalvik (JAVA虚拟机) development(程序开发所需要的模板和工具) external (目标机器使用的一些库) frameworks (应用程序的框架层) hardware (与硬件相关的库) kernel (Linux2.6的源代码) packages (Android的各种应用程序) prebuil (Android在各种平台下编译的预置脚本) recovery (与目标的恢复功能相关) system (Android的底层的一些库) Out (编译好的文件) 编译Android源码必需的安装的软件包 g++库文件有可能Ubuntu自带,使用g++ -v命令查找是否安装,如果没有自带请手动安装,使用如下命令,sudo apt-get-install g++-4.4. 注意:g++分很多版本,如果使用了最新版本4.6将没办法编译,建议安装4.4版本 Gcc库文件有可能Ubuntu自带,使用gcc–v命令查找是否安装,如果没有自带使用如下命令手动安装,sudo apt-get-install gcc-4.4. 注意:gcc分很多版本,如果使用了最新版本4.6将没办法编译,建议安装4.4版本 不过还有一些应该是linux系统自带的,如果缺少就按照提示install一下sudo apt-get install build-essential sudo apt-get install make sudo apt-get install libc6-dev sudo apt-get install patch sudo apt-get install texinfo sudo apt-get install libncurses-dev

android4.1编译

Android 4.1.4 编译 1、下载源码: 我是在ics版本的基础上通过repo sync更新,发现有了an droid 4_1_r1的分支,等待更新完,repobranch切换分支,然后.Build/envsetup.she然后lunchi选择full-eng最后make,过一会报错。提示: build/core/product_config.mk:193:***_nic.PRODUCTS.[[build/target/product/v box_x 86.mk]]: "frameworks/native/build/phone-xhdpi-1024-dalvik-heap.mk" does not exist. Stop.** Don't have a product spec for: 'full' ** Do you have the right repo manifest? Google baidu bing 了大半天终于在an droid的bug单中找到了这条bug,解答是源码不全。愁了半天,repo sync都是最新的,愁了半天,最后再ics的repo 中重新下了个android 4.1.4的分支。 repoinit-uhttps: 4.1.1_r4 repo sync 下载3个小时,终于下载完成,本来下载源码需要很长时间5?10个小 时,由于再ics的基础上下载,只需要把patch下载就行了(repo会自动完成)。兴奋啊,赶紧. Build/envsetup.sh lunch 1 full-eng

/bin/bash: prebuilts/gcc/linux-x86/arm/arm-linux-androideabi- 4.6/bin/arm-linux- androideabi-gcc: 无法执行二进制文件 /bin/bash: prebuilts/gcc/linux-x86/arm/arm-linux-androideabi- 4.6/bin/arm-linux- androideabi-gcc: 无法执行二进制文件 /bin/bash: prebuilts/gcc/linux-x86/arm/arm-linux-androideabi- 4.6/bin/arm-linux- androideabi-gcc: 无法执行二进制文件 先没管它,继续机制行 make clean make -j8 过了几分钟提示错误:hostStaticLib: libhost(out/host/linux- x86/obj/STATIC_LIBRARIES/libhost_intermediates/libhost.a) ERROR: prebuilts/tools/gcc-sdk/../../gcc/linux-x86/host/x86_64-linux-glibc 2.7- 4.6/bin/x86_64-linux-ar only run on 64-bit linux make: ***[out/host/linux-x86/obj/STATIC_LIBRARIES/libhost_intermediates/libhost.a] 错误 1 host C: emulator-target-i386 <= external/qemu/cpus.c host C: emulator-target-i386 <= external/qemu/arch_init.c host C: emulator-target-i386 <= external/qemu/os-posix.c host C:

android源代码下载和编译教程

Android源代码由两部分组成,其一是Android系统应用部分的代码,其次是Android 所使用的内核代码,如果针对Google Nexus S来开发ROM,就需要下载三星的内核代码Android 系统应用代码: https://https://www.360docs.net/doc/b08034799.html,/platform/manifest Android内核代码: https://https://www.360docs.net/doc/b08034799.html,/kernel/samsung.git 准备阶段:设置Linux编译环境(本人是Ubuntu 11.10 ,32位系统),一般你需要以下配置: Python 2.5 -- 2.7. GNU Make 3.81 -- 3.82,, JDK 6 (for Gingerbread or newer); JDK 5( for Froyo or older). Git 1.7 or newer. 1、安装一些必备的包。 Git是Linux Torvalds为了帮助管理Linux内核而开发的一个开放源码的分布式版本控制系统软件,它不同于SVN,CVS这样集中式的版本控制系统。在集中式版本控制系统中只有一个仓库(repository),许多个工作目录,而git这样的分布式控制系统中,每一个工作目录都包含一个完整仓库,它们支持离线工作,本地提交可以稍后提交到服务器上。分布式系统理论上也比集中式的单服务器系统更健壮,单服务器系统一旦服务器出现问题整个系统就不能运行了,分布式系统通常不会因为一两个节点而收到影响? 因为Android是由kernel,Dalvik,Bionic,prebuild,build等多个Git项目组成, 所以Android项目编写了一个名为repo的python的脚本来统一管理这些项目的仓库,使得Git的使用更加简单。 $ sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \ x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \ libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \ libxml2-utils xsltproc $ sudo apt-get install libx11-dev:i386 2、创建源代码目录 首先确保在当前用户的主目录下创建一个/bin目录(如果没有的话),然后把它加到PATH 环境变量中: $ mkdir ~/bin $ PATH=~/bin:$PATH 或者$export PATH=$PATH:~/bin 3、用curl下载repo脚本,并保存在~/bin/repo文件中: $ curl https://https://www.360docs.net/doc/b08034799.html,/dl/googlesource/git-repo/repo > ~/bin/repo 为repo加上执行权限 $ chmod a+x ~/bin/repo 4、初始化版本库 首先建立一个目录,用来存放下载下来的东西 $mkdir MyAndroid $cd MyAndroid 以后,执行如下命令 $ repo init -u https://https://www.360docs.net/doc/b08034799.html,/platform/manifest -b android-2.3.7_r1 我这里下载的是android2.3.7版本的,所用的参数是android-2.3.7_r1。由于最新的是android-4.0.3_r1,所以使用上面即可下载2.3.7的源代码 注意:如果要是把所有的版本都下载下来,那时间是需要很久很久的,需要耐心等待,但是如果仅仅是下载某一个版本的话,还是很快就可以了。 最后,如果看到repo initialized in /MyAnroid的提示,说明本地的版本库已经初始化成功了(期间需要你填写姓名和Gmail地址)。

Ubuntu下编译Android源码全过程

Ubuntu下编译Android源码全过程(转) 源码, 编译, Ubuntu, Android 一、获取Android源代码 Git是LinuxTorvalds(Linux之父)为了帮助管理Linux内核开发而开发的一个开放源码的分布式版本控制软件,它不同于Subversion、CVS这样的集中式版本控制系统。在集中式版本控制系统中只有一个仓库(Repository),许多个工作目录(WorkingCopy),而在Git这样的分布式版本控制系统中(其他主要的分布式版本控制系统还有BitKeeper、Mercurial、GNUArch、Bazaar、Darcs、SVK、Monotone等),每一个工作目录都包含一个完整仓库,它们支持离线工作,本地提交可以稍后提交到服务器上。 因为Android是由Kernel、Dalvik、Bionic、Prebuilt、build等多个项目组成,如果我们分别使用Git来逐个获取显得很麻烦,所以Android项目编写了一个名为Repo的Python 的脚本来统一管理这些项目的仓库,使得项目的获取更加简单。 在Ubuntu 8.04上安装Git只需要设定正确的更新源,然后使用apt-get就可以了,apt-get 是一条Linux命令,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或 操作系统。 apt-get命令一般需要root权限执行,所以一般跟着sudo命令。 sudo apt-get install git-core curl 这条命令会从互联网的软件仓库中安装git-core和curl。 其中curl是一个利用URL语法在命令行方式下工作的文件传输工具,它支持很多协议,包括FTP、FTPS、HTTP、HTTPS、TELENT等,我们需要安装它从网络上获取Repo脚本文件。 curl https://www.360docs.net/doc/b08034799.html,/repo >~/bin/repo 这句命令会下载repo脚本文件到当前主目录的/bin目录下,并保存在文件repo中。 最后我们需要给repo文件可执行权限

Android ninja 编译启动过程分析

Android ninja编译启动过程分析 ---make是如何转换到到ninja编译的 1.首先你的得对make的工作机制有个大概的了解: 运行的命令在要编译的目录下运行make,或者make target_name a.分析处理保存阶段(没有实际编译动作):它首先对当前目录下的Makefile文件的做一次扫描,语法分析,还有处理,主要是变量的保存,目标依赖列表生成,目标下的action列表的生成,然后记住 b.然后按记住的目标执行action列表动作(有实际编译动作). 编译启动的入口方式还是运行make: 2开始make-jxxx方式进入.....(xxx是本机cpu的数量) make开始做进行第一次扫描.... 目前USE_NINJA还是没有定义,估计以后很久很久才能启用的了! BUILDING_WITH_NINJA开始也是没定义的 看make扫描入口文件: Makefile: include build/core/main.mk 在build/core/main.mk: 在ninia之前都有include help.mk和config.mk 97include$(BUILD_SYSTEM)/help.mk 98 99#Set up various standard variables based on configuration 100#and host information. 101include$(BUILD_SYSTEM)/config.mk 说明make help//显示make帮助make config//当前显示配置 103relaunch_with_ninja:= 104ifneq($(USE_NINJA),false) 105ifndef BUILDING_WITH_NINJA<==第二次扫描不会到这里了 106relaunch_with_ninja:=true 107endif 108endif 116ifeq($(relaunch_with_ninja),true)<===第一次扫描入这里了 117#Mark this is a ninja build. 118$(shell mkdir-p$(OUT_DIR)&&touch$(OUT_DIR)/ninja_build) 119include build/core/ninja.mk//---进入ninja.mk 第一次扫描到此为止就结束掉了,因为在当前ifeq else endif后面没有代码了 120else#///!relaunch_with_ninja<===第二次扫描入这里了

android自动编译环境搭建

Win8 配置Android开发环境及自动编译环境 一、安装JDK 1,下载JDK:https://www.360docs.net/doc/b08034799.html,/technetwork/java/javase/downloads/index.html 点击,在新页面选择 windows x64(如下)进入下载。 2,下载后安装。

3,Windows 下安装完毕后需要设置三个环境变量 JAVA_HOME 指明JDK安装路径,就是刚才安装时的路径C:\Program Files\Java\jdk1.7.0,此路径下包括lib,bin,jre等文件夹(此变量最好设置,因为以后运行tomcat,eclipse,ant 等都需要使用 此变量) PATH Path使得系统可以在任何路径下识别java命令,设为: %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin CLASSPATH CLASSPATH为java加载类(class or lib)路径,只有类在classpath中,java命令才能识别,设为: .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar (要加.表示当前路径) %JAVA_HOME%就是引用前面指定的JAVA_HOME。 上述环境变量设置好了后,可以运行cmd,在命令窗口里面运行下面命令,可以看到类似下面的信息: 当然也可以在命令行下面使用java -fullversion 可以对当前版本的详细信息。这时候的返回信息类似如下: java full version "1.7.0-b147" 之后我们就可以写一个超简单的java程序: HelloWorld.java 文件内容如下: public class HelloWorld { public static void main(String args[]) { System.out.println("HelloWorld!"); } } 依次:javac HelloWorld.java java HelloWorld

Android编译过程详解

本文使用Android版本为2.1,采用开发板为华清远见研发的FS_S5PC100 A8开发板。+--------------------------------------------------------------------------------------------------------------------+ 1. source build/envsetup.sh 这个命令是用来将envsetup.sh里的所有用到的命令加载到环境变量里去,我们来分析下它。envsetup.sh里的主要命令如下: ?

根据上面的内容,可以推测出,如果要想定义自己的产品编译项,简单的办法是直接在envset up.sh最后,添加上add_lunch_combo myProduct-eng,当然这么做,不太符合上面代码最后的本意,我们还是老实的在vendor目录下创建自己公司名字,然后在公司目录下创建一个新的vendorsetup.sh,在里面添加上自己的产品编译项 ? 这样,当我们在执行source build/envsetup.sh命令的时候,可以在shell上看到下面的信息: ?

2. 按照android官网的步骤,开始执行lunch full-eng 当然如果你按上述命令执行,它编译的还是通用的eng版本系统,不是我们个性系统,我们可以执行lunch命令,它会打印出一个选择菜单,列出可用的编译选项 如果你按照第一步中添加了vendorsetup.sh那么,你的选项中会出现: ? 其中第3项是我们自己添加的编译项。 lunch命令是envsetup.sh里定义的一个命令,用来让用户选择编译项,来定义Product和编译过程中用到的全局变量。 我们一直没有说明前面的fs100-eng是什么意思,现在来说明下,fs100是我定义的产品的名字,eng是产品的编译类型,除了eng外,还有user, userdebug,分别表示: eng: 工程机, user:最终用户机 userdebug:调试测试机

Android应用程序资源的编译和打包过程分析

Android应用程序资源的编译和打包过程分析 作者:罗升阳 我们知道,在一个APK文件中,除了有代码文件之外,还有很多资源文件。这些资源文件是通过Android资源打包工具aapt(Android Asset Package Tool)打包到APK文件里面的。在打包之前,大部分文本格式的XML资源文件还会被编译成二进制格式的XML 资源文件。在本文中,我们就详细分析XML资源文件的编译和打包过程,为后面深入了解Android系统的资源管理框架打下坚实的基础。 在前面Android资源管理框架(Asset Manager)简要介绍和学习计划一文中提到,只有那些类型为res/animator、res/anim、res/color、res/drawable (非Bitmap文件,即非.png、.9.png、.jpg、.gif文件)、res/layout、res/menu、res/values和res/xml的资源文件均会从文本格式的XML文件编译成二进制格式的XML文件,如图1所示: 这些XML资源文件之所要从文本格式编译成二进制格式,是因为: 1. 二进制格式的XML文件占用空间更小。这是由于所有XML元素的标签、属性名称、属性值和内容所涉及到的字符串都会被统一收集到一个字符串资源池中去,并且会去重。有了这个字符串资源池,原来使用字符串的地方就会被替换成一个索引到字符串资源池的整数值,从而可以减少文件的大小。 2. 二进制格式的XML文件解析速度更快。这是由于二进制格式的XML元素里面不再包含有字符串值,因此就避免了进行字符串解析,从而提高速度。

将XML资源文件从文本格式编译成二进制格式解决了空间占用以及解析效率的问题,但是对于Android资源管理框架来说,这只是完成了其中的一部分工作。Android资源管理框架的另外一个重要任务就是要根据资源ID来快速找到对应的资源。 在前面Android资源管理框架(Asset Manager)简要介绍和学习计划一文中提到,为了使得一个应用程序能够在运行时同时支持不同的大小和密度的屏幕,以及支持国际化,即支持不同的国家地区和语言,Android应用程序资源的组织方式有18个维度,每一个维度都代表一个配置信息,从而可以使得应用程序能够根据设备的当前配置信息来找到最匹配的资源来展现在UI上,从而提高用户体验。 由于Android应用程序资源的组织方式可以达到18个维度,因此就要求Android资源管理框架能够快速定位最匹配设备当前配置信息的资源来展现在UI上,否则的话,就会影响用户体验。为了支持Android资源管理框架快速定位最匹配资源,Android资源打包工具aapt在编译和打包资源的过程中,会执行以下两个额外的操作: 1. 赋予每一个非assets资源一个ID值,这些ID值以常量的形式定义在一个R.java 文件中。 2. 生成一个resources.arsc文件,用来描述那些具有ID值的资源的配置信息,它的内容就相当于是一个资源索引表。 有了资源ID以及资源索引表之后,Android资源管理框架就可以迅速将根据设备当 前配置信息来定位最匹配的资源了。接下来我们在分析Android应用程序资源的编译和打包过程中,就主要关注XML资源的编译过程、资源ID文件R.java的生成过程以及资源索引表文件resources.arsc的生成过程。 Android资源打包工具在编译应用程序资源之前,会创建一个资源表。这个资源表使用一个ResourceTable对象来描述,当应用程序资源编译完成之后,它就会包含所有资源 的信息。有了这个资源表之后, Android资源打包工具就可以根据它的内容来生成资源索引表文件resources.arsc了。 接下来,我们就通过ResourceTable类的实现来先大概了解资源表里面都有些什么东西,如图2所示:

利用mm命令编译Android模块

在Android开发过程中,当我们只需要编译某个修改过的模块时,使用mm命令可以使你不用编译整个Android项目,而只需单独编译该模块即可,这样速度是不是很快呢?具体的步骤如下: 1. 在Android源代码目录下: [c-sharp]view plaincopy 1cd mydroid 2source build/envsetup.sh 也可以将source ~/mydroid/build/envsetup.sh放到~/.bashrc中,这样每次打开shell时就会自动运行该脚本。 2. 在shell中使用help命令查看可以运行的命令 [c-sharp]view plaincopy 3# help 4Invoke ". build/envsetup.sh" from your shell to add the following functions to your environment: 5- croot: Changes directory to the top of the tree. 6- m: Makes from the top of the tree. 7- mm: Builds all of the modules in the current directory. 8- mmm: Builds all of the modules in the supplied directories. 9- cgrep: Greps on all local C/C++ files. 10- jgrep: Greps on all local Java files. 11- resgrep: Greps on all local res/*.xml files. 12- godir: Go to the directory containing a file. 13 14Look at the source to view more functions. The complete list is: 15add_lunch_combo cgrep check_product check_variant choosecombo chooseproduct choosetype choosevariant cproj croot findmakefile gdbclient get_abs_build_var getbugreports get_build_var getprebuilt gettop godir help isviewserverstarted jgrep

Android的编译系统

设为主页加入收藏帮助 | 留言交流 转藏到我的图书馆推荐给朋友举报

build/core/envsetup.mk generate dir config and so on build/target/product product config build/target/board board config build/core/combo build flags config 这里解释下这里的board和product。borad主要是设计到硬件芯片的配置,比如是否提供硬件的某些功能,比如说GPU等等,或者芯片支持浮点运算等等。product是指针对当前的芯片配置定义你将要生产产品的个性配置,主要是指APK方面的配置,哪些APK会包含在哪个product中,哪些APK在当前product中是不提供的。 config.mk是一个总括性的东西,它里面定义了各种module编译所需要使用的HOST工具以及如何来编译各种模块,比如说BUILT_PREBUILT就定义了如何来编译预编译模块。envsetup.mk主要会读取由envsetup.sh写入环境变量中的一些变量来配置编译过程中的输出目录,combo里面主要定义了各种Host和Target结合的编译器和编译选项。 配置部分主要完成以下几个工作: a) 基于Android 产品的配置(product config):选择构建安装的运行程序(user package) b) 设置 target 等相关变量TARGET_ARCH, TARGET_OS,TARGET_BUILD_TYPE, TARGET_PREBUILT_TAG c) 根据编译环境设置 host等相关变量HOST_OS, HOST_ARCH,HOST_BUILD_TYPE, HOST_PREBUILT_TAG d) 编译 target上运行程序所需的工具链及编译参数设置,如linux-arm-cc,cflag,include目录等。 e) 编译 host上运行程序所需的工具链及编译参数设置。 下图简要介绍了Android build system的配置部分的主要构成及相互关系。 流程-... 男性必吃的12种食 物!... 美食 哲理小品:最美妙 的人生 摄影基础技法

Ubuntu下Android源码修改、编译及运行、launcher定制

环境 Linux版本: Ubuntu 11.04(可由 10.10的版本进行升级)64位系统 GCC版本: gcc version 4.5.2 Java版本: java version " 1.6.0_26" 下载android源码前注意: 1、保证Ubuntu系统中的容量在80G左右,以保证足够的空间来存放android源码以及编译后的相关文件。 联网方法: 采用拨号进行连接。相关操作步骤如下所示: 1、虚拟机设置硬件网络适配器网络连接桥接 2、启动Ubuntu系统,打开终端(在普通用户下),输入相关命令如下: $ pppoeconf//打开后输入上网账号跟密码,确认保存 $ sudo pon dsl-provider//上网连接命令

经过这两个步骤后就可以进行上网了。 Android源码编译所依赖的tools 01.$ sudo apt-get update 02.$ sudo apt-get -y install git-core 03.$ sudo apt-get -y install gnupg 04.$ sudo apt-get -y install sun-java6-jdk flex 05.$ sudo apt-get -y install bison 06.$ sudo apt-get -y install gperf 07.$ sudo apt-get -y install libsdl-dev 08.$ sudo apt-get -y install libesd0-dev 09.$ sudo apt-get -y install libwxgtk 2.6-dev 10.$ sudo apt-get -y install build-essential 11.$ sudo apt-get -y install zip 12.$ sudo apt-get -y install curl 13.$ sudo apt-get -y install libncurses5-dev 14.$ sudo apt-get -y install zlib1g-dev 15.$ sudo apt-get -y install valgrind 注意: (如果是32bit的系统的话,则要更改几个Android.mk文件)01./external/clearsilver/cgi/Android.mk

Android 源码编译 流程

Android 源码编译调试流程 by mengke 1 编译流程 sudo apt-get install build-essential 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 libncurses-dev sudo apt-get install git-core gnupg sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl sudo apt-get install ncurses-dev sudo apt-get install zlib1g-dev sudo apt-get install valgrind sudo apt-get install python2.5 安装java环境 sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts sun-java6-jdk sudo apt-get install sun-java5-jdk (ubuntu 910 估计会有一些问题) (注:官方文档说如果用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-java5-jdk) 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 假设源代码的目录为mydroid root@mk-desktop:~/mydroid# ls Makefile build development frameworks out sdk bionic cts device hardware packages system bootable dalvik external ndk prebuilt vendor

相关文档
最新文档