因ؓAndroid是由kernel、Dalvik、Bionic、prebuilt、build{多个Git目l成Q所以Android目~写了一个名为Repo的Python的脚本来l一理q些目的仓库,使得Git的用更加简单?
q几天WilliamZ拿Android最新的sourcecodeQ学习了一下git和repo的一些基本操作,整理了一个如何取得Android代码的How-ToQ今天把他脓上来?
1、Git的安?/strong> 2、安装Repo 别忘了给repo可执行权?br>chmod a+x ~/bin/repo 3、初始化版本?/strong> 如果x某个branch而不是主U上的代码,我们需要用-b参数制定branch名字Q比如: 另一U情冉|Q我们只需要某一个project的代码,比如kernel/commonQ就不需要repo了,直接用Git卛_?br>git clone git://android.git.kernel.org/kernel/common.git 如果需要某个branch的代码,用git checkout卛_。比如我们刚刚拿了kernel/common.get的代码,那就先进入到common目录Q然后用下面的命令: 4、同步版本库 如果是同步Android中的单个目Q只要在目目录下执行简单的 5、通过GitWeb下蝲代码 Git最初是为Linux内核开发而设计,所以对其他q_的支持ƈ不好Q尤其是Windowsq_Q必要有Cygwin才可以。现在,得益?a >msysgit目Q我们已l可以不需要Cygwin而用Git了。另外,Git Extensions是一个非常好用的Windows Shell扩展Q它能与资源理器紧密集成,甚至提供了Visual Studio插g。它的官方网站上有一分不错的说明文Q感兴趣的朋友可以看一看? 至于Git的参考文,我推?a >Git MagicQ这里还有一?a >Git Magic的中文版?/p>
在Ubuntu 8.04上安装git只要讑֮了正的更新源,然后使用apt-get可以了Q有什么依赖问题,p它自p军_。其中cURL是一个利用URL语法在命令行下工作的文g传输工具Q会在后面安装Repo的时候用到?br>sudo apt-get install git-core curl
首先保在当前用Lȝ录下创徏一?bin目录Q如果没有的话)Q然后把?~/bin)加到PATH环境变量?br>接下来通过cURL来下载Repo脚本Q保存到~/bin/repo文g?br>curl http://android.git.kernel.org/repo >~/bin/repo
如果是想把Android当前ȝ上最新版本的所有的sourcecode拿下来,我们需要repo的帮助?br>先徏立一个目录,比如~/androidQ进M后用repo init命o卛_?br>repo init -u git://android.git.kernel.org/platform/manifest.git
q个q程会持l很长的旉Q至可以好好睡一觉)Q具体要多少旉取决于|络条g?br>最后会看到 repo initialized in /androidq样的提C,p明本地的版本库已l初始化完毕Qƈ且包含了当前最新的sourcecode?
repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake
q也需要不的旉Q因为它会把整个Linux Kernel的代码复制下来?
git checkout origin/android-goldfish-2.6.27 -b goldfish
q样我们在本地建立了一个名为goldfish的android-goldfish-2.6.27分支Q代码则已经与android-goldgish-2.6.27同步。我们可以通过git branch来列出本地的所有分支?
使用epo sync命oQ我们把整个Android代码树做同步到本圎ͼ同样Q我们可以用cM
repo sync project1 project2 ?
q样的命令来同步某几个项?
git pull
卛_?
另外Q如果只是需要主U上某个目的代码,也可以通过GitWeb下蝲Q在shortlog利用关键字来搜烦特定的版本,或者找几个比较新的tag来下载还是很Ҏ的?
CometD框架?a >Bayeux协议的实玎ͼ可以使得服务器端和客L在不可靠的网l上q行多通道异步通信。该实现用到了多U语aQ?a >JavaScript?a >Java?a >Perl{等Q,但是主要q是Z览器的AJAX应用。Bayeux的优势在于,它可以运行在M支持AJAX的浏览器上,在现有HTTP通信机制下,p够让览器支持异步后台的更新Q比如类gGoogle邮g的新邮g通知的新信息送达。事实上Q同L协议q可以用于用其他语a在不可靠的网l上q接讑֤q行通信Q比如移动设备)?
WebSockets是一?a >标准草案Q这草案由Google、Apple和其他进?a >HTML 5标准化的WhatWG工作l成员所资助。因此,支持HTML 5的浏览器QChrome或者SafariQ已l开始支持内建的WebSocket协议?
q两个协议的目标都是让基于Web的AJAX应用能通过异步消息或者基于Socket的连接进行通信Q而不是在一个现有应用之上再搭徏一个自己实现的通信层。这使得在设计应用的时候,可以只关注于lg部分Q而把消息传递给通信层去递送。另外,q两个协议都能够建立长连接,事g可以通过长连接异步地递送给应用。这没什么新鲜的QHTTP 1.1支持连接管道(可以在每个请求之后保持连接,q可以在W一个请求得到处理之后再发送多个请求)Q而像IMAP{一些协议则支持IDLE命oQ把q接|成休眠状态,q样在休眠的q接上就不再有数据传输,但是服务器依然可以随时推送新消息。其实在Bayeux或者WebSockets之前Q通过HTTPq行持久通信的机制一般被UCؓ?a >HTTP推?/a>”?
然而,长连接ƈ不是没有M问题。一条连接如果长旉没有数据通信的话Q会被认为已l死掉,q在接下来的某个旉点被l止。ؓ了解册个问题,IMAP的IDLE客户端每29分钟发送一个IDLE命o来避免断q。而HTTP代理则会军_q接是处于闲|状态ƈ丢弃q接Q而不ȝ客户端和服务器端是否已经保持了一条长q接?
资源限制也是一个问题。通常Q浏览器都会限制对单个服务器的ƈ发HTTPq接的数量,以避免对该服务器Q或者网l连接)造成q大的压力。浏览器一般会这个ƈ发连接数量限制在每次2?个?
Bayeux和WebSockets都试N免资源限刉题,使用回退机制来实现长轮询Q比如BayeuxQ,或者切换到其他非HTTP协议之上。那么,q些E序库的使用者就不需要再担心览器或者基架构的限刉题?
Erlang之父Joe Armstrong认ؓQ?a >WebSockets会q掉CometQ?
聊天室的典型用例是这LQ你q入了一个聊天室Q标识出你的存在Q这个标识会一直保持到你显式地退天室。而在Web聊天的情况下Q你可以收发聊天消息Q直C关闭览器或者{臛_他网c不q的是,即便是这么简单的用例都无法通过WebSocket实现Q因为在该协议中Q连接有一个闲|超时?
Z保持存在的状态,聊天应用要发送“连接保持(Keep AliveQ”的消息lWebSocketQ来避免该连接因为闲|超时而关闭。然而,应用q不知道q个闲置时I竟是多,因此它只能随侉K一个间隔周期(比如30U)来发送该消息Q这和长轮询要做的事g多有些类g?
通过onClose处理、连接保持、消息队列、超时和重试Q我们最l实C一个可以在用户停留在网上的时候保持其存在状态的聊天室。但是遗憄是这个聊天室依然q没有完Q因为它q需要处理错误和非暂时性故障?
即便如此Q现在还是开始cometd之\Q毕竟就现在而言Qcometd在我们项目中实施WebSocket要方ѝ?/p>
2.实战
本文实现了一个server 定时push一个随机数到client端,此例查询了大量的实例Q经q笔者验证,在IE和FireFox下都可以q行?
q行此例Q需要下面配|:
1Q?Tomcat要求支持CometQ必M用NIO或者APR的方式,因此Q修改Tomcat/conf/server.xml
<Connector port="9000" executor="tomcatThreadPool" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000" maxThreads="150"
redirectPort="8443" maxKeepAliveRequests="1"/>
2QTomcat版本要求6.0.16以上Q最好用最新的版本
3Q?修改附g中源码里面的web目录下的comet-compatible.jsp文gQ把里面涉及IP和端口的urlQ改成你机器的ip地址和端?/strong> 4Q?试q行Qhttp://ip:port/contextName/comet-compatible.jsp 误心{数U钟Q随机数开始从server push到client端了 源码见附?附g的URL如下Q? http://dl.javaeye.com/topics/download/ee28df9d-d838-3572-be73-dbf06c11080f
]]>
学习的第一步,是模仿。现在的d是跑通官方自带的例子
一、环境搭?在搭建好Android SDK 开发环境的基础?
1.CygwinQmake,gcc,perl?/pre>2.android-ndk-r5-windows.zip
二、Cygwin环境配置
修改文g X:\cygwin\home\use\.bashrc Q加入如下信?/pre>NDK=/cygdrive/e/ProgramLibs/android-ndk-r5
export NDK
三、开始项?/p>
1.打开CygwinQ进入到目所在目?a href="http://m.tkk7.com/images/blogjava_net/braden/WindowsLiveWriter/AndroidNDKr5window_E943/image_2.png">
![]()
2.执行命oQ?NDK/ndk-build 正常~译Q根据AndroidManifest.xmlQandroid:debuggable="true" q行指定Q?NDK/ndk-build NDK_DEBUG=1 调试~译Q如果是SDK?或更高的版本Q你不要指定Q工兯动按照调试来执行~译
更多资料参照 android-ndk-r5/documentation.html