Android系统编译

来源:互联网 发布:手机上怎么注册淘宝店 编辑:程序博客网 时间:2024/05/20 02:30

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,下载一个JDK6Java(注意版本)(如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++



再查看gccg++版本号:gcc -vg++ -v均显示gcc version 4.4.6 ,说明gcc 4.4安装成功


 

0 0
原创粉丝点击