Android源码研究Tips

转贴!~

 

从去年12月开始写android程序开始,都差不多快一年了。上月google终于公开了android的较完整的源码。最近几天,闲来无事时就给他们提交一些补丁。

这里讲一些开发中的技巧,或许对大家有帮助,转载请注明出处:
下载源码
首先一个问题是http://source.android.com/在国内访问有时,甚至是大多时候,是有问题的。那么怎么翻墙就需要大家自己解决了。 其实只是为了看源码的话,问题并不大,源码更新的站点还是可以正常连接的,但是如果有打算要提交patch,那么用tor都有些麻烦,我是找了个vpn出 去的。获取源码请参照

http://source.android.com/download

嗯,我这里也可以给一些简单的步骤介绍吧:
1. 你的系统需要是linux或者是mac os x。需要先安装git-core和gnupg,在debian/ubuntu linux上,可以用apt-get获取,mac上使用macports 吧。 额外的,在mac上你需要先安装xcode 2.4以上版本,另外再用macports安装gmake, libsdl。 事实上编译期还会有问题,这在http://source.android.com/download页文档中没有提及,缺失ncursor和zlib 库,也需要单独安装(这个在mail list里有讨论,或许我晚些可以补全些)。

2008-11-03 补 正好干净安装了ubuntu linux 8.10记录一下需要的东西
注意可能blog中会自动折行,请以$来区分新行
$ sudo apt-get install git-core gnupg (gnupg实际已自带)
$ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl
$ sudo apt-get install zlib1g-dev
$ sudo apt-get install valgrind (可选,有21m大,我觉得一般人是用不到的)
$ sudo apt-get install python2.5 (实际上不用装,ubuntu 8.10已经自带)
$ sudo apt-get install sun-java5-jdk
注意,不要用 sun-java6-jdk, 不然在make sdk,具体来说是make doc这一步中,遇到这个错误:
docs droiddoc: out/target/common/docs/dx
javadoc: error – in doclet class droiddoc, method start has thrown an
exception java.lang.reflect.invocationtargetexception
com.sun.tools.javac.code.symbol$completionfailure: class file for
sun.util.resources.openlistresourcebundle not found

2. 下载repo脚本,放到/bin目录下,加上可执行权限
$ curl http://android.git.kernel.org/repo > repo
$ sudo mv repo /bin
$ sudo chmod a+x /bin/repo
其实文档中是把这个放在个人用户的~/bin目录下,但是要改path,我嫌麻烦而已就放/bin下了

3. 创建一个放置源码的文件夹,如叫myandroid。这里要注意下,需要区分大小写的分区,linux下一般是用ext3的,是符合要求的,而mac下默 认的分区是不区分大小写的,请自行创建分区。但是事实上,我以前测试过,在非大小写敏感分区上,直接make会报错,但修改makefile后直接跳过检 查这一步,最终是可以成功编译的。

4. 在myandroid目录中执行
$ repo init -u git://android.git.kernel.org/platform/manifest.git
中间会提示输入电子邮件什么的,如果你打算要提交patch的话,用google accounts注册过的邮箱

5. 在myandroid中执行 repo sync就可以开始下载源码了
但是这一步非常慢,这里有些文档中没有的技巧了:
测试发现,主站点是限三线程连接的,也就是说你可以同时开三个窗口做不同部分下载,
我建议是第一个窗口直接执行repo sync,第二个窗口执行repo sync kernel,第三个窗口执行repo sync prebuilt
因为kernel和prebuilt这两个工程比较大。
有时因为多次频繁连接,会有服务器端拒绝连接的错误,此时等两三分钟再重试就好了
repo的使用请看repo help。如果只是要学习源码的话,那只用repo sync一个命令就行。repo sync不带参数的话会更新所有子项目,可以repo sync project_path来指定更新项目。 那么project_path在哪可以找到呢?myandroid/.repo/manifests/default.xml (你至少需要先repo init过才有这些东西)

编译源码
当repo sync全部完毕时,进入myandroid目录,首先执行make,大约会耗时一个小时左右(在我的一代macbook pro上大概是这时间)。

在工作目录下运行make

$ cd ~/mydroid

$ make

如果你编译失败,并提示missing 了“run-java-tool ”。尝试在making 前设置环境变量ANDROID_JAVA_HOME$JAVA_HOME

例如:

$ export ANDROID_JAVA_HOME=$JAVA_HOME


make最后会生成system.img。看到mail list里有人问这个干嘛用,其实是文档里没有完全写清楚。一般来说,我想普通人还需要的是make sdk这一步,会在myandroid/out/host/your_os/sdk中生成sdk 。和从google官方下载下来的sdk差不多,可以直接运行了

在进行过一次完整的make后,以后对一些程序的修改,大可不必重新make sdk,因为make sdk实在太慢了。
先在myandroid目录下执行
$ . build/envsetup.sh
然后你就会多出几个可用的命令。在改了contacts项目后,可以简单的执行mmm packages/apps/contacts/来单独编译这个部分。为了可以直接测试改动,需要生成新的system.img,在myandroid目录下执行
make snod即可
当然,如果你改动的是emulator或者其它外围相关的,而非系统内部的东西,就不只是要重新生成system.img了

修改测试
这个周末,我提交了大约四到五个patch。主要是联系人程序相关的一些bug修正。如果你是想修改build in的程序,像联系人这样的,最好先在编译前把contacts包删去,这样编译出来的system.img不带contacts程序会方便很多,可以直 接用eclipse开发contacts程序,在这个模拟器上调试。像一般情况下,contacts是带在system.img内的,对程序修改后想测 试,比较麻烦,需要先运行emulator,然后adb uninstall掉原先的程序,再安装自己的,并且如果数据没卸干净,会有permission出错或uid不否而报错的情况。最最麻烦的是,每次重启emulator,build in的程序在被adb uninstall后又会出现,这个问题在真机上不会出现。 所 以我建议你直接去掉contacts再编译个system.img出来,不过今天的几个修改都比较简单,我全部都是改一点就用mmm重新编译 contacts程序,然后用make snod来出一个新的system.img,覆盖掉sdk目录下旧有的文件,来测试。这个过程熟练了一般两分多钟可以测一把。

 

原帖地址:http://www.evan129.com/2008/11/02/android-platform-study-tips/

 

 

试验中间发生的错误:

错误现象 :

E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源临时不可用)

E: 无法对管理目录(/var/lib/dpkg/)加锁,是不是另一个包管理程序在使用它?

无法执行其他apt-get命令

解决办法:

第一种(比较暴力)

把lock的文件强行删掉,解决问题:

sudo rm /var/lib/dpkg/lock

sudo rm /var/lib/apt/lists/lock 

第二种

ps aux  列出当前进程列表 找到 apt-get 那个被lock住的进程记下PID
sudo kill PID 即可

 

错误现象:

IOError: [Errno 2] No such file or directory: '/home/<user_name>/ mydroid/.repo/manifests/.git/HEAD'

*Solution:*

"touch ~/.gitconfig" (without quotes)
"rm -rf .repo" (without quotes)

 

疑难杂症解决之二:http://hilbert.spaces.live.com/blog/cns!73AE047AE0B43623!266.entry

疑难杂症解决之三:http://my.oschina.net/zengsai/blog/2903

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值