android开发中,因为网上的资料较少,查看android源代码很有必要,那我们怎么才能在android开发中调试android源代码呢?经过笔者的不断尝试,给出了windows下调试android源代码的方案,此方案只是临时替代方案,稍显繁琐,还是希望官方能早点给出调试android源代码的解决方案。
本文参考了William Hua的把Android源代码加入SDK(Updated)以及Eric Burke的Browsing Android Source in Eclipse
一.配置环境
笔记本:Thinkpad T400 Intel Core 2 Duo P8400 2.26GHz
内存:6GB DDR3
OS : Window 7 Professional 64
Eclipse : Indigo (Java EE)
二 下载Android源代码
这里提醒一下,window下无法使用repo(因为Android是由kernel、Dalvik、Bionic、prebuilt、build等多个Git项目组成,所以Android项目编写了一个名为Repo的Python的脚本来统一管理这些项目的仓库,使得Git的使用更加简单 引自syles发布,新手扫盲贴之一什么是GIT和REPO),所以推荐使用ubuntu或者macox下载Android源代码,我就是把我在Mac OS 10.6(Snow Leopard)编译Android源代码一文中下载的源代码拷贝到window中。当然,window中下载Android源代码也不是不可以,不过需要使用git命令独立的下载每个git包,或者参考网上的批处理文件(我担心由于android版本的升级,会导致批处理文件失效,未尝试,也请有经验的网友指点)。
三 关联Android源代码
由于Android Eclipse plugin (ADT)不允许我们在项目属性中attach源代码到android.jar上,好在Eric Burke找到了把source加入到SDK中的办法,通过分析ADT的源代码我们知道ADT是从SDK目录下的“sources”目录来查找class对应的源代码,这样我们只要把源代码放到sources目录中ADT就可以自动找到对应的源代码了。
另外Android源代码包含在不同的目录中,而放到sources文件夹下的源代码应该按照包名以文件夹的形式组织,好在William Hua写了一个py脚本,不过我在使用这个py脚本的时候碰到了一些问题,自己改了一下。
主要问题是,在生成文件时报gbk codec错误
估计有几个文件里有特殊的字符,造成py脚本中断退出,这里我用了个笨办法,吃掉UnicodeDecodeError异常,这样保证py脚本会生成所有的java文件,除了(产生UnicodeDecodeError的文件,我用的是2.3.3 gingerbread版本,应该有3-4个有问题的java,暂时用不到,不管他)
with open(source) as f:
try:
for line in f:
match = re.match(r'\s*package\s+([a-zA-Z0-9\._]+);', line)
if match:
package_path = match.group(1).replace('.', os.sep)
try:
os.makedirs(os.path.join(sources, package_path))
except os.error:
pass
destination = os.path.join(sources, package_path, filename)
if destination not in written:
written[destination] = True
shutil.copy(source, destination)
break
except UnicodeDecodeError:
print(source)
另外我用的是python 3.1.1,需要把原有py脚本的print命令加上括号,python我是新手,自己摸索的
使用方法
fix_android_sdk.py < android-source > < android-sdk >
比如我的<android-source>是 c:\android <android-sdk>是 c:\android\android-sdk
则写法应该是 fix_android_sdk.py c:\\android c:\\android\\android-sdk
最后在eclipse中Java Source Attachment中指向生成的路径
最后我们即可在eclipse中看到源代码