一、安装设置 gcc、g++ 版本
Ubuntu 系统使用的 gcc、g++ 版本随着发布版本的不同而不同,在编译 Android 系统时不同的版本应该用相应版本的 gcc、g++去编译。因为每次 gcc、g++ 的版本升级,其语法规则都可能发生一些改变,所以在用高版本的 gcc、g++ 编译低版本的 Android 系统时,会有语法不兼容的现象,从而导致编译无法进行(会出现很多改不完的错误)。我的系统是 Ubuntu 14.04。

我们可以通过 gcc -v 命令查看一下 Ubuntu 默认安装的 gcc 版本,执行命令gcc -v 查看 gcc 版本。打印结果如下

gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04)


默认情况下,Ubuntu 是不会自动安装低版本的 gcc、g++ 版本的,如果我们想使用 gcc4.4 怎么办?首先看看有没有安装 gcc4.4,执行命令ls /usr/bin/gcc*

结果只有 /usr/bin/gcc /usr/bin/gcc-4.8 两个,没有 gcc-4.4,所以要先给它安装上去,执行安装命令

sudo apt-get install gcc-4.4


再查看一下系统已安装的 g++ 版本,执行命令ls /usr/bin/g++*,结果发现只有/usr/bin/g++ /usr/bin/g++-4.8 两个,要先安装它,执行安装命令

sudo apt-get install g++-4.4


安装好后执行下面的命令,修改各版本的优先级:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 50

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40

(后面跟的数字 40、50 表示优先级,值越大优先级越高)


接着执行下面的命令,修改系统默认使用的 gcc 版本:

sudo update-alternatives --config gcc


会看到如下的信息:有两个候选项可用

Selection Path Priority Status
------------------------------------------------------------
0 /usr/bin/gcc-4.4 40 auto mode
1 /usr/bin/gcc-4.4 50 manual mode

* 2 /usr/bin/gcc-4.8 40 manual mode


要维持当前值[*]请按回车键,或者键入选择的编号,要想用哪个版本的 gcc 就输入它对应的编号(输入 1 切换到 gcc-4.4 版本)。


类似的,设置一下默认的 g++ 版本

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 50

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 40


接着执行命令sudo update-alternatives --config g++,打印结果如下

Selection Path Priority Status
------------------------------------------------------------
0 /usr/bin/g++-4.4 40 auto mode
1 /usr/bin/g++-4.4 50 manual mode

* 2 /usr/bin/g++-4.8 40 manual mode

然后输入 1 切换到 g++-4.4 版本。


如果想删除可选项的话可以执行如下指令:

sudo update-alternatives --remove gcc /usr/bin/gcc-4.5


重新设置完成后,可以执行 gcc -v 命令来看一下版本是否改变了。


二、安装设置 Java Jdk


(所有版本的 Jdk 官方下载地址http://www.oracle.com/technetwork/java/javase/archive-139210.html

由于我 Ubuntu 上安装了多个版本的 Java Jdk,所以还要修改一个默认的 Jdk 版本,Android 2.3 需要的 Jdk 版本是 1.6。先执行一下 java -version 命令,查看一下当前系统默认使用的版本,发现当前系统使用的版本是 Jdk 1.7 的,如下

lion@lo:~/storm/android-dev/android2.3/android-2.3.7_r1$java-version
javaversion"1.7.0_79"
Java(TM)SERuntimeEnvironment(build1.7.0_79-b15)
JavaHotSpot(TM)64-BitServerVM(build24.79-b02,mixedmode)
为了切换到 Jdk 1.6,我们修改一下系统配置文件,执行 sudo gedit /etc/profile,打开系统配置文件。把之前的 JAVA_HOME 注释掉,再给新的 JAVA_HOME 赋值为 Jdk 1.6 的安装路径,如下:

#exportJAVA_HOME=/home/lion/storm/jdk1.7/jdk1.7.0_79
exportJAVA_HOME=/home/lion/storm/jdk1.6/jdk1.6.0_45
exportPATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$ANDROID_NDK:$PATH
exportCLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
保存退出,然后执行命令 source /etc/profile 重新加载环境变量。然后再次执行 java -version,这回就切换到 Jdk 1.6 了,打印如下 lion@lo:/etc/alternatives$java-version
javaversion"1.6.0_45"
Java(TM)SERuntimeEnvironment(build1.6.0_45-b06)
JavaHotSpot(TM)64-BitServerVM(build20.45-b01,mixedmode)


三、 进入 Android 源码根目录,执行 make 命令进行编译


编译过程中可能会出现一些错误,通常是缺少必要的依赖库,直接安装它们就行了,如 1. fatalerror:X11/Xlib.h:Nosuchfileordirectory(因为缺少必要的库) 解决方法: $sudoapt-getinstalllibx11-dev
2. /usr/bin/ld:cannotfind-lreadline

解决方法:sudo apt-get install libreadline6-dev lib32readline6-dev


在配置正确的情况下,错误是非常少的,如果你编译的过程中频频出错,那肯定是配置有问题。编译完成后会出现以下提示,说明编译成功 Generated:(out/target/product/generic/android-info.txt)
Targetsystemfsimage:out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
Installsystemfsimage:out/target/product/generic/system.img
Targetramdisk:out/target/product/generic/ramdisk.img
Targetuserdatafsimage:out/target/product/generic/userdata.img
Installedfilelist:out/target/product/generic/installed-files.txt
我们还需要设置一下环境变量,才能运行模拟器,执行命令 gedit ~/.bashrc,在打开的文件末尾添加 exportANDROID_PRODUCT_OUT=/home/lion/storm/android-dev/android2.3/android-2.3.7_r1/out/target/product/generic
ANDROID_PRODUCT_OUT_BIN=/home/lion/storm/android-dev/android2.3/android-2.3.7_r1/out/host/linux-x86/bin
exportPATH=$PATH:$ANDROID_PRODUCT_OUT_BIN:$ANDROID_PRODUCT_OUT;
保存退出,执行 source ~/.bashrc 使修改立即生效,然后就可以到 ../out/target/product/generic 目录执行命令启动模拟器了,启动命令如下 emulator-systemsystem.img-datauserdata.img-ramdiskramdisk.img (后边的 *.img 是启动模拟器需要的依赖文件),然后就可以看到模拟器启动起来了。

更多相关文章

  1. android activity的全新解析
  2. 2.Eclipse版本android 65535解决方案(原理等同android studio现
  3. 我的第一个Android升级版本
  4. Android(安卓)Studio ADB not responding. If you'd like to ret
  5. Android中为什么主线程更新UI,子线程执行耗时操作?
  6. 在Android(安卓)P版本中加入Face Unlock相关功能的讲解
  7. Android之Handler总结与Timer和TimerTask详解
  8. Android它Service
  9. Android(安卓)实现高斯模糊效果及低版本兼容

随机推荐

  1. Android(安卓)View概述
  2. 记录一下八款开源 Android(安卓)游戏引擎
  3. Android(安卓)浮动视图效果 第三种实现方
  4. Windows Phone与Android风格的对比
  5. Android(安卓)人脸识别了解一下 (上)
  6. SQLite在Android中的使用
  7. Android(安卓)L开发指南
  8. Android(安卓)如何将定制的Launcher成为
  9. Android崩溃日志收集是个什么鬼?
  10. 一些Activity小技巧