博客:http://blog.csdn.net/liuhaoyutz
Android版本:2.3.7_r1
一、下载google Android源码的步骤:
如果因为屏蔽问题下载不了,可以到这个网址下载:http://zhu.im/Android/
1.下载repo,执行如下命令:
wget https://dl-ssl.google.com/dl/googlesource/git-repo/repo
2.赋于repo可执行权限:
chmod 777 repo
3.将repo拷贝到可执行程序目录下:
mv repo ~/bin/
4.执行如下命令
mkdir android_source
cd android_source
repo init -u https://android.googlesource.com/platform/manifest
上面的命令执行完成后,可以看到有哪些android版本可以下载,选择你要下载的版本,执行如下命令:
repo init -u https://android.googlesource.com/platform/manifest -b android-2.3.7_r1
然后执行如下命令:
repo sync
即开始下载android-2.3.7_r1源码。
二、下载Linux内核步骤:
1.创建目录
mkdir kernel
cd kernel
2.下载内核源码
git clone https://android.googlesource.com/kernel/common.git
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
上面的每个命令对应一种平台,可以根据需要选择需要的一个或几个执行。
执行完上面的命令后,kernel目录下会有对应的common,goldfish,msm,omap,samsung,tegar目录。选择一个目录进入,里面没有任何文件,这时,需要执行如下命令:
git branch -a
在我的电脑上,执行结果如下(common目录下):
* master
remotes/origin/HEAD -> origin/master
remotes/origin/android-2.6.39
remotes/origin/android-3.0
remotes/origin/android-3.3
remotes/origin/android-3.4
remotes/origin/android-3.4-compat
remotes/origin/coupled-cpuidle
remotes/origin/linux-bcm43xx-2.6.39
remotes/origin/master
可以看到可用的内核版本,比如我需要3.4版本的内核,则需要执行如下命令:
git checkout -b android-3.4 remotes/origin/android-3.4
当前目录下就出现kernel源码。
三、编译android步骤:
1.执行命令
source build/envsetup.sh
执行这个脚本后,会初始化一些环境变量,提供了一些开发中非常有用的命令。
2.执行命令
lunch
这个命令会显示出一个选择列表,在我的电脑下,该列表如下所示
You're building on Linux
Lunch menu... pick a combo:
1. generic-eng
2. simulator
3. full_passion-userdebug
4. full_crespo4g-userdebug
5. full_crespo-userdebug
这里列出的内容叫做Build Target,其形式是BUILD-BUILDTYPE,在Android网站上有如下解释:
All build targets take the form BUILD-BUILDTYPE, where the BUILD is a codename referring to the particular feature combination. Here's a partial list:
Build name |
Device |
Notes |
full |
emulator |
fully configured with all languages, apps, input methods |
full_maguro |
maguro |
full build running on Galaxy Nexus GSM/HSPA+ ("maguro") |
full_panda |
panda |
full build running on PandaBoard ("panda") |
and the BUILDTYPE is one of the following:
Buildtype |
Use |
user |
limited access; suited for production |
userdebug |
like "user" but with root access and debuggability; preferred for debugging |
eng |
development configuration with additional debugging tools |
这里,我选择默认选项,即第一项generic-eng,回车。
3.执行命令
make -j4
开始编译,其中j4代表使用4个线程并行编译。
编译完成后,会出现如下信息:
Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
Install system fs image: out/target/product/generic/system.img
Installed file list: out/target/product/generic/installed-files.txt
四、编译Linux内核步骤
1.进入内核源码目录,下面以goldfish为例
cd kernel/goldfish
2.设置PATH环境变量
export PATH=$PATH:../../prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/
3.修改主目录下的Makefile,指定ARCH和交叉编译前缀:
#ARCH ?= $(SUBARCH)
#CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%) ARCH ?= arm
CROSS_COMPILE ?= arm-eabi-
4.生成配置文件
make goldfish_defconfig
注意只有android-goldfish-2.6.29 branch才有这个goldfish_defconfig文件,放置在arch/arm/configs目录下。而android-goldfish-3.4 branch没有这个文件。
执行完该命令后,在主目录下会生成.config文件,即配置文件。
5.执行命令
make
开始编译,编译成功会,会有如下信息:
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
五、编译Android SDK
执行命令
make sdk
编译完成后,会有如下信息:
Package SDK Stubs: out/target/common/obj/PACKAGING/android_jar_intermediates/android.jar
Package SDK: out/host/linux-x86/sdk/android-sdk_eng.liuhaoyu_linux-x86.zip
生成的SDK包在out/host/linux-x86/sdk/android-sdk_eng.liuhaoyu_linux-x86目录下。
打开Eclipse,选择Window/Preferences,再选择Android,设置SDK Location指向上面生成的SDK所在目录。
六、编译ADT
1.设置环境变量
ECLIPSE_HOME=~/software/eclipse
我在命令行下设置这个环境变量,运行脚本时总是提示没有设置,我的解决办法是在sdk/eclipse/scripts/build_plugins.sh文件的70行添加该语句:
ECLIPSE_HOME=~/software/eclipse
同时,把sdk/eclipse/scripts/build_plugins.sh文件的73行改为
BASE_DIR=~/buildbot/eclipse-android
即加上最开始的”~”,不在根目录下创建目录或文件,避免一些权限问题。
另外,需要注意Eclipse必须用Java EE版本,否则可能会出错。
2.创建目标目录
mkdir ADT
3.执行脚本编译生成ADT
./sdk/eclipse/scripts/build_server.sh /home/liuhaoyu/android/ADT
注意,ADT必须写绝对路径,否则会出错。
4.打开Eclipse,安装编译得到ADT
我遇到一个问题,用android_2.3.7_r1编译出来的ADT比较旧,和同样用android_2.3.7_r1编译出来的SDK并不匹配,这两个搭配使用会有问题,而用网上下载的ADT-12.0.0和用android_2.3.7_r1编译出来的SDK可以正常使用。
另外,通过Eclipse在线安装ADT也不容易,所以,我们可以在网上下载ADT离线包,再安装到Eclipse上。下载ADT离线包的地址如下:后面的版本信息可根据需要更改。
http://dl.google.com/android/ADT-12.0.0.zip
七、运行Android模拟器
1.要手动运行模拟器,首先需要设置一些环境变量,这可以通过前面编译android前我们执行的两个命令来为我们设置好:
source build/envsetup.sh
lunch
其中lunch指定的选项必须跟编译Android时指定的一样,这里,我还是选择默认的第一项,即generic-eng。
2.启动模拟器
emulator
3.上面我们直接执行emulator即可运行模拟器启动Android,这时使用的默认Linux内核和默认Android系统,如果我们想自己指定要使用的Linux内核和Android系统,可以使用以下参数(见emulator -help):
-kernel <file> 指定要使用的内核镜像
-system <file> 指定要使用的system.img
-ramdisk <file> 指定要使用的ramdisk.img
-data <file> 指定要使用的userdata.img