作者:刘昊昱

博客: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目录下会有对应的commongoldfishmsmomapsamsungtegar目录。选择一个目录进入,里面没有任何文件,这时,需要执行如下命令:

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

更多相关文章

  1. Android adb shell命令大全
  2. Android 签名打包(cmd命令行)
  3. Android版本问题记录:Android 8.0下异常Only fullscreen opaque a
  4. Android模擬器adb命令介紹
  5. 《Android/OPhone开发完全讲义》连载(4):Android SDK中常用命令行工

随机推荐

  1. 什么是一个很好的JS库,可以调整大小?
  2. extjs4 desktop 实现仿win7效果的桌面窗
  3. 谷歌地图API V3的使用限制是每个网站访问
  4. 可编辑的jquery表格插件
  5. Js中获取超链接里面传递的参数值
  6. 如何在SOF上的新帖子中没有像“Grippie”
  7. 覆盖odoo 8中的JS函数
  8. 八款Js框架介绍及比较,Dojo 、Scriptacul
  9. javascripterror 为空或不是对象.
  10. 使用js更改抛出事件的输入值