〖Android〗代理与正常网络分开同步CyangenMod源码
16lz
2021-01-26
为了同步CyanogenMod源代码,你也学会了FQ,对吗?
通常 .repo/manifest.xml 文件有Google AOSP的Project,也有Github的Project;
访问Github不需要FQ,而同步Google源代码则避免不了了;
想分开同步,想智能一点吗?
1 #!/usr/bin/env python 2 # encoding: utf-8 3 4 import os,sys,subprocess 5 import xml.dom.minidom 6 from xml.dom.minidom import Node 7 8 # 代理环境 9 proxy_user=''10 proxy_pass=''11 proxy_host='123.123.123.123' # 请改12 proxy_port=12345 # 请改13 if len(proxy_user) == 0:14 http_proxy="http://%s:%d" %(proxy_host, proxy_port)15 https_proxy="http://%s:%d" %(proxy_host, proxy_port)16 else:17 http_proxy="http://%s:%s@%s:%d" %(proxy_user, proxy_pass, proxy_host, proxy_port)18 https_proxy="http://%s:%s@%s:%d" %(proxy_user, proxy_pass, proxy_host, proxy_port)19 proxyenv={"http_proxy":http_proxy, "https_proxy":https_proxy}20 21 # 解析.repo/manifest.xml文件,取出project节点22 doc = xml.dom.minidom.parse('.repo/manifest.xml')23 projects = doc.getElementsByTagName('project')24 25 github_projects=[]26 google_projects=[]27 28 errorsync_projects=[]29 30 # 执行同步函数31 def sync_project(project, env=None):32 """33 执行同步命令34 project: 期望同步的Project name35 """36 cmd="repo sync %s" %project37 print '>>>', cmd38 # 执行同步39 process = subprocess.Popen(cmd, shell=True, env=env,\40 stdout=subprocess.PIPE, stderr=subprocess.PIPE)41 # 实时读取STDOUT42 out = process.stdout.readline()43 while out:44 print out,45 out = process.stdout.readline()46 err = process.stderr.readline()47 # 实时读取STDERR48 while err:49 print err,50 err = process.stderr.readline()51 # 等待进程结束获得返回值52 process.poll()53 errcode = process.returncode54 # 若有错误追加到错误数组55 if errcode != 0:56 errorsync_projects.append(project)57 58 # 对project进行分类59 # AOSP的Project保存在 google_projects 数组60 # CyanogenMod的Project保存在 github_project 数组61 for node in projects:62 remote=node.getAttribute('remote')63 project=node.getAttribute('name')64 if remote == 'aosp':65 google_projects.append(project)66 else:67 github_projects.append(project)68 69 cur_env=os.environ.copy()70 cur_env["http_proxy"]=http_proxy71 cur_env["https_proxy"]=https_proxy72 # 同步来自Google的Project73 for project in google_projects:74 sync_project(project, cur_env)75 sys.exit()76 77 # 同步来自Github的Project78 for project in github_projects:79 sync_project(project)80 81 # 输出同步出错的Project82 if len(errorsync_projects) != 0:83 print '>>> 同步出现了错误的Project: '84 for project in errorsync_projects:85 print project86 87 print '>>> 请执行命令以重新同步Project: '88 for project in errorsync_projects:89 if project in google_projects:90 sync_cmd="env http_proxy=%s https_proxy=%s repo sync %s" %(http_proxy, https_proxy, project)91 else:92 sync_cmd="repo sync %s" %project93 print sync_cmd
保存脚本到 sync_split.py,同步的时候执行:
cd /path/to/src
pythonsync_split.py
Enjoy!
更多相关文章
- android异步操作类----AsyncTask
- Android在真机调试的设置方法
- 初学Android,字符串,数字,尺寸,数组资源(十二)
- WakeLock & WifiLock的实现
- android 下自定义view, android.view.InflateException
- Android学习【3】Android开发问题记录
- android AV同步详解
- Android定时任务采用AlarmManager来实现,兼容8.0系统
- Android中资源文件中的字符串数组string-array