〖Android〗代理与正常网络分开同步CyangenMod源码
为了同步CyanogenMod源代码,你也学会了翻墙,对吗?
通常 .repo/manifest.xml 文件有Google AOSP的Project,也有Github的Project;
访问Github不需要翻墙,而同步Google源代码则避免不了了;
想分开同步,想智能一点吗?
- #!/usr/bin/env python
- # encoding: utf-8
- import os,sys,subprocess
- import xml.dom.minidom
- from xml.dom.minidom import Node
- # 代理环境
- proxy_user=''
- proxy_pass=''
- proxy_host='123.123.123.123' # 请改
- proxy_port=12345 # 请改
- if len(proxy_user) == 0:
- http_proxy="http://%s:%d" %(proxy_host, proxy_port)
- https_proxy="http://%s:%d" %(proxy_host, proxy_port)
- else:
- http_proxy="http://%s:%s@%s:%d" %(proxy_user, proxy_pass, proxy_host, proxy_port)
- https_proxy="http://%s:%s@%s:%d" %(proxy_user, proxy_pass, proxy_host, proxy_port)
- proxyenv={"http_proxy":http_proxy, "https_proxy":https_proxy}
- # 解析.repo/manifest.xml文件,取出project节点
- doc = xml.dom.minidom.parse('.repo/manifest.xml')
- projects = doc.getElementsByTagName('project')
- github_projects=[]
- google_projects=[]
- errorsync_projects=[]
- # 执行同步函数
- def sync_project(project, env=None):
- """
- 执行同步命令
- project: 期望同步的Project name
- """
- cmd="repo sync %s" %project
- print '>>>', cmd
- # 执行同步
- process = subprocess.Popen(cmd, shell=True, env=env,\
- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- # 实时读取STDOUT
- out = process.stdout.readline()
- while out:
- print out,
- out = process.stdout.readline()
- err = process.stderr.readline()
- # 实时读取STDERR
- while err:
- print err,
- err = process.stderr.readline()
- # 等待进程结束获得返回值
- process.poll()
- errcode = process.returncode
- # 若有错误追加到错误数组
- if errcode != 0:
- errorsync_projects.append(project)
- # 对project进行分类
- # AOSP的Project保存在 google_projects 数组
- # CyanogenMod的Project保存在 github_project 数组
- for node in projects:
- remote=node.getAttribute('remote')
- project=node.getAttribute('name')
- if remote == 'aosp':
- google_projects.append(project)
- else:
- github_projects.append(project)
- cur_env=os.environ.copy()
- cur_env["http_proxy"]=http_proxy
- cur_env["https_proxy"]=https_proxy
- # 同步来自Google的Project
- for project in google_projects:
- sync_project(project, cur_env)
- sys.exit()
- # 同步来自Github的Project
- for project in github_projects:
- sync_project(project)
- # 输出同步出错的Project
- if len(errorsync_projects) != 0:
- print '>>> 同步出现了错误的Project: '
- for project in errorsync_projects:
- print project
- print '>>> 请执行命令以重新同步Project: '
- for project in errorsync_projects:
- if project in google_projects:
- sync_cmd="env http_proxy=%s https_proxy=%s repo sync %s" %(http_proxy, https_proxy, project) else:
- sync_cmd="repo sync %s" %project
- print sync_cmd
保存脚本到 sync_split.py,同步的时候执行:
cd /path/to/src
python sync_split.py
Enjoy!
〖Android〗代理与正常网络分开同步CyangenMod源码的更多相关文章
- Okhttp同步请求源码分析
进阶android,OKhttp源码分析——同步请求的源码分析 OKhttp是我们经常用到的框架,作为开发者们,我们不单单要学会灵活使用,还要知道他的源码是如何设计的. 今天我们来分析一下OKhttp ...
- android Service Activity三种交互方式(付源码)(转)
android Service Activity三种交互方式(付源码) Android应用服务器OSBeanthread android Service Binder交互通信实例 最下边有源代码: ...
- 《Android NFC 开发实战详解 》简介+源码+样章+勘误ING
<Android NFC 开发实战详解>简介+源码+样章+勘误ING SkySeraph Mar. 14th 2014 Email:skyseraph00@163.com 更多精彩请直接 ...
- Android反编译(一)之反编译JAVA源码
Android反编译(一) 之反编译JAVA源码 [目录] 1.工具 2.反编译步骤 3.实例 4.装X技巧 1.工具 1).dex反编译JAR工具 dex2jar http://code.go ...
- 40 网络相关函数(八)——live555源码阅读(四)网络
40 网络相关函数(八)——live555源码阅读(四)网络 40 网络相关函数(八)——live555源码阅读(四)网络 简介 15)writeSocket向套接口写数据 TTL的概念 函数send ...
- 39 网络相关函数(七)——live555源码阅读(四)网络
39 网络相关函数(七)——live555源码阅读(四)网络 39 网络相关函数(七)——live555源码阅读(四)网络 简介 14)readSocket从套接口读取数据 recv/recvfrom ...
- 38 网络相关函数(六)——live555源码阅读(四)网络
38 网络相关函数(六)——live555源码阅读(四)网络 38 网络相关函数(六)——live555源码阅读(四)网络 简介 12)makeSocketNonBlocking和makeSocket ...
- 37 网络相关函数(五)——live555源码阅读(四)网络
37 网络相关函数(五)——live555源码阅读(四)网络 37 网络相关函数(五)——live555源码阅读(四)网络 简介 10)MAKE_SOCKADDR_IN构建sockaddr_in结构体 ...
- 36 网络相关函数(四)——live555源码阅读(四)网络
36 网络相关函数(四)——live555源码阅读(四)网络 36 网络相关函数(四)——live555源码阅读(四)网络 简介 7)createSocket创建socket方法 8)closeSoc ...
随机推荐
- EditText 限制输入,自定义样式,监听输入的字符,自动换行
自动获取焦点 <!-- 添加:<requestFocus /> 会自动获取焦点 --> <EditText android:layout_width="matc ...
- 短址服务 api
1 is.gd 他这个api简单: http://is.gd/api.php?longurl= 后面加网址就可以返回短址 2 Google URL Shortener API api地址: http ...
- 最近遇到了 timer1sec 定时调用的函数,出现了 时间久了,就不是每秒一次了,可能会慢的情况。如何解决呢?
我想可以在timer1sec 调用四个线程,让四个线程来执行 具体代码,而不是在timer1sec一个线程 直接执行.这样,每个线程 不超过4s,那么没秒都会被调用到. 需要使用到的技术是 semap ...
- HTTPS那些事(三)攻击实例与防御
在<HTTPS那些事(二)SSL证书>我描述了使用SSL证书时一些需要注意的安全问题,在这一篇文章里面我再演示一下针对HTTPS攻击的一些实例,通过这些实例能更安全的使用HTTPS.知己知 ...
- codeforce 192 div2解题报告
今天大家一起做的div2,怎么说呢,前三题有点坑,好多特判.... A. Cakeminator 题目的意思是说,让你吃掉cake,并且是一行或者一列下去,但是必须没有草莓的存在.这道题目,就是判断一 ...
- 关于MAX30100心率的编程
MAX30100是能够读取心率.血氧的传感器,通信方式是通过IIC进行通信. 其工作原理是通过红外led灯照射,能够得到心率的ADC值. 图为MAX30100的寄存器. 可以分为五类,状态寄存器.FI ...
- Pytorch多GPU并行处理
可以参数2017coco detection 旷视冠军MegDet: MegDet 与 Synchronized BatchNorm PyTorch-Encoding官方文档对CGBN(cross g ...
- HDU—— 5159 Building Blocks
Problem Description After enjoying the movie,LeLe went home alone. LeLe decided to build blocks. LeL ...
- Controller向View传递数据
1. 使用ViewData传递数据 我们在Controller中定义如下: ViewData[“Message”] = “Hello word!”; 然后在View中读取Controlle ...
- 实例游戏内存修改器----CUI版本模拟
实现说明: 目标进程内存中很可能存在多个你要搜索的值, 所以在进行第一次搜索的时候, 要把搜索到的地址记录下来,然后让用户改变要搜索的值,再在记录的地址中搜索,直到搜索到的地址惟一为止.为此写两个辅助 ...