linux的个人空间 http://love.myleft.org/?21

日志

在 Ubuntu下编译 Android-x86源码

已有 59 次阅读 2010-7-27 17:20 |个人分类:Android|系统分类::编程|关键词:Ubuntu 源码 编译

1.获取源代码。
1)安装git:
$sudo apt-get install git-core 或 git

2)获取repo:
$wget http://android.git.kernel.org/repo >~/repo

3)下载源码:
$repo init -u git://git.android-x86.org/platform/manifest.git -b donut-x86
$repo sync

2. 编译环境建立
1)安装sun-java-jd。
sudo apt-get install sun-java6-jdk

2)其他的开发库和环境
# sudo apt-get install flex bison zlib1g-dev gperf libncurses5-dev
# sudo apt-get install zip genisoimage
# sudo apt-get install g++-multilib
# sudo apt-get install lib32z1-dev或者apt-get install lib64z1-dev

要解决gnu/stubs-64.h: No such file or directory,需:
apt-get install libc6-dev-amd64

要解决/usr/bin/ld: cannot find -lstdc++,需:
apt-get install g++-multilib lib64stdc++6 

要解决/usr/bin/ld: cannot find -lz,需
apt-get install lib64z1-dev

要解决/usr/bin/ld: cannot find -lncurses
sudo apt-get install libncurses5-dev

记得
sudo
ldconfig

如果已经安装这些库,那可能是因为这次库不是以so结尾的,创建一个so结尾的连接即可。

错误1:
/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory

解决:
sudo apt-get install libc6-dev-i386

3.编译系统,生成iso镜像
$make iso_img TARGET_PRODUCT=eeepc
$make iso_img  TARGET_PRODUCT=eeepc TARGET_CPU_ABI=x86 TARGET_ARCH=x86

如果已经编译过,可以直接生成ISO:

genisoimage -vJURT -b isolinux/isolinux.bin -c isolinux/boot.cat \
                -no-emul-boot -boot-load-size 4 -boot-info-table \
                -input-charset utf-8 -V "Android LiveCD" -o out/target/product/eeepc/eeepc.iso out/target/product/eeepc/boot out/target/product/eeepc/system.img out/target/product/eeepc/ramdisk.img out/target/product/eeepc/initrd.img out/target/product/eeepc/install.img out/target/product/eeepc/kernel

在虚拟机中安装SD CARD
首先系统已经安装在虚拟机中。
然后通过光盘启动系统。
然后加载虚拟机系统的磁盘。
建个文件夹用来加载
$ mkdir /dev/sda1
$ mount -o rw -t ext2 /dev/block/sda1 /dev/sda1
$ cd /dev/sda1
$ vi ./grub/menu.list
然后 加入 SDCARD=/android/sdcard

可以修改init.rc文件中
root/init.rc:
mount rootfs rootfs / ro remount system

eeepc/init.rc:
mount ext2 /dev/block/loop0 /system
mount ext2 /dev/block/loop0 /system ro remount system
安装成功之后:
adb connect 192.168.56.101:5555
adb shell
mount -o rw -t ext2 /dev/block/loop0 /system

问题:Ubuntu 升级为 9.10, 后 Android 源码无法编译通过怎么办?

原因:
    这是 gcc 和 g++ 的版本太高导致的问题。Ubuntu 9.04 是4.3, 而 9.10 是4.4.
    GCC 在 4.4 时把部份 string 相关的 function 回传值的 type 改变了...
    char* 改成了 const char*...
    也因此让一堆原本不是针对最新的gcc来写的code都无法编译成功。

解决方案:
    先下载 gcc-4.3 g++-4.3
    apt-get install gcc-4.3 g++-4.3

    删除原有的连接
    sudo rm /usr/bin/gcc
    sudo rm /usr/bin/g++

    添加新的连接
    sudo ln -s /usr/bin/gcc-4.3 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.3 /usr/bin/g++

问题:
    Ubuntu 中没有 Android 要求的 jdk 1.5, 怎么办?

解决方案一:
    安装 jdk 1.5。
    方法1:从官方网站上下载 jdk 1.5,安装。
    方法2:在 /etc/apt/sources.list 中添加 9.04 的源:
          deb http://mirrors.163.com/ubuntu/ jaunty main restricted universe multiverse
          deb http://mirrors.163.com/ubuntu/ jaunty-updates main restricted universe multiverse

           更新源,安装 jdk 1.5。

解决方案二:
    已经安装了jdk 1.6,修改 <src_home>/build/core/make.mk。(注,如果是2.0版本,修改 <src_home>/build/core/main.mk)
    在文件中搜索并分别把:
    java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')
    javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')
    改为
    java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1\.6[\. "$$]')
    javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1\.6[\. "$$]')

    如果你有其它的开发要使用 jdk 1.6 的话,采用解决方案二是一种不错的选择,它可以避免你在两个 jdk 之间切换。

    如果需要 make sdk,则需要把 javadoc 设置为 1.5 的。
    安装 javadoc 1.5版本,然后 sudo update-alternatives --config javadoc,选择 1.5 版本。
    不然会出现以下错误:
    javadoc: 错误 - 在 doclet 类 DroidDoc 中,方法 start 已抛出异常 java.lang.reflect.InvocationTargetException
    com.sun.tools.javac.code.Symbol$CompletionFailure: 未找到 sun.util.resources.OpenListResourceBundle 的类文件
    1 错误
    make: *** [out/target/common/docs/services-timestamp] 错误 45

====================
补充:常见问题解决方案
====================

1.找不到PRODUCT_POLICY
frameworks/policies/base/PolicyConfig.mk:22: *** No module defined for the given PRODUCT_POLICY (android.policy_phone).

解法: 修改build/tools/findleaves.sh的89行:
#find "${@:0:$nargs}" $findargs -type f -name "$filename" -print |
find "${@:1:$nargs-1}" $findargs -type f -name "$filename" -print |


2. fprintf未定义
frameworks/base/tools/aidl/AST.cpp:10: error: 'fprintf' was not declared in
this scope

解法:apt-get install gcc-4.3 g++-4.3,并重新ln gcc 和g++到 gcc-4.3 和g++-4.3

3.安装sun- java6-jdk,并且在环境变量中设置:
export JAVA_HOME=/usr/lib/jvm/java-6-sun/
export ANDROID_JAVA_HOME=$JAVA_HOME

这部分摘自:http://embeddeder.spaces.live.com/Blog/cns!8006E36532087D51!213.entry

附后:(from http://forum.xda-developers.com/archive/index.php/t-633274.html)

I notice that there is quiet a few people around that are having issues building the source, due to the lack on Sun-Java5 (1.5 JDK) in the Ubuntu Repositories.

In a hope it will encourage more developers, I'll post the following, which will build a full eclair system, on a new Ubuntu 9.10 x64 system.

$ mkdir ~/mydroid
$ mkdir mydroid/java5-packages
$ cd ~mydroid/java5-packages
$ wget http://mirror.pacific.net.au/linux/ubuntu/pool/multiverse/s/sun-java5/sun-java5-jre_1.5.0-18-1_all.deb
$ wget http://mirror.pacific.net.au/linux/ubuntu/pool/multiverse/s/sun-java5/sun-java5-bin_1.5.0-18-1_amd64.deb
$ wget http://mirror.pacific.net.au/linux/ubuntu/pool/multiverse/s/sun-java5/sun-java5-demo_1.5.0-18-1_amd64.deb
$ wget http://mirror.pacific.net.au/linux/ubuntu/pool/multiverse/s/sun-java5/sun-java5-jdk_1.5.0-18-1_amd64.deb
$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev java-common unixodbc
$ sudo dpkg -i --ignore-depends=sun-java5-bin sun-java5-jre_1.5.0-18-1_all.deb
$ sudo dpkg -i sun-java5-bin_1.5.0-18-1_amd64.deb
$ sudo dpkg -i --ignore-depends=sun-java5-jdk sun-java5-demo_1.5.0-18-1_amd64.deb
$ sudo dpkg -i sun-java5-jdk_1.5.0-18-1_amd64.deb
$ sudo update-java-alternatives -s java-1.5.0-sun
$ cd ..
$ wget http://android.git.kernel.org/repo
$ sudo mv repo /usr/bin/
$ chmod a+x /usr/bin/repo
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b eclair
$ rep sync
$ cd external/webkit/
$ git cherry-pick 18342a41ab72e2c21931afaaab6f1b9bdbedb9fa
$ cd ../../
$ wget --referer=http://developer.htc.com/google-io-device.html http://member.america.htc.com/download/RomCode/ADP/signed-google_ion-ota-14721.zip?
$ cd vendor/htc/sapphire-open/
$ ./unzip-files.sh
$ cd ../../../
$ . build/envsetup.sh
$ lunch aosp_sapphire_us-eng
$ make


路过

雷人

握手

鲜花

鸡蛋

漂亮

评论 (0 个评论)

facelist

御舟工作室. |联系我们

GMT+8, 2010-9-7 01:25, Processed in 0.016168 second(s), 16 queries.

Powered by Discuz! X1

© 2001-2010 Comsenz Inc.