您的位置:首页 > 编程语言

从源代码编译anroid详细步骤(包括错误排查)

2011-04-30 22:10 447 查看
前几天编译过了anroid的内核,现在想把所有的代码都编译一遍,熟悉一下anfroid的基本流程。看到大牛们都在编译,咱也来试试。(ubuntu系统,gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) ,java version "1.6.0_20"




如何下载源代码这里不再述,网上的教程太多,下面主要着手编译,和处理编译过程中所遇到的处误,所有的代码都放在myandroid下。


1.17:30开始编译:


    进入anroid目录下,运行make命令。这里要把java版本的检查,build/core/main.mk要求java版本为1.5,我们修改其中的两行代码:


 

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[/. "$$]')




在build/core/main.mk中找到这两行代码分别修改为:

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[/. "$$]')

把源代码中的5修改为6便可以了。

 (另一种做法是把java的版本改为1.5。)

继续执行make命令

2.17:40

st Executable: atree (out/host/linux-x86/obj/EXECUTABLES/atree_intermediates/atree)

true

Install: out/host/linux-x86/bin/atree

host C++: bb2sym <= development/emulator/qtools/bb2sym.cpp

host C++: bb2sym <= development/emulator/qtools/trace_reader.cpp

development/emulator/qtools/trace_reader.cpp: In function ‘char* ExtractDexPathFromMmap(const char*)’:

development/emulator/qtools/trace_reader.cpp:1012: error: invalid conversion from ‘const char*’ to ‘char*’

development/emulator/qtools/trace_reader.cpp:1015: error: invalid conversion from ‘const char*’ to ‘char*’

make: *** [out/host/linux-x86/obj/EXECUTABLES/bb2sym_intermediates/trace_reader.o] 错误 1

这里找到这个目录下修改trace_reader.cp,

将1012/1015行分别进行修改,char *end = (char *)rindex(mmap_path, '@');

char *start = (char *)rindex(mmap_path, '/');

下面还有一个程序,编译时也会遇到这个问题, 我们采用同样的修改,源代码的方式。

(网友说,也可以把gcc的版本降低, 穿上问题是gcc的升级引发的,  1、先下载 gcc-4.3 g++-4.3:         



apt-get install gcc-4.3 g++-4.3



    2、删除原有的连接:         



sudo rm /usr/bin/gcc

sudo rm /usr/bin/g++


  3、添加新的连接:         



sudo ln -s /usr/bin/gcc-4.3 /usr/bin/gcc


sudo ln -s /usr/bin/g++-4.3 /usr/bin/g++



3.19:05

程序make执行完毕,有如下输出

target SharedLib: libwnndict (out/target/product/generic/obj/SHARED_LIBRARIES/libwnndict_intermediates/LINKED/libwnndict.so)

target Non-prelinked: libwnndict (out/target/product/generic/symbols/system/lib/libwnndict.so)

target Strip: libwnndict (out/target/product/generic/obj/lib/libwnndict.so)

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

Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_unopt_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

我们可以看 一下输出文件:

xiaowen@xiaowen-laptop:~/mydroid/out/target/product/generic$ pwd

/home/xiaowen/mydroid/out/target/product/generic

xiaowen@xiaowen-laptop:~/mydroid/out/target/product/generic$ ls

clean_steps.mk previous_build_config.mk sdk system.img

data ramdisk.img symbols userdata.img

obj root system

xiaowen@xiaowen-laptop:~/mydroid/out/target/product/generic$

4.

  进入myandroid目录下,执行make sdk。

如果你使用java1.6可能报如下的错误: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

这里可以把java的版本改为1.5,如果不想改为1.5,仍然使用我 们的java1.6我们可以修改build/core/droiddoc.mk把ALL_DOCS += $(full_target)这一行给注释掉。

再次执行make sdk,成功后有如下输出:

Package SDK Stubs: out/target/common/obj/PACKAGING/android_jar_intermediates/android.jar

Aidl Preprocess: out/target/common/obj/framework.aidl

Package SDK: out/host/linux-x86/sdk/android-sdk_eng.xiaowen_linux-x86.zip

这里我们我们可以说编译我们了,我们再需要配置一下avd了。

进入如下目录:xiaowen@xiaowen-laptop:~/mydroid/out/host/linux-x86/sdk/android-sdk_eng.xiaowen_linux-x86/tools$

xiaowen@xiaowen-laptop:~/mydroid/out/host/linux-x86/sdk/android-sdk_eng.xiaowen_linux-x86/tools$ ls

adb dmtracedump hprof-conv source.properties

android draw9patch lib sqlite3

apkbuilder emulator mksdcard traceview

ddms hierarchyviewer NOTICE.txt zipalign

xiaowen@xiaowen-laptop:~/mydroid/out/host/linux-x86/sdk/android-sdk_eng.xiaowen_linux-x86/tools$ ./android

No command line parameters provided, launching UI.

See 'android --help' for operations from the command line.

弹出我们我们熟悉的窗口,

在这里我们可以创建我们的avd了.

 



xiaowen@xiaowen-laptop:~/mydroid/out/host/linux-x86/sdk/android-sdk_eng.xiaowen_linux-x86/tools$ ./emulator -avd test

test为创建的avd的名字

这里我们看到我们的手机模似器开启了。

这里把emulator的路径加进PATH。


xiaowen@xiaowen-laptop:~/mydroid/out/host/linux-x86/sdk/android-sdk_eng.xiaowen_linux-x86/tools$
PATH=$PATH:/home/xiaowen/mydroid/out/host/linux-x86/sdk/android-sdk_eng.xiaowen_linux-x86/tools

再到xiaowen@xiaowen-laptop:~/mydroid/out/target/product/generic$ emulator -avd test -system system.img -initdata userdata.img -ramdisk ramdisk.img

我们的手机模似器启动了, 这里的内核是默认使用的内核是:prebuilt/android-arm/kernel/kernel-qemu我们可以指定我们的内核:例如我在前面编译过内核放在~/mydroid/kernel/arch/arm/boot/zImage。

然后,我们可以执行命令:

xiaowen@xiaowen-laptop:~/mydroid/out/target/product/generic$ emulator -avd tt -kernel ~/mydroid/kernel/arch/arm/boot/zImage -system system.img -initdata userdata.img -ramdisk ramdisk.img

$ adb shell

#cd /proc

# cat version

Linux version 2.6.29-gb0d93fb-dirty (root@xiaowen-laptop) (gcc version

4.5.1 (Sourcery G++ Lite 2010.09-50) ) #0 Sun Apr 24 06:44:02 CST 2011

# cat cpuinfo

Processor       : ARM926EJ-S rev 5 (v5l)

BogoMIPS        : 243.30

Features        : swp half thumb fastmult vfp edsp java

CPU implementer : 0x41

CPU architecture: 5TEJ

CPU variant     : 0x0

CPU part        : 0x926

CPU revision    : 5

Hardware        : Goldfish

Revision        : 0000

Serial          : 0000000000000000

这里便是我上个周编译的内核。步骤可见:http://blog.csdn.net/zhongxiaowenhuman/archive/2011/04/23/6347303.aspx



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐