A. 如何在32位ubuntu11.10 下编译android 4.0.1源码和goldfish内核
一准备工作
1安装javasdk6
(1)从jdk官方网站http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u29-download-513648.html下载jdk-6u29-linux-i586.bin文件。
(2)执行jdk安装文件
[html] view plain
$chmod a+x jdk-6u29-linux-i586.bin
$jdk-6u29-linux-i586.bin
(3)配置jdk环境变量
[html] view plain
$sudo vim /etc/profile
[html] view plain
#JAVAEVIRENMENT
exportJAVA_HOME=/usr/lib/java/jdk1.6.0_29
exportJRE_HOME=$JAVA_HOME/jre
exportCLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
保存后退出编辑,并重启系统。
2安装依赖包
[html] view plain
$sudo apt-get install git-core gnupg flex bison gperf build-essential\
zipcurlzlib1g-devlibc6-devlib32ncurses5-devia32-libs\
x11proto-core-devlibx11-devlib32readline5-devlib32z-dev\
libgl1-mesa-devg++-multilibmingw32tofrodospython-markdown\
libxml2-utils
3用repo工具下载源码
(1)初始化repo
[html] view plain
$cd ~
$mkdir bin
$curlhttps://dl-ssl.google.com/dl/googlesource/git-repo/repo>~/bin/repo
$chmod a+x ~/bin/repo
$exportPATH=$PATH:~/bin(导出环境变量)
(2)下载android最新源码
[html] view plain
$mkdir android
$cd android
$ repo init -u https://android.googlesource.com/platform/manifest -bandroid-4.0.1_r1
...(输入用户名和邮箱名)
$repo sync -j5
...(此处用5个线程开始下载源码,下载过程及其漫长,需要耐心等待)
二 编译源码
1开始编译
[html] view plain
$source build/envsetup.sh
includingdevice/samsung/maguro/vendorsetup.sh
includingdevice/samsung/tuna/vendorsetup.sh
includingdevice/ti/panda/vendorsetup.sh
includingsdk/bash_completion/adb.bash
$make-j4(此处用4个线程编译)
编译完成后,会看到类似的输出:
[html] view plain
Targetramdisk:out/target/proct/generic/ramdisk.img
Targetuserdatafsimage:out/target/proct/generic/userdata.img
Installedfilelist:out/target/proct/generic/installed-files.txt
2编译遇到的问题
编译错误:
[html] view plain
<命令行>:0:0:错误:“_FORTIFY_SOURCE”重定义[-Werror]
<built-in>:0:0:附注: 这是先前定义的位置
cc1plus:所有的警告都被当作是错误
make:*** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o]错误 1
原因:
因机器上的gcc版本过高,需替换成4.4.6重新进行编译。
解决方法:
1)安装4.4版本的gcc和g++
[html] view plain
$ sudo apt-get install gcc-4.4
$ sudo apt-get install g++-4.4
2)设置gcc版本,使gcc链接到gcc-4.4
[html] view plain
$ ls -l /usr/bin/gcc*
lrwxrwxrwx 1 root root 7 2011-11-01 23:56 /usr/bin/gcc -> gcc-4.6
-rwxr-xr-x 1 root root 224544 2011-10-06 05:47 /usr/bin/gcc-4.4
-rwxr-xr-x 1 root root 302104 2011-09-17 05:43 /usr/bin/gcc-4.6
$ cd /usr/bin
$ sudo mv gcc gcc.bak
$ sudo ln -s gcc-4.4 gcc
3)设置g++版本,使g++链接到g++-4.4
[html] view plain
$ sudo mv g++ g++.bak
$ sudo ln -s g++-4.4 g++
4)设置完毕后,重新进行编译即可
3从模拟器启动编译后的镜像文件
1)设置环境变量:
[html] view plain
export PATH=~/android/out/host/linux-x86/bin:$PATH
export ANDROID_PRODUCT_OUT=~/android/out/target/proct/generic
其中linux-x86/bin存放模拟器emulator工具,proct/generic存在编译后的镜像文件。
2)启动模拟器
[html] view plain
$emulator
emulator:WARNING: system partition size adjusted to match image file (162 MB >66 MB)
启动后的截图:
三 编译androidgoldfish内核
1)进入android4.0.1源码目录,下载goldfish内核源码
[html] view plain
$ mkdir kernel
$ cd kernel
$ git clone http://android.googlesource.com/kernel/goldfish.git
$ cd goldfish
$ git branch -a
* (no branch)
master
remotes/origin/HEAD -> origin/master
remotes/origin/android-goldfish-2.6.29
remotes/origin/master
$ git checkout remotes/origin/android-goldfish-2.6.29
2)修改Makefile
[html] view plain
goldfish$ gedit Makefile
修改
[html] view plain
ARCH ?=$(SUBARCH)
CROSS_COMPILE ?=
为
[html] view plain
ARCH ?=arm
CROSS_COMPILE ?=arm-eabi-
3)导出交叉编译器目录为环境变量
$ export PATH=$PATH:~/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
4)编译内核
[html] view plain
goldfish$ make goldfish_armv7_defconfig
goldfish$ make
编译完成后,可看到类似如下的输出:
[html] view plain
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
5)从模拟器中启动内核镜像
[html] view plain
$emulator -kernel ~/android/kernel/goldfish/arch/arm/boot/zImage &
启动模拟器后,可从Settings->System->AboutPhone中查看内核版本信息。
B. 怎么在Ubuntu编译Android2.3源代码以及制作自己的SDK
网上下一个软碟通软通(UitraISO)工具、然后去官网上下载一个64位ubuntu.*.iso系统文件、然后软碟通工具自己制作一个USB启动盘(非常简单)不会用软碟通的网络一下一大把!、系统最好是10.40以上的版本
使用的是ubuntu官网下载的ubuntu10.04 LTS 64位版本(ubuntu-10.04.2-desktop-amd64.iso)
配置软件源:
系统安装完毕以后应该首先换一个速度快的软件源
一般用的是ubunt
不然下载各种更新和软件包的时候非常的慢
安装JDK:
我要编译的是2.3姜饼的源代码 所以需要使用jdk6 (还需要是64位的系统)
如果是32为系统藐视jdk要安装jdk5.0的吧!藐视说有个doc什么的不行!所以系统一般装64的、如果是32的小伙们赶快把jdk看看
安装方法:
打开终端
输入
sudo add-apt-repository "deb "
sudo add-apt-repository "deb-src "
sudo apt-get update
sudo apt-get install sun-java6-jdk
就安装好了 (ubuntu10.04 LTS版会自带那两个源)
并且不需要配置环境变量
这一步可以参考
安装各种软件包:
终端中输入
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 texinfo libsdl-dev libwxgtk2.6-dev
最后三个是我补充的 其他都是官方文档提供的
这一步可以参考
下载源代码:
打开终端并输入
mkdir ~/bin
PATH=~/bin:$PATH
这两句是在你的个人文件夹下创建了一个名字叫bin的文件夹 并且把其加入到了环境变量中
再输入
curl ; ~/bin/repo
chmod a+x ~/bin/repo
这两句首先在bin目录下面下载了一个repo文件 repo简单来说就说用来版本控制的 我们就是用的它来同步代码
然后建立一个用来存放源代码的文件夹 我的这个文件夹的名字是android2.3
输入
mkdir android2.3
cd android2.3
进入android2.3目录
输入
repo init -u git://androi/platform/manifest.git -b gingerbread
在此说明一下:
安卓总称:“机器人”
1.5系统:“纸杯蛋糕”
Android 1.6 Donut甜甜圈
Android 2.0 Eclair松饼
Android 2.1 Eclair松饼
Android 2.2 Froyo冻酸奶
Android 2.3 Gingerbread姜饼(以上系统都是用于手机的)官方消息说2.4准备出来了!至于3.0目前只用于平板电脑
Android 4.0 Ice Cream Sandwich(简称ICS,冰淇淋三明治),
表示你需要的代码是姜饼的 所以最后是gingerbread 如果是2.2代码 就把gingerbread改成froyo
然后你需要输入你的名字跟邮箱地址
如果提示找不到repo命令的话 需要重新设置环境变量 就是之前的PATH=~/bin:$PATH
输入
repo sync
开始同步代码 这个过程会根据你的网速来决定快慢
这一步需要下载的数据有3g那么大
可以续传 一次没下完也没关系
如果之前就已经下过一次的话 只需要把源代码目录(我的是android2.3)下有一个叫.repo的隐藏文件夹里的projects文件夹备份出来就可以了
以后还需要同步的时候再把projects文件夹拷贝回去
ctrl+h查看隐藏文件
这一步可以参考
编译整个源代码:
cd android2.3
进入你的代码目录
输入
. build/envsetup.sh
注意.和build中间有个空格
输入
lunch full-eng
make -j2
输入make就是开始编译代码了 加一个-j2参数就是开两个线程去编译 速度会快些 我花了两个小时的时间
编译完毕以后马上输入
emulator
就可以运行模拟器了 系统能跑起来就说明编译成功了
如果提示找不到emulator命令的话
需要添加环境变量
在android2.3目录下的out/target/proct/generic文件夹下会看到system.img
能看到的话应该算是成功了
这一步可以参考
编译SDK:
这一步在官方网站上没有说明
但是在源代码文件夹里面有文档提到了
就是在android2.3/sdk/docs目录下有一个叫howto_build_SDK.txt的文件介绍了如何编译SDK
原文
Then once you have all the source, simply build the SDK using: $ cd ~/my-android-git $ . build/envsetup.sh $ lunch sdk-eng $ make sdk
看来不需要先编译整个系统再编译SDK 可以直接上来就编译SDK
按提示输入
make到时候也可以加上-j参数 比如 make -j2 sdk
但是不推荐 因为容易编译失败 而且编译SDK只需要二十多分钟到时间 不算很长
当出现
Package SDK: out/host/darwin-x86/sdk/android-sdk_eng.<build-id>_mac-x86.zip
的时候 就表示编译成功了 其中<build-id>默认是系统的用户名
howto_build_SDK.txt中还提到了编译ADT插件
我发现自己编译到ADT插件竟然认不到platform 自己编译出来到SDK也一样
原因不明
只要使用官方的SDK和ADT就没有问题了
具体就是把自己编译出来platform拷贝到官方SDK里到platforms文件夹下 搞过Android开发都懂的
最后:
非常简单的一步
就是直接修改源代码然后编译SDK就可以得到自己的SDK了
我就示范一个简单的例子 抛砖引玉
首先我找到TextView的代码
在frameworks/base/core/java/android/widget 如图
我在updateTextColors方法的开头添加了一句System.out.println
打印了一句话"Source Code Changed"
updateTextColors方法会在TextView的setTextColor方法中被调用
好 保存
编译
然后使用这个platform
新建一个项目
调用一下TextView的setTextColor方法看看有什么效果
一个很简单的例子
看看
Source Code Changed被打出来了
SDK修改成功
C. 怎么在ubuntu上编译android源码
步骤一:
安装Ubuntu系统。我们既可以通过虚拟机的方式安装Ubuntu,也可以直接在电脑上安装,为了获得更好的Linux操作体验,我建议直接在电脑上面安装Ubuntu,我在自己电脑上安装了win10和Ubunut Server14.04双系统,使用的时候可以根据自己的需要随时切换系统,非常方便。关于如何搭建双系统,网上有很多教程,我就不在此叙述了,但是我想说明的一点是在安装Ununtu的时候,分配给Ubuntu的磁盘空间一定要尽可能大一点,至少60G,我分配了105G,编译完成之后还剩下50多G,也就是说差不多用了近50G的空间,所以安装Ubuntu的时候一定得分配大一点的磁盘空间,不然编译会因为空间不足而中断。
步骤二:
搭建好Ubuntu系统之后,我们需要下载一份Android6.0的源码,网上很多文章都介绍了如何通过repo的方式来下载源码,但是通过这种方式下载速度可能并不是很理想,直接下载网络云的Android6.0源码,
因为Android6.0的源码所占空间非常大,所以上传者把Android源码分成了很多个文件,待全部下载完毕之后,我们可以通过命令把这些分开的文件合并为一个文件。
步骤三:
如果我们是在Windows上下载的源码,那么当我们打开Ubuntu之后,要做的第一件事请就是把Windows中的Android源码拷贝到Ubuntu系统下面,我直接利用复制粘贴的方式将源码拷贝到了Ubuntu的Home目录下面,拷贝之后的目录结构Home/android6_r1/各个分开的源码文件。
步骤四:
合并这些被分开的源码文件。我们按下键盘上的ctrl + alt + T打开控制台,通过cd命令进入到Home/android6_r1/目录下面,然后执行命令:cat Android6_r1_* > M.tgz,不用多久,在Home/android6_r1/目录下面就会生成一个新的文件——M.tgz,M.tgz就是合并之后的压缩文件。
步骤五:
解压步骤四生成的压缩文件。同样是在Home/android6_r1/目录下面,我们在控制台执行命令:tar zxvf M.tgz,开始解压。解压的过程大概需要20分钟左右的时间,请耐心等待。解压好了之后,在Home/android6_r1/会生成一个mydroid的文件夹,这个文件夹就是Android源码的根文件夹了,里面有abi、devices、hardware、packages、sdk、art等文件夹和文件。
步骤六:
安装编译源码所需要的软件。在控制台中我们通过cd..命令退回到Unbuntu用户的根目录下,然后依次执行以下命令:
sudo apt-get update
sudo apt-get install openjdk-7-jdk
sudo update-alternatives --config java
sudo update-alternatives --config javac
以上命令每一条都必须分开单独执行,目的是为了获取1.7版本的jdk并设置环境变量。当我们安装完Ubuntu之后可能会自带一个jdk,但是如果用自带的jdk编译Android源码很可能会提示jdk版本不符合要求的错误,因此我们需要重新下载1.7版本的jdk,我用openjdk-7-jdk编译未出现任何问题。
接下来继续执行以下命令,同样每一行都是分开单独执行的:
sudo apt-get install git gnupg flex bison gperf build-essential
sudo apt-get install zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386
sudo apt-get install libgl1-mesa-dev g++-multilib mingw32 tofrodos
sudo apt-get install python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
以上命令主要是安装编译源码时需要用到的各种软件,如果没有安装这些软件,编译的过程中会提示缺少必要的软件而无法继续编译,因此,在正式编译源码之前,一定要先安装这些软件。
步骤七:
开始编译。在控制台中通过cd命令进入到Home/android6_r1/mydroid/目录下,然后执行命令:source build/envsetup.sh,导入编译Android源码所需的环境变量和其它参数。
步骤八:
在控制台中执行命令:lunch,运行命令之后会提示我们选择编译目标。这里我选择的的默认目标,即aosp_arm_eng。
步骤九:
在控制台中执行命令:make -j8,开始编译。注意,make -j8命令中的数字8和我们电脑的CPU核心数以及线程数有关系,一般这个数字的数值最大不能超过CPU线程数的2倍,例如我电脑的处理器是i5 6200U,为双核四线程,因此编译Android源码的时候,我可以设置的最大工作线程数量为4 * 2 = 8。在执行make命令的时候我们应该根据自己的CPU参数设置合理的工作线程数值。
以上步骤执行完之后,就是一段非常漫长的等待了,我从中午十二点多开始编译,一直到晚上九点多编译完成,整个编译过程耗时九个多小时,幸好我的运气还不错,编译过程中没有出现任何错误,只是中途意外中断了一次,但是Android源码是可以接着上次中断的位置继续编译的,已经编译的部分不会重复编译,因此并未对我造成大的影响。同志们,我想说的是,编译的过程中一定要有耐心哟!
整个源码编译完成之后,如果提示如下信息,那么Congratulations, you are successful!!!
D. 在android4.0.几的版本上会出现这个问题,在线求解答
看不见
E. ubuntu 编译android源码 java虚拟机吗
通过参考网上的相关资料,我编译Android源码的步骤如下:
1 我的系统是Ubuntu 8.04
2 系统上必须安装以下工具(摘自网上的资料):
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 flex
sudo apt-get install bison
sudo apt-get install patch
sudo apt-get install texinfo
sudo apt-get install libncurses-dev
sudo apt-get install git-core gnupg //(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(可选,有21M大,我觉得一般人是用不到的)
sudo apt-get install python2.5 (实际上不用装,Ubuntu 8.04 已经自带)
sudo apt-get install sun-java5-jdk
注意:
a. 不要用 sun-java6-jdk, 不然在make sdk, 具体来说是make doc这一步中, 遇到这个错误:
Docs droiddoc: out/target/common/docs/dx
javadoc: error - In doclet class DroidDoc, method start has thrown an
exception java.lang.reflect.InvocationTargetException
com.sun.tools.javac.code.Symbol$CompletionFailure: class file for
sun.util.resources.OpenListResourceBundle not found
b. 网上资料说需要设置环境变量, 但我并没有设置:
export ANDROID_JAVA_HOME=$JAVA_HOME
c. 网上并没有提及要安装ncurses-dev, 但安装之前我编译过程中会出现编译错误.
3 建立android源码的存放目录
$ mkdir ~/open_src
$ mkdir ~/open_src/android
$ cd ~/open_src/android
$ mkdir bi
4 下载repo脚本,放到~/open_src/android/bin目录下,加上可执行权
$ curl http://android.git.kernel.org/repo > repo
$ sudo mv repo ~/open_src/android/bin
$ sudo chmod a+x ~/open_src/android/bin/repo
5 在源码存放目录android中执行
$ ~/open_src/android/bin/repo init -u git://android.git.kernel.org/platform/manifest.git
//中间会提示输入电子邮件什么的,如果你打算要提交patch的话,用google accounts注册过的邮箱
6 在android目录中执行repo sync就可以开始下载源码了.
我们也可以从其他地方把源码复制到android目录, 而我正是这么做的.
7 编译源码, 并得到~/open_src/android/out 目录
在命令行执行make命令:
$make
这是一个很漫长的过程, 等吧......
8 测试运行
8.1 先设置环境变量:
打开~/.bashrc文件, 并在最后添加下面两行:
export PATH=$PATH:~/open_src/android/out/host/linux-x86/bin
export ANDROID_PRODUCT_OUT=~/open_src/android/out/target/proct/generic
8.2 运行模拟器:
emulator --debug-init -skin QVGA-L //可能会提示unknown option: --debug-init, 去掉--debug-init即可
或者直接执行emulator, 这样使用的是默认的皮肤
如果最后能进入到系统并看到一个大时钟, 说明就大功告成了.
9 后续编译:
先在android目录下执行
$ . build/envsetup.sh
然后你就会多出几个可用的命令。在改了Contacts联系人项目后,可以简单的执行一下命令来单独编译这个部分:
$mmm packages/apps/Contacts/
为了可以直接测试改动,需要生成新的system.img,在android目录下执行:
$ make snod
当然,如果你改动的是emulator或者其它外围相关的,而非系统内部的东西,就不只是要重新生成system.img了
F. 自己可以编译安卓源码吗
用最新的Ubuntu 16.04,请首先确保自己已经安装了Git.没安装的同学可以通过以下命令进行安装:
sudo apt-get install git git config –global user.email “[email protected]” git config –global user.name “test”
其中[email protected]为你自己的邮箱.
简要说明
android源码编译的四个流程:1.源码下载;2.构建编译环境;3.编译源码;4运行.下文也将按照该流程讲述.
源码下载
由于某墙的原因,这里我们采用国内的镜像源进行下载.
目前,可用的镜像源一般是科大和清华的,具体使用差不多,这里我选择清华大学镜像进行说明.(参考:科大源,清华源)
repo工具下载及安装
通过执行以下命令实现repo工具的下载和安装
mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo
补充说明
这里,我来简单的介绍下repo工具,我们知道AOSP项目由不同的子项目组成,为了方便进行管理,Google采用Git对AOSP项目进行多仓库管理.在聊repo工具之前,我先带你来聊聊多仓库项目:
我们有个非常庞大的项目Pre,该项目由很多个子项目R1,R2,...Rn等组成,为了方便管理和协同开发,我们为每个子项目创立自己的仓库,整个项目的结构如下:
这里写图片描述
执行完该命令后,再使用make命令继续编译.某些情况下,当你执行jack-admin kill-server时可能提示你命令不存在,此时去你去out/host/linux-x86/bin/目录下会发现不存在jack-admin文件.如果我是你,我就会重新repo sync下,然后从头来过.
错误三:使用emulator时,虚拟机停在黑屏界面,点击无任何响应.此时,可能是kerner内核问题,解决方法如下:
执行如下命令:
通过使用kernel-qemu-armv7内核 解决模拟器等待黑屏问题.而-partition-size 1024 则是解决警告: system partion siez adjusted to match image file (163 MB >66 MB)
如果你一开始编译的版本是aosp_arm-eng,使用上述命令仍然不能解决等待黑屏问题时,不妨编译aosp_arm64-eng试试.
结束吧
到现在为止,你已经了解了整个android编译的流程.除此之外,我也简单的说明android源码的多仓库管理机制.下面,不妨自己动手尝试一下.
G. 编译android 源码需要sdk环境吗
下面是android学习手册,可以查看编译源码,360手机助手中下载,
编译环境:ubuntu9.10,widnows平台目前不被支持。
1)安装必要的软件环境
$ 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
2)设置环境变量
$ 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
3)安装repo(用来更新android源码)
创建~/bin目录,用来存放repo程序,如下:
$ cd ~
$ mkdir bin
并加到环境变量PATH中,在第2步中已经加入。
下载repo脚本并使其可执行:
$ curlhttp://android.git.kernel.org/repo>~/bin/repo
$ chmod a+x ~/bin/repo
4)初始化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的隐藏目录。
5)同步源代码
$ repo sync
这一步要很久很久。
6)编译android源码,并得到~/android/out目录
$ cd ~/andoird
$ make
这一过程很久。
7)在模拟器上运行编译好的android
编译好android之后,emulator在~/android/out/host/linux-x86/bin下,ramdisk.img,system.img和userdata.img则在~/android/out/target/proct/generic下。
$ cd ~/android/out/host/linux-x86/bin
增加环境变量
$ emacs ~/.bashrc
在.bashrc中新增环境变量,如下
#java 程序开发/运行的一些环境变量
export ANDROID_PRODUCT_OUT=~/android/out/target/proct/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/proct/generic
$ emulator -system system.img -data userdata.img -ramdisk ramdisk.img
最后进入android桌面,就说明成功了。
8)编译模块
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 moles in the current directory.
- mmm: Builds all of the moles 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/proct/generic/data/app/ContactsTests.apk
out/target/proct/generic/system/app/Contacts.apk
可以使用
$ make snod
重新生成system.img,再运行模拟器。
9)编译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、我们从网上下载的Android 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只是做了而已。
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
10)编译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
H. android development 怎么编译
很多开发者可能下载后编译的Android SDK是Linxu下使用的,如何编译Windows下的Android SDK呢? 这里Android123总结如下:
1. 首先必须在Linux下执行完源码下载,就是reop sync后,首先做一次完整编译,执行make,然后编译Linux下的SDK,执行make sdk即可,在这之前的操作,可以参考 Android源码编译相关问题汇总
2. 这时候在生成out目录下的内容考回到Windows下,如果你用虚拟机这一步只需要拖动操作即可,比较简单。
3. 下载Cygwin,Android开发网提示安装时记住选择Unix/binary而不是DOS/text国内的很多文章均写错了,不然无法正确编译,这在Android官方的howto_build_SDK.txt中写的很详细,具体为When installing Cygwin, set Default Text File Type to Unix/binary, not DOS/text. This is really important, otherwise you will get errors when trying to checkout code using git
4. 安装Cygwin需要下载的包有 autoconf, bison, curl, flex, gcc, g++, git, gnupg, make, mingw-zlib, python, zip, unzip,建议安装 diffutils, emacs, openssh, rsync, vim, wget ,不要安装readline。
5. 然后在Windows下将从Linux从预编译生成的zip一般名为android-sdk_eng.[你电脑的名称]_linux-x86.zip文件找出来,这是Linux下的SDK。
6. 按照howto_build_SDK.txt的步骤,其中最后一步为development/build/tools/make_windows_sdk.sh /path/to/macos/or/linux/sdk.zip ~/mysdk、
最后Android123提示大家,make_windows_sdk.sh是你在Linux下development/build/tools/才有的。
I. 如何把CyanogenMod 移植到到自己的android设备上
工欲善其事,必先利其器
1、基础环境
使用的环境:ubuntu 11.04环境,测试的Android机器 华为:C8500。
官方文档列出开发需要下列的软件包以及下载来源:
Python 2.5 -- 2.7, python.org.
GNU Make 3.81 -- 3.82, gnu.org
JDK 6 if you wish to build Gingerbread or newer; JDK 5 for Froyo or older. You can download both from java.sun.com.这里安装的是JDK6
Git 1.7 or newer. git-scm.com.
官方文档说11.10的运行以下的安装命令如下:
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \
libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \
libxml2-utils xsltproc
网上有一安装的指引给出另一个安装命令
$sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev sun-java6-jdk pngcrush schedtool
由于懒得逐个包去甄别,上述两条命令我都运行和安装了。
注意:sun-java6-jdk是无法安装的,可以自己下载
2、关于 USB 访问权限
Android的开发和调试使用的最主要连接设备的命令 adb和fastboot都需要使用USB连接,从文档上知道,Ubuntu下面USB的访问权限可能会出问题,解决的方法文档也列明了。
我的经验是如果访问不了连接的USB设备了,再查阅资料处理。为了以备以后查阅,记录下来如下:
针对摩托罗拉的设备,使用root文件创建/lib/udev/rules.d/11-android.rules,生成下列的配置到文件中。#号为注释符号,下列配置,第一行针对一种设备,第二行针对所有摩托罗拉设备。
#SUBSYSTEM=="usb", ATTRS{idVendor}=="22b8", ATTRS{idProct}=="41db",MODE="0666,OWNER="shallon"
SUBSYSTEM=="usb", ATTRS{idVendor}=="22b8", MODE="0666", OWNER="shallon" #All Motorola
其中的idVendor和idProct的值怎么来呢?用USB线连接设备,然后运行lsusb可以看到设备的这两个值,例如,下文显示摩托罗拉的ME811的相肆悄氏关配置值就是22b8和41db。
Bus 001 Device 082: ID 22b8:41db Motorola PCS Droid/Milestone (Debug mode)
Bus 001 Device 083: ID 046d:c018 Logitech, Inc. Optical Wheel Mouse
3、安装repo
repo是一种更好的用git的一种工具环境。下面命令中repo安装到用户home目录的bin目录下。
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
4、下载安装Android 源码
如果不打算编译Android源码,可以跳过。在WORKING_DIRECTORY上下载源代码,使用repo init命令指定下载源代码的版本,-b 参数指定版本号,如裂散果不指定,则是运渗最近的一个版本。
repo sync则是下载/同步代码的命令。
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
$ repo init -u https://android。googlesource。com/platform/manifest
$ repo init -u https://android。googlesource。com/platform/manifest -b android-4.0.1_r1
$ repo sync
4.a、下载 cyanogenmod 的源码可以生成自定义的 Android Rom
CyanogenMod 致力于生成第三方的非官方的 Android 的 Rom ,目前比较火爆的小米手机的MIUI就是CyanogenMod的衍生产品。下面的命令获取 gingerbread 的版本的源代码。如果不打算尝试这些工作可以跳过此步。
$ mkdir -p ~/cyanogenmod
$ repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
$ repo sync -j16
n这里是16,表示同时打开的网络链接数,开启多个网络连接来下载,用以提升的下载的速度。
5、下载开发编译用的Android SDK
参考的官方文档:http://developer。android。com/sdk/installing.html
5.1下载eclipse开发环境,推荐安装“Eclipse Classic”版本,介质下载的地址:http://www.eclipse.org/downloads/ 不用eclipse者可以略过
5.2下载Android SDK,介质安装的地址:http://developer。android。com/sdk/index.html
5.3下载安装eclipse 的ADT plug-in,ADT是 Android Development Tools的缩写。
5.4安装相关的工具包开发包。
安装的方法,可以从eclipse的IDE界面启动Android SDK Manager, Window > Android SDK Manager,或者在Android SDK的根目录运行android命令。
下列的开发包必须要安装:“SDK Tools”,“SDK Platform-tools”,“Android platforms(选择一个或者多个)”
6、测试Android SDK的主要开发工具
6.1 adb
使用USB线连接一台测试的Android设备,运行adb 的两个命令
~/android/sdk/android-sdk-linux/platform-tools$ ./adb devices
List of devices attached
0A3AABB70502A00A device
以及
~/android/sdk/android-sdk-linux/platform-tools$ ./adb shell 连接上设备,能够看到设备上的文件系统,证明adb的工具运作正常。
adb的工具很重要,主要用来调测设备。如果设备被“root”(系统被破解,开放了设备的管理员权限),连接上设备之后,能进行安装、删除软件,远程上传/下载文件,以及查看系统的日志等操作。如果设备没有“root”,则可以用的操作少很多。
6.2 fastboot
fastboot则是用来刷机的,主要用到的操作如下:
fastboot flash userdata userdata.img
fastboot flash system system.img
fastboot flash boot boot.img
fastboot reboot
6.3 SDK上的Android模拟器
~/android/sdk/android-sdk-linux/tools$ ./emulator ,显示命令存在,但是报错了,不要紧,这里运行一下只是看看是否正常安装了。