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