梦书之家(移动开发)

你有一个苹果,我有一个苹果,我们交换一下,一人还是一个苹果;你有一个思想,我有一个思想,我们交换一下,一人就有两个思想。 ——肖伯纳

导航

Android 源码编译

cupcake

1 编译前 请先安装工具:

http://www.cnblogs.com/Lynn_doo/archive/2010/03/18/1689285.html

2 添加组件

如果下载的版本没有被引入中文输入法,这里做适当修改:
#cd /home/android/build/target/product/

#gedit generic.mk
打开这个文件后,在PRODUCT_PACKAGES中,加入PinyinIME,然后保存退出。这样在整体编译的时候就会把中文输入法也编译进system中了。

再次运行 make的话,就可以看到如下的输出:

Install: out/target/product/generic/system/app/PinyinIME.apk

在 out/target/product/generic/installed-files.txt
里面也能看到 

1294599  /system/app/PinyinIME.apk

说明已经加入了拼音输入法

3 make 编译的时候出现如下的错误:

1) frameworks/base/tools/aidl/AST.cpp:10: error: 'fprintf' was not declared in this scope 之类的错误

解决方法:

下载gcc-4.3和g++-4.3

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

$: cd /usr/bin

//建立软连接 下面的ln 中 l 是小写字母L

$: sudo ln -s gcc-4.3 gcc

$: sudo ln -s g++-4.3 g++

//如果已经存在的话 用sudo rm gcc; sudo rm g++

而之前的gcc/g++是指向gcc-4.4与g++-4.4(Ubuntu 10.10)

2)

java.util.zip.ZipException: duplicate entry: hyts_Foo.c

这个问题是hyts_Foo.c文件重复,在根目录查找哪里重复,然后将其删除保留一个

$ find . -name hyts_Foo.c

./libcore/luni/src/test/resources/hyts_Foo.c

./libcore/support/src/test/resources/hyts_Foo.c

这两个文件都是dummy文件 里面没有实质的内容 都只有一个注释行 可以随便删除一个

$ rm libcore/luni/src/test/resources/hyts_Foo.c

还有重复的文件:

(1)hc_staff.xml
./dalvik/libcore/xml/src/test/resources/hc_staff.xml
./dalvik/libcore/dom/src/test/resources/hc_staff.xml --DEL
(2)staff2.dtd
./dalvik/libcore/xml/src/test/resources/staff2.dtd
./dalvik/libcore/dom/src/test/resources/staff2.dtd --DEL

(3)xhtml1-strict.dtd
./dalvik/libcore/xml/src/test/resources/xhtml1-strict.dtd
./dalvik/libcore/dom/src/test/resources/xhtml1-strict.dtd --DEL

(4)staff2.xml
./dalvik/libcore/xml/src/test/resources/staff2.xml
./dalvik/libcore/dom/src/test/resources/staff2.xml --DEL

(5)staff.xml
./dalvik/libcore/xml/src/test/resources/wf/staff.xml
./dalvik/libcore/xml/src/test/resources/staff.xml
./dalvik/libcore/xml/src/test/resources/nwf/staff.xml
./dalvik/libcore/dom/src/test/resources/staff.xml -- DEL
(6)staff.dtd
./dalvik/libcore/xml/src/test/resources/wf/staff.dtd
./dalvik/libcore/xml/src/test/resources/systemid/staff.dtd
./dalvik/libcore/xml/src/test/resources/staff.dtd
./dalvik/libcore/xml/src/test/resources/nwf/staff.dtd
(7)staffNS.dtd
./dalvik/libcore/xml/src/test/resources/staffNS.dtd
./dalvik/libcore/dom/src/test/resources/staffNS.dtd -- DEL

(8)staffNS.xml
./dalvik/libcore/xml/src/test/resources/staffNS.xml
./dalvik/libcore/dom/src/test/resources/staffNS.xml -- DEL

4 编译完成后,在 ./out/target/product/generic/system 下可以看到3个输出文件

1)ramdisk.img

2)system.img

3)userdata.img

替换android原来的SDK下的相应的文件,由于我们编译的android是cupcake是android 1.5(api level 3),s所以对应的文件应该是:<Android SDK PATH>\platforms\android-3\images

然后启动模拟器

在模拟器上: settings->About phone->Build number,如下图所示:(是不是很熟悉啊,就是我们自己编译时候的信息文件)

通过ADB命令来查看build.prop属性信息:

$ adb shell

$ cat /system/build.prop

$ # begin build properties
# autogenerated by buildinfo.sh
ro.build.id=CUPCAKE
ro.build.display.id=generic-eng 1.5 CUPCAKE eng.dream.20110108.143501 test-keys
ro.build.version.incremental=eng.dream.20110108.143501
ro.build.version.sdk=3
ro.build.version.release=1.5
ro.build.date=2011年 01月 08日 星期六 14:35:49 CST
ro.build.date.utc=1294468549
ro.build.type=eng
ro.build.user=dream
ro.build.host=dream-VGN-FW351J
ro.build.tags=test-keys
ro.product.model=generic
ro.product.brand=generic
ro.product.name=generic
ro.product.device=generic
ro.product.board=
ro.product.manufacturer=unknown
ro.product.locale.language=
ro.product.locale.region=
ro.board.platform=
# ro.build.product is obsolete; use ro.product.device
ro.build.product=generic
# Do not try to parse ro.build.description or .fingerprint
ro.build.description=generic-eng 1.5 CUPCAKE eng.dream.20110108.143501 test-keys
ro.build.fingerprint=generic/generic/generic/:1.5/CUPCAKE/eng.dream.20110108.143501:eng/test-keys
# end build properties
#
# system.prop for generic sdk
#

rild.libpath=/system/lib/libreference-ril.so
rild.libargs=-d /dev/ttyS0

#
# ADDITIONAL_BUILD_PROPERTIES
#
ro.config.notification_sound=F1_New_SMS.ogg
ro.kernel.android.checkjni=1
ro.config.sync=yes
net.bt.name=Android
dalvik.vm.stack-trace-file=/data/anr/traces.txt

可以用这个对比我们在Build目录下文件(./out/target/product/generic/system/build.prop),看看是不是一致的。

参考:

1 http://www.cnblogs.com/Lynn_doo/archive/2010/03/18/1689285.html

2 http://blog.csdn.net/xieyaa/archive/2009/11/23/4858189.aspx

3 http://blog.csdn.net/skywalkzf/archive/2010/12/16/6080094.aspx

4 http://www.360doc.com/content/10/0222/16/155970_16459284.shtml

posted on 2011-01-08 13:09  梦书  阅读(2312)  评论(0编辑  收藏  举报