adb通过wifi连接 milestone

如果你有安装 Android SDK,应该会知道有一个 ADB 工具,这个工具可以在命令行下控制、调试你的Android 设备,这个工具不仅支持通过 USB 链接,而且可以通过 TCP/IP 来连接,也就是说不需要数据线,通过 wifi 就可以连接了。但是在默认情况下,是无法连接 milestone的。下面来讲怎么设置通过 wifi 来连接ADB。

第一种方法:

在菜场里找一个Android 的终端工具,我用的是 Terminal Emulator ,然后在终端里,依次输入

setprop service.adb.tcp.port 5555
stop adbd
start adbd

然后,在你的电脑(WIN/LINUX) 里命令行启动 adb,输入 adb connect your-phone-ip

手机的 ip 地址可以安装 NetInfo 这个 android软件查看。

如果连接成功,就可以使用 ADB 命令来管理手机了。

第二种方式:

去菜场下载一个叫做 adbwireless的软件,然后一键可以搞定这个问题。可以开关,很简单吧。

关于 android shell 的操作,以前玩智器的时候写过一篇, 另外以前写过一个没有 cp 命令的解决方法,我发现我的android 2.1 中已经有 cp 命令了。

注意:不要一直开着这个东西,不安全。我没有找到通过 adb 连接手机的权限设置,也就是说,只要别人的电脑能 ping 通你的手机,如果你的这个功能开着,就可以连接你的手机,执行 shell 命令了。如果你的手机已经 root(相信大部分玩家都root了吧),那就更不幸了,别人可以直接获得手机的 root 权限,我目前也没找到设置 root 密码的方法,有知道的麻烦告诉一声,谢谢。在连接公共网络的时候,这种情况更容易发生。

昨晚在做这个尝试的时候,开始用第一种方法操作,这个方法手机重启后就无效了,于是想把相关代码添加进 init.rc 文件,但是未成功,因为这个文件受保护,没那么容易修改。然后想到了安全问题,就彻底放弃,转而寻找更方便的方式,搜索到了 adbwireless软件,它还会在顶部状态栏显示一个图标,表示正打开着 adbwireless,用完应该不会忘记关掉。

Android WEB app 跨域 AJAX

前段时间做毕设的时候,使用 PhoneGap打包web app的方式做开发,我使用的 PhoneGap版本比较老,没找到和服务器端通信的直接方法,因为html是在本地,所以使用标准的XHR是跨域的,当然也就不能用了,于是自己写了一可以跨域加载的小东东,使用动态 script 节点的方式,不是常见的jsonp的方式,因为写后台的老师比较土,AJAX都不知道,更不晓得让他每次我传递个函数名字过去,他包装数据了。就像YUI的 getScript函数一样,后台可以返回 var foo=2; 这样的数据,然后成功后,就可以利用 foo 这个全局变量了,写的过程中参考了 YUI和 jQuery 的实现方式,没有兼容其他浏览器,只兼容 Android。

代码如下,很简单,可能还有点小BUG,本来是打算接着完善的,但是现在好像没时间来折腾这个了,所以就先发上来,加上这段时间找 phoneGap找到我博客的人蛮多的,或许对大家有点帮助吧。

/**
*  By Allen.M http://allenm.cn  email: i@allenm.me 2010-05-22
*  @method getScript
*   url : string, the script's url;
*    options: object (options)
*          onSucess: function , it will be execute when the script load sucessful.
 onFailure: function, it will be execute when the script load failure, the URL is wrong, OR the Internet problem .
 onTimeout: function, it will be execute when the script is timeout.
 erase: Boolean. The default value is true; if it's true, the script will be remove when the onload event fire.
 timeout: number.(millisecond).  The default value is 3000
 charset: string. set the scirpt's charset. The default value is utf-8
*/

//function getData(url,onSuccess,onFailure,onTimeout,erase,timeout){
function getScript(url,options){
 var script=document.createElement("script"), T, Now=+new Date(), timeout=options.timeout||3000, erase=options.erase||true,
 head=document.getElementsByTagName("head")[0], isTimeout=false;
 script.charset=options.charset||"utf-8";
 if(url.indexOf('?')==-1){ // avoid the browser cache the data.
 script.src=url+'?t='+(+new Date())+'&emp='+emp;
 }else{
 script.src=url+'&t='+(+new Date())+'&emp='+emp;
 }    

 script.onload=function(){ // Handle the onload event
 if(options.onSuccess&&(!isTimeout)){
 options.onSuccess();
 }
 if(erase&&(!isTimeout)){
 head.removeChild(script);
 }
 clearTimeout(T);
 };
 script.onerror = function(){ // Handle the onerror event
 if(options.onFailure){
 options.onFailure();
 }
 clearTimeout(T);
 head.removeChild(script);
 };
 head.appendChild(script);
 T =  setTimeout (function(){ //Handle the timeout event
 if(options.onTimeout){
 options.onTimeout();
 }
 isTimeout=true;
 head.removeChild(script);
 },timeout);
}

比较简单,看看就懂了,我就不解释了,有什么意见和建议可以联系我,在 About Me 页面可以找到我的联系方式。

移动互联网终端的touch事件和click事件

昨天晚上学习并分享了手持设备浏览器的 touchstart, touchend, touchmove 事件,突然又想到这个事件和 click 事件在应用的过程中是否会有冲突呢?

如果我们允许用户在页面上用类似桌面浏览器鼠标手势的方式来控制WEB APP,这个页面上肯定是有很多可点击区域的,如果用户触摸到了那些可点击区域怎么办呢?

带着这些疑问,我测试了我的 Android 1.5,发现系统已经很好的帮我们处理好了,具体说来,当明显的手指在屏幕上滑动,是不会触发 click 事件的,当明显的点击的时候,同时出发 click 事件和 touch类事件。有了这些我们已经很方便的控制程序来做我们想做的事情了,我们可以通过 touchstart事件和 touchend 事件的 pageX,pageY属性来判断用户到底是想做什么操作了,如果偏移值很大,很明显的就是滑动操作了,如果偏移很短,就不做操作,这个时候很有可能是会触发click事件了。

测试例子在:http://lab.allenm.me/touch_click.html,和上一篇文章一样,你可以使用你的移动手持设备去访问,测试。

Android shell 没有 cp 命令的解决方法

写上篇文章的时候意外的发现Android shell 是没有 cp 命令的,于是删除了上篇文章里的 复制文件的操作部分。理论上,可以自己编译 cp 程序进来,但是对于像我这样的菜鸟,还是变通变通比较划算,用以下两个命令之一就可以实现 cp 的效果了。

cat source_file > dest_file

OR

dd if=source_file of=dest_file

例如上篇博客中提到的 q5.txt,如果还存在在 sdcard/test/ 目录下,我们想复制到sdcard目录下,并重命名为 5.txt,那么先CD 到 test 目录,执行 cat q5.txt > ../5.txt 或者执行 dd if=q5.txt of=../5.txt都可以完成任务。

这个 tips 来自这里(请自备梯子)

智器Q5 Android系统连接电脑|| ADB 命令略解

相信很多用智器Q5的童鞋,都曾经试过连接91助手做安装软件等操作,但是大多都失败了吧,91助手对智器Q5的支持很差,谁让智器Q5的Android是民间自制系统呢。91助手当然强大,但是如果我们仅仅是只需要安装个软件,同步个文件,那么有更简单,而且一般不会失败的办法,那就是 Android 自带的 ADB 工具。

使用这个方法的前提是要求你的电脑和Q5在同一个局域网网段下面,一般Q5的用户都有WIFI用吧,所以这个不是问题,因为USB模式灰常不稳定,用WIFI不用装驱动,要好的多。

1,首先我们下载 Android SDK(给的链接不是官方站,不喜勿点,谢谢,我也喜欢官方站,但是那个很多人访问不了。)一般下载等于你的版本或者比你装的 Android 版本高的就可以了。然后解压到某个文件夹,例如 d:\android\ 文件夹(以下讲解以这个文件夹为例)。

2,为了一会儿使用方便,我们把SDK的 tools 文件夹添加到系统环境变量里,添加环境变量的方法是,右键我的电脑,选择属性,在“高级”选项卡下边可以看到环境变量,点击进去,添加这个文件夹到系统环境变量里就可以了(注:每两个环境变量之间用”;” 分号隔开),没做过此操作的童鞋建议先Google一下详细方法。

3,按 windows+r 输入CMD 回车,进入CMD模式,输入 adb 回车,看是否已经可以使用 ADB 命令了,如果可以了,那就成功一半了,如果不能用,请检查环境变量设置,或者先 CD 到 android\tools\文件夹,再 执行 adb。

4,如果ADB已经可以运行,那就来看看 ADB 的几个常用命令吧。首先我们可以查看一下Q5的IP现在是多少,运行 3G dialer 这个程序就可以看到了,如果你的机器上没这个软件,那就通过你的路由器来判断机器的IP吧。执行 adb connect ip:port 这个命令连接Q5设备,例如你当前Q5的IP是 192.168.1.101, 那么就执行 adb connect 192.168.1.101:5555 ,如果成功会提示 connected,不成功请重试或者检察IP是否正确。

5,连接成功后,就可以进行各种操作了,先来说安装软件吧,例如你有一个Android APK 软件包,名字叫 a.apk 放在 d:\AnroidSoftware 这个文件夹,并且前面的系统变量已经成功添加,那么就可以在CMD里先cd到 d:\AndroidSoftware这个文件夹,然后执行 adb install a.apk 等一会儿就可以看到安装成功的信息了,这个时候就可以进入到Q5的菜单里找你刚安装的软件了。

6,传文件到 Android设备:我们也可以通过 adb 传文件到 Q5中,例如我们有个文件名字叫 q5.txt,想把这个文件上传到Q5的SD卡上, 同样在上面放软件的那个目录下面,那么我们可以执行 adb push q5.txt sdcard 执行完毕返回成功信息后你可以通过q5里安装的文件管理器查看到。

7,移动/重命名/删除文件:如果我们想对Q5里的文件做上述操作,那么我可以执行 adb shell 执行完毕后,我们就进入了q5的shell,也就是Linux的shell,因为q5是基于linux的,所以这个shell基本上是和你常见到的linux shell是一样的,例如我们想对刚才上传的 q5.txt 做以上操作,先执行 cd sdcard,再执行 ls ,这个时候我们可以看到 q5.txt 的存在了也证明了第6条操作是对的。我们先把它移动到一个不存在的 test 目录里面去,执行 mkdir test 新建 test 目录, mv q5.txt test/q5.txt 就移动了,现在再来重命名这个文件为 5.txt,执行 cd test,然后执行 mv q5.txt 5.txt。现在我们要把这个 5.txt 删除,执行 rm 5.txt,就可以了。通知在shell里面,我们还可以执行 sqlite3来查看数据库,开发者会用的上。

学会了这些基本操作,很多时候我们都不再需要去折腾91助手了,我也认为91助手做的好,但是智器Q5装了Android后,连接91助手不那么容易,所以就介绍了这个方法。

用Android虚拟机试玩Android系统,运行Android软件

如果你是一名Android开发者,或者拥有一台Android设备,就可以忽略此文了。

我的毕设是Android软件开发,因为老师手里暂时没有Android设备,我人又在杭州,所以就先让老师用虚拟机试用一下我的程序了,可能很多人都是在 eclipse 做开发的时候用虚拟机,在IDE中启动,但是为了试玩程序,装个 eclipse 显然不现实,其实只需要几部就可以体验 Android 虚拟机了。

  1. Android SDK 需要 JAVA运行环境,所以请确保你的机器上有装 JAVA,如果没有自己去下载 JRE 并安装。
  2. 以1.5版本为例,到http://www.android123.com.cn/sdkxiazai/357.html 这里下载 SDK(因为官方的因为众所周知的原因不能访问,所以给了这个网址,非广告,和我无关,搜索引擎结果)
  3. 下载后解压到某个目录,例如 解压到 d:\android\ 一下以这个为基准举例
  4. 到  android\tools\ 目录去运行  android.bat ,会见到这样的界面:
  5. 点击新建就可以新建 虚拟机了, name 随便取,target 选择合适的版本就可以了,如果是在我给的那个地址下载的话,只能选择 1.5或者 1.6 版本的。更高版本的可以在那个网站里找到,方法一样。
  6. 新建虚拟机,就可以回到上面那个界面中,选择要启动的虚拟机,点击  start 了,这个时候就会看到 Android 虚拟机的启动界面了,耐心的等待一段时间后,就可以看到 Android 系统的真面目了。这个时候就可以体验Android 系统自带的一些功能了。
  7. 如果想体验某个软件的功能,请按照步骤继续。
  8. 下载你想体验的软件 apk  打包文件,这个是 Android 程序打包格式。放到  tools 文件夹。
  9. 用CMD 模式 先 CD 到 android\tools\ 目录,然后运行 adb 可以查看 adb 支持的命令。使用 adb devices 可以查看当前连接的虚拟机,如果你的虚拟机正常运行的话,这个时候可以看到 List 下面会有一个虚拟机。
  10. 然后 使用 adb install 命令就可以安装 这个软件了,例如这个软件的文件名是 a.apk 那么就执行 adb install a.apk ,当看到 success 的时候,就可以进虚拟机的菜单里找到那个程序,运行了。

步骤写的比较多,但是实际上还是很简单的,操作一次就熟悉了,如果你知道环境变量是什么东西的话,那就直接添加 tools 目录到系统环境变量里吧,这样就更方便了。另外 adb 支持的命令,你也可以通过查阅文档获取更多,功能还是很丰富的。

相信如果你没有Android设备,又不是一个开发者,只是想体验某个Android程序的话,可以用这个方式来快速体验一下。

使用HTML+CSS+JS为Android写程序

我的毕业设计是写个Android程序,SDK是要用JAVA的,可是JAVA我基本不会,写起来是非常痛苦,加上时间也不多了,萌生出了写WEB APP的念头,可是运行在浏览器里的WEB APP有点不大符合老师想要的结果。于是寻找让WEB APP变成本地APP的形式。

昨天刚好看到腾讯发布的Android QQ,据说就是把Mini WEB QQ包装了一下,那么,我应该也可以用这种方式包装,搜索了一下,才知道有个叫PhoneGap的东西,可以实现我的这些东西,仔细折腾了一个晚上,终于配置好了,可以用HTML+CSS+JS来开发了,但是还不知道具体效果怎么样,折腾起来好费时间,因为我没有一个稳定的Android设备,在智器Q5上折腾是很痛苦的,第三方开发的Android固件不稳定,WIFI 不稳定,91助手不能连,换了好几个版本的固件,刷机,然后换91助手的版本才搞定,很是折腾,另外稳定的固件都是Android 1.5 版本的,但是 PhoneGap 这个东西,最新版的已经不支持 1.5 的了,只好去找老版本的,终于才成功把 PhoneGap 生成的程序运行在了智器 Q5上了,下一步就是加快开发了,写 WEB APP 对于前端程序员来说,是个很容易的时期,应该只需要考虑这个设备的特殊特性,查查API就可以了。

如果你也是前端程序员,也想给Android开发程序,不妨来试试这个。