下载Android源码时过滤掉无关紧要的大文件

下载Android源码的时候,会遇到一些特别大的文件,而实际上这些文件无助于我们分析源码。此时,可以修改下载脚本,把某些git库过滤掉。


下面是下载过程中的一个截图:



在下载device的一个示例的时候,manta是1G多,这并不涉及源码分析。为此,可以立即终止下载过程,修改下载的python脚本,把/device/samsung/manta.git过滤掉。


对应的python脚本如下。首先是一个过滤函数:

def ignore_git(cmd):
    ignore_list = ["/device/lge/mako-kernel.git", 
                   "/device/samsung/manta.git"]
    for i in ignore_list:
        if cmd.find(i) == -1:
            continue
        else:
            print "Ignored: ", cmd
            return True

    return False

然后修改下载代码(最后两句):

for node in root.getElementsByTagName("project"):    
    os.chdir(rootdir)    
    d = node.getAttribute("path")    
    last = d.rfind("/")    
    if last != -1:    
        d = rootdir + "/" + d[:last]    
        if not os.path.exists(d):    
            os.makedirs(d)    
        os.chdir(d)    
    cmd = prefix + node.getAttribute("name") + suffix
    print cmd
    if not ignore_git(cmd):
        call(cmd, shell=True)


有时候第一次下载或者对源码库不熟悉的时候,无法使用上述方法,因为可能把真正有用的代码给过滤掉了。因此以上方法适合于对Android熟悉、或者之前本地已经下载过源码,知道哪些地方无关紧要。


另外一种下载的方法,是仅仅下载自己需要分析的代码对应的git库:

  • 也是基于前面的脚本,第一步把cmd全吧打印出来,重定向到一个文件中,如 ./download_android_source_code.py > download_android_source_code_commands.txt
  • 然后这个文件就是所有的git库;
  • 找到自己感兴趣的库,比如 /system/core,对应的git库是:git clone http://android.googlesource.com/platform/system/core.git
  • 和上面ignore相反,写一个需要下载的列表,仅仅这个列表中的git才执行call()语句。

因为整个源码有几十G,全部下载都是以小时计算。因此上述方法可以快速下载所需要的分析,以满足工作和学习的需要。


再补充一点,有时候下载时间长之后,会自动停止。此时可能最后停止下载的git不完整,为此,直接去文件系统中删除对应的目录,然后重新执行./download_android_source_code.py脚本。——已经下载过的会自动跳过。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值