«

Ubuntu14.04 Android 源码编译

时间:2024-3-2 19:15     作者:韩俊     分类: Android


一、安装设置 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

java version "1.7.0_79"

Java(TM) SE Runtime Environment (build 1.7.0_79-b15)

Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

为了切换到 Jdk 1.6,我们修改一下系统配置文件,执行 sudo gedit /etc/profile,打开系统配置文件。把之前的 JAVA_HOME 注释掉,再给新的 JAVA_HOME 赋值为 Jdk 1.6 的安装路径,如下:

export JAVA_HOME=/home/lion/storm/jdk1.7/jdk1.7.0_79

export JAVA_HOME=/home/lion/storm/jdk1.6/jdk1.6.0_45

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$ANDROID_NDK:$PATH

export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

保存退出,然后执行命令 source /etc/profile 重新加载环境变量。然后再次执行 java -version,这回就切换到 Jdk 1.6 了,打印如下

lion@lo:/etc/alternatives$ java -version

java version "1.6.0_45"

Java(TM) SE Runtime Environment (build 1.6.0_45-b06)

Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)


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


编译过程中可能会出现一些错误,通常是缺少必要的依赖库,直接安装它们就行了,如

  1. fatal error: X11/Xlib.h: No such file or directory(因为缺少必要的库)
    解决方法:$sudo apt-get install libx11-dev

  2. /usr/bin/ld: cannot find -lreadline

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


在配置正确的情况下,错误是非常少的,如果你编译的过程中频频出错,那肯定是配置有问题。编译完成后会出现以下提示,说明编译成功

Generated: (out/target/product/generic/android-info.txt)

Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img

Install system fs image: out/target/product/generic/system.img

Target ram disk: out/target/product/generic/ramdisk.img

Target userdata fs image: out/target/product/generic/userdata.img

Installed file list: out/target/product/generic/installed-files.txt

我们还需要设置一下环境变量,才能运行模拟器,执行命令 gedit ~/.bashrc,在打开的文件末尾添加

export ANDROID_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

export PATH=$PATH:$ANDROID_PRODUCT_OUTBIN:$ANDROID PRODUCT_OUT;


保存退出,执行 source ~/.bashrc 使修改立即生效,然后就可以到 ../out/target/product/generic 目录执行命令启动模拟器了,启动命令如下

emulator -system system.img -data userdata.img -ramdisk ramdisk.img
(后边的 *.img 是启动模拟器需要的依赖文件),然后就可以看到模拟器启动起来了。

标签: android

热门推荐