前几天编译过了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