ITPub博客

首页 > 大数据 > Hadoop > android源码编译

android源码编译

Hadoop 作者:scr2005 时间:2013-04-10 19:58:00 0 删除 编辑

Ubuntu11.04+android-2.2.3_r2+android-goldfish-2.6.29

需要:

Python

JDK5(android2.2-)或JDK6(android2.3+)

Git

$sudo apt-get install build-essential

$sudo apt-get install zlib1g-dev

$sudo apt-get install flex

$sudo apt-get install libncurses-dev

$sudo apt-get install libx11-dev

$sudo apt-get install gperf

Java 5: Froyo and older


$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu hardy main multiverse"$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu hardy-updates main multiverse"$ sudo apt-get update$ sudo apt-get install sun-java5-jdk

Configuring USB Access

The recommended approach is to create a file /etc/udev/rules.d/51-android.rules (as the root user) and to copy the following lines in it. must be replaced by the actual username of the user who is authorized to access the phones over USB.
# adb protocol on passion (Nexus One)SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER=""# fastboot protocol on passion (Nexus One)SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER=""# adb protocol on crespo/crespo4g (Nexus S)SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER=""# fastboot protocol on crespo/crespo4g (Nexus S)SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER=""# adb protocol on stingray/wingray (Xoom)SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER=""# fastboot protocol on stingray/wingray (Xoom)SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER=""# adb protocol on maguro/toro (Galaxy Nexus)SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER=""# fastboot protocol on maguro/toro (Galaxy Nexus)SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER=""# adb protocol on panda (PandaBoard)SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER=""# fastboot protocol on panda (PandaBoard)SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER=""# usbboot protocol on panda (PandaBoard)SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER=""# usbboot protocol on panda (PandaBoard ES)SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER=""# adb protocol on grouper (Nexus 7)SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", MODE="0600", OWNER=""# fastboot protocol on grouper (Nexus 7)SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e40", MODE="0600", OWNER=""

Download Source Tree

$ mkdir ~/bin$ PATH=~/bin:$PATH

$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo$ chmod a+x ~/bin/repo

$ mkdir WORKING_DIRECTORY$ cd WORKING_DIRECTORY
//这里需要指定branch,以免引起不必要的麻烦
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

$ repo sync

Building the System

$ . build/envsetup.sh

$ lunch full-eng

$ make -j4

在模拟器上运行编译好的android


emulator在~/android/out/host/linux-x86/bin 下,ramdisk.img,system.img和userdata.img则在~/android/out/target/product /generic下

增加环境变量

1 $ vim ~/.bashrc

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

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

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

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

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

最后,同步这些变化:

1 $ source ~/.bashrc

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

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

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


编译模块

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

在源码目录下执行1 $ . 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来编译指定目录的模块,如编译联系人:1 $ mmm packages/apps/Contacts/

编完之后生成两个文件:

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

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

可以使用

1 $ make snod

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


编译SDK

$ 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的修改注释掉,增加如下一行:

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

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

  • 关于环境变量、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而已。

  • 创建Android Virtual Device

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

创建AVD:1 $ android create avd -t 1 -n myavd

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

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

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


编译linux内核映像



a) 准备交叉编译工具链

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

b) 设定环境变量

$ vim ~/.bashrc

增加如下两行:

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

2 export ARCH=arm

保存后,同步变化:1 $ source ~/.bashrc

c) 获得合适的内核源代码$ git clone https://android.googlesource.com/kernel/common.git kernel
命令行最后面的kernel的意思是保存在这个文件夹下,所以可以是任何名字,该文件夹不需要自己去创建,最后的这个不写也没问题
如果想下载其他版本的内核
$ git clone https://android.googlesource.com/kernel/goldfish.git //此为我们对应下载的内核
$ git clone https://android.googlesource.com/kernel/msm.git
$ git clone https://android.googlesource.com/kernel/omap.git
$ git clone https://android.googlesource.com/kernel/samsung.git
$ git clone https://android.googlesource.com/kernel/tegra.git

$ cd kernel

$ git branch

$ git branch -a

$ git checkout -b android-goldfish-2.6.29 origin/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定义,如下:1 LDFLAGS_BUILD_ID =

e) 编译内核映像

$ cd ~/android/kernel

$ make goldfish_defconfig

$ make

f) 测试生成的内核映像

$ emulator -avd myavd -kernel ~/android/kernel/arch/arm/boot/zImage


Android找不到设备的解决方法


http://os.51cto.com/art/201104/256341.htm







来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/302950/viewspace-1111687/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论