Android 4.04 源码编译 (ubuntu 12.04)


原文:http://www.adaiw.com/?p=167

1 准备开发环境

下载sun-java6-jdk (NOT openjdk6)

REF:http://source.android.com/source/initializing.html

注意安装包,并连接libGL:

$ sudo apt-get install git-core 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 openjdk-6-jdk tofrodos \ python-markdown libxml2-utils xsltproc zlib1g-dev:i386
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

Ubuntu下无法安装sun-java6-jdk的解决办法

如果其它apt-get下载提示找不到包,就更新:source.list

如果apt-get 遇到407 Proxy Authentication Required ,那么修改 /etc/apt/apt.conf

? View CodeCONF
1
2
3
4
Acquire::http::proxy "http:///username:passwd@proxy:port/";
Acquire::https::proxy "https:///username:passwd@proxy:port/";
Acquire::ftp::proxy "ftp:///username:passwd@proxy:port/";
Acquire::socks::proxy "socks://username:passwd@proxy:port/";

2.下载最新源码

http://source.android.com/source/downloading.html

准备好13G以上的硬盘空间。

3 新建REPO/GIT branch

有了代码的第一需求,就是建一个GIT,REPO已经提供了这样的命令,帮助新建一个GIT分支:$repo start BRANCH PROJECT 这里PROJECT指的是源码根下面分的很多小项目,这些分例如:

? View CodeSHELL
1
2
3
$repo start oozicLauncher packages/apps/Launcher2/
$cdpackages/apps/Launcher2/
$git status

这下可以安心的修改源码了。呵呵呵呵

REF:http://source.android.com/source/version-control.html

4 编译源码

开4个线程MAKE:(官方推荐线程数是CPU数目加2)

$make -j4

遇到问题:

ERROR: prebuilts/tools/gcc-sdk/../../gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/bin/x86_64-linux-gcc only run on 64-bit linux
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/emulator64-target-arm_intermediates/tcg/tcg.o] Error 1
make: *** Waiting for unfinished jobs….
产生的原因是我的UBUNTU是32位的,要求64位。
牛人给了一个解决方法: external/qemu/Makefile.common externalqemu/Makefile.target 中关于-m64改为-m32
继续编译,紧接又遇到一个问题:android “error: gnu/stubs-64.h: no such file or directory 产生原因仍然是要64位系统
继续编译, 这次/out/target/product又编不过去了。
好吧,按官方的来,重装一个64位系统。
选择12.04LTS,下载ISO后,用pendrive生成USB安装盘。
开机选USB启动。
安装好后,GOTO STEP 1
5 在Ubuntu12.04下编译的问题:
make: *** [out/host/linux-x86/obj/ <wbr><span style="border:0px; font-family:inherit; font-style:inherit; margin:0px; outline:0px; padding:0px; vertical-align:baseline; color:rgb(255,0,0)">EXECUTABLES/emulator64-</span><br><span style="border:0px; font-family:inherit; font-style:inherit; margin:0px; outline:0px; padding:0px; vertical-align:baseline; color:rgb(255,0,0)">arm_intermediates/emulator64-</span><wbr><span style="border:0px; font-family:inherit; font-style:inherit; margin:0px; outline:0px; padding:0px; vertical-align:baseline; color:rgb(255,0,0)">arm] error 1</span></wbr></wbr>
原因是Ubuntu12.04装的是GCC4.6,编译ICS要用GCC4.4. Ubuntu11.10也有同样的问题。这样解决:
? View CodeSHELL
1
2
3
$sudo apt-get install gcc-4.4 g++-4.4
$lunch
$make CC=gcc-4.4 CXX=g++-4.4
经过中间机子卡死,按Ctrl+C停止,并重编后,终于完成编译。
用$emulator 看到熟悉的界面
参考
6 编译SDK
$make PRODUCT-sdk-sdk
7. 使用编译好的SDK
unzip out/host/linux-86/sdk/android-sdk_eng.herbertdai_linux-x86.zip
在Eclipse用使用这个新SDK。
遇到一个问题:显示SDK版本为Preview,并提示错误:
需要在AndroidManifest.xml 添加 minSdkVersion=”AOSP”。
然后也不能跑在设备上,设备的版本是4.0.3,version 15, 提示与AOSP不兼容。
这位高人给出解答: http://www.qkevin.com/archives/257
原来下载最新的源码都默认
PLATFORM_VERSION_CODENAME := AOSP 相当于一个当前正在开发的版本,即Preview版,不是正式版。
按他的方法, 我把 build/core/version_defaults.mk 中的PLATFORM_VERSION_CODENAME改为:
If this is a final release build, it is simply “REL”.
PLATFORM_VERSION_CODENAME := REL
再运行:
$make CC=gcc-4.4 CXX=g++-4.4
$make PRODUCT-sdk-sdk
成功。
这次的SDK显示版本为15, 而非“AOSP”。现在程序就可以正常跑在设备上了。
PS 如果要修改源码中字段的@hide属性,需要运行:
$make update-api
GOOGLE这样做,一是为了封闭其内部的一些属性和方法,防止外部程序乱用,二是隐藏一些正在开发中的组件,等成熟后再去掉@hide属性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值