Windows 中 使用python 一键下载android s代码

为了在window方便看代码,所以下载google原生android s代码,写了一段python脚本方便下载

1.  安装GIT

git官网下载:Git - Downloads

安装git到如下路径  C:/Program Files/Git

2.  安装PYTHON

python官网下载:Download Python | Python.org

安装python到如下路径 C:/Program Files/python

3.  下载代码

拷贝如下脚本保存到本地到文件download_android_s.py,使用cmd命令行进入到刚刚下载文件的目录执行python download_android_s.py下载代码到本地目录

import os
from subprocess import call
from os import (popen,makedirs, chdir, symlink)
from xml.dom import (Node,minidom)
from os.path import (isdir, sep, dirname, exists)
google_addr='https://android.googlesource.com/'
tsinghua_addr='https://aosp.tuna.tsinghua.edu.cn/'
download_addr=tsinghua_addr if True else google_addr
 
android_manifest_git=download_addr+'platform/manifest.git'
kernel_common_git=download_addr+'kernel/common.git'
kernel_exynos_git=download_addr+'kernel/exynos.git'
kernel_goldfish_git=download_addr+'kernel/goldfish.git'
kernel_hikey_linaro_git=download_addr+'kernel/hikey-linaro.git'
kernel_msm_git=download_addr+'kernel/msm.git'
kernel_omap_git=download_addr+'kernel/omap.git'
kernel_samsung_git=download_addr+'kernel/samsung.git'
kernel_tegra_git=download_addr+'kernel/tegra.git'
kernel_x86_64_git=download_addr+'kernel/x86_64.git'
 
def downloadAndroidSource(path='', name='',down_dir=sep.join(['d:','android_source']), manifest = False, goldfish = False):
    if not isdir(down_dir):
        makedirs(down_dir)
    goldfish_dir = sep.join([down_dir,'goldfish'])
    manifest_dir = sep.join([down_dir,'manifest'])
    android_source = sep.join([down_dir,'android_s'])
 
    # 1. 打印一句话
    print('down start ')
    # 2. 修改为源码要保存的路径
    if not os.path.exists(android_source):
        os.mkdir(android_source)
 
    # 3. 使用清华源下载地址
    prefix ="git clone -b android-12.0.0_r3 {}".format(download_addr)
    suffix = ".git"
 
    # 下载manifest函数
    def downloadManifest():
        print('down manifest')
        if not isdir(manifest_dir):
            chdir(down_dir)
            call('git clone {}'.format(android_manifest_git))
            if exists(manifest_dir):
                chdir(manifest_dir)
                call('git checkout android-12.0.0_r3')
            else:
                print('git clone {} error'.format(android_manifest_git))
        else:
            chdir(manifest_dir)
            call('git pull')
 
 
    # 下载kernel函数
    def downloadGoldfish():
        print('down goldfish')
        if not isdir(goldfish_dir):
            chdir(down_dir)
            call('git clone {}'.format(kernel_goldfish_git))
            if exists(goldfish_dir):
                chdir(goldfish_dir)
                call('git checkout android-goldfish-4.9-dev')
            else:
                print('git clone {} error'.format(kernel_goldfish_git))
        else:
            chdir(goldfish_dir)
            call('git pull')
 
 
    # 下载某一个模块函数
    def downloadMode(rootdir, path, name):
        chdir(rootdir)
        print('downloadMode path={} -> name={}'.format(path, name))
        if not exists(path):
            last = path.rfind("/")
            if last != -1:
                d = rootdir + "/" + path[:last]
                if not exists(d):
                    makedirs(d)
                chdir(d)
            print('{}{}{}'.format(prefix, name, suffix))
            call(prefix + name + suffix)
        else:
            chdir(rootdir+'/'+path)
            call('git pull')
 
    #拷贝文件
    def copyfile(src, dest):
        if not exists(dest):
            print('copyfile src={} -> dest={}'.format(src, dest))
            if not isdir(dirname(dest)):
                makedirs(dirname(dest))
            copyfile(src, dest)
    #创建连接文件
    def linkfile(src, dest):
        if not exists(dest):
            print('linkfile src={} -> dest={}'.format(src, dest))
            if not isdir(dirname(dest)):
                makedirs(dirname(dest))
            symlink(src, dest)
 
     # 4. 下载goldfish
    if goldfish:
        downloadGoldfish()
 
     # 5. 下载manifest
    if manifest or not isdir(manifest_dir):
        downloadManifest()
 
    rootdir = android_source
    if path and name:
        # 6.可以根据manifest文件中的path和namne下载单个模块
        downloadMode(rootdir, path, name)
    else:
        # 6.根据 manifest 中 default.xml 下载所有模块
        dom = minidom.parse(sep.join([manifest_dir,'default.xml']))
        root = dom.documentElement
        for node in root.getElementsByTagName("project"):
            path = node.getAttribute("path")
            name = node.getAttribute("name")
            if path and name:
                pass#print(path+' -> '+name)
                #downloadMode(rootdir, node.getAttribute("path"), node.getAttribute("name"))
            for child in [child for child in node.childNodes if child.nodeType == Node.ELEMENT_NODE]:
                print(child)
                src = child.getAttribute("src")
                dest = child.getAttribute("dest")
                if child.tagName == 'copyfile':
                    copyfile(src, dest)
                elif child.tagName == 'linkfile':
                    linkfile(src, dest)
 
    #创建驱动软连接goldfish -> android_r/kernel/goldfish
    if isdir(goldfish_dir):
        linkfile(goldfish_dir,sep.join([android_source,'kernel','goldfish']))
 
if __name__ == '__main__':
    email = popen('git config user.email').read().splitlines()[0]
    if email == '303106251@qq.com':#下载框架代码
        download_dict = {
            'frameworks/base':'platform/frameworks/base',
            'frameworks/native':'platform/frameworks/native',
            'hardware/libhardware':'platform/hardware/libhardware',
            'hardware/interfaces':'platform/hardware/interfaces'
        }
        for (path, name) in download_dict.items():
            downloadAndroidSource(path=path, name=name, goldfish=False)
    else:
        downloadAndroidSource()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值