Ubuntu12.04LTS + JDK6 + android-4.0.1_r1
1,安装一些工具库
A,$ sudo apt-get install git gnupg flex bison gperf build-essential \
zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
libgl1-mesa-dev g++-multilib mingw32 tofrodos \
python-markdown libxml2-utils xsltproc zlib1g-dev:i386
B,$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
2,安装JDK6
A,在/usr/lib下创建目录Java
B,下载一个JDK6到Java(注意版本)(如755 jdk-6u11-linux-i586.bin)
C,进入Java,
chmod 755 jdk-6u11-linux-i586.bin
./jdk-6u11-linux-i586.bin(得到加压目录jdk1.6.0_27)
D,环境变量配置
sudo vi /etc/profile
添加以下内容:
export JAVA_HOME=/usr/java/jdk1.6.0_27
export JAVA_BIN=/usr/java/jdk1.6.0_27/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
E,让/etc/profile文件修改后立即生效 ,可以使用如下命令:
# . /etc/profile
注意: . 和/etc/profile 有空格
F,重启测试
java -version
输出如下,成功:
java version "jdk1.6.0_02"
Java(TM) 2 Runtime Environment, Standard Edition (build jdk1.6.0_02)
Java HotSpot(TM) Client VM (build jdk1.6.0_02, mixed mode)
3,下载源码
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl http://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ 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(下载版本为android-4.0.1_r1)
$ repo sync(同步,时间很长)
4,设置缓存,加快编译
在 ~.bashrc中添加
export USE_CCACHE=1
进入源码目录
$ cd WORKING_DIRECTORY
输入
prebuilt/linux-x86/ccache/ccache -M 50G(4.0及以下版本)
或者
prebuilts/misc/linux-x86/ccache/ccache -M 50G(4.0及以上版本)
5,编译
$ source build/envsetup.sh or $ . build/envsetup.sh
$ lunch 选版本
$ make -j4(编译)
6,运行
A, 刚编译完,直接输入emulator
B, 重新打开终端,
1) 运行source build/envsetup.sh
2) lunch 刚才所选版本
3) emulator
编译模块
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 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来编译指定目录的模块,如编译联系人:
mmm packages/apps/Contacts/
编完之后生成两个文件:
out/target/product/generic/data/app/ContactsTests.apk
out/target/product/generic/system/app/ Contacts.apk
可以使用make snod重新生成system.img
再运行模拟器
降低gcc版本
通过gcc -v命令可以发现gcc库在/usr/lib/gcc/i686-linux-gnu目录下,该目录下有当前系统支持的各种版本gcc库 。
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
装完后在/usr/bin目录下
$ ls -l gcc*
lrwxrwxrwx 1 root root 7 2011-10-29 09:11 gcc -> gcc-4.6
-rwxr-xr-x 1 root root 224544 2011-10-06 05:47 gcc-4.4
-rwxr-xr-x 1 root root 302104 2011-09-17 05:43 gcc-4.6
发现gcc 链接到gcc-4.6, 需要将它改为链接到gcc-4.4 :
sudo mv gcc gcc.bak
sudo ln -s gcc-4.4 gcc
同理
ls -l g++*
lrwxrwxrwx 1 root root 7 2011-08-14 15:17 g++ -> g++-4.6
-rwxr-xr-x 1 root root 228640 2011-10-06 05:45 g++-4.4
-rwxr-xr-x 1 root root 306200 2011-09-17 05:39 g++-4.6
需要将g++链接改为g++-4.4:
/usr/bin$ sudo mv g++ g++.bak
/usr/bin$sudo ln -s g++-4.4 g++
再查看gcc和g++版本号:gcc -vg++ -v均显示gcc version 4.4.6 ,说明gcc 4.4安装成功