Showing posts with label Android. Show all posts
Showing posts with label Android. Show all posts

Monday, February 15, 2010

让Android手机通过USB数据线共享电脑网络 (Linux版)

中国移不动的流量费向来是奇贵无比 (还有极大的地域差别, 浙江移动10元是200M, 而四川只有70M), Android手机更是用起流量来刷刷刷的, 要是一直保持网络连接, 一会儿就同步点联系人、Calendar、Gmail, 一会儿又检查下有没有软件更新, 我也曾经有过因此而超支到100多元的惨痛经历. 虽说现在每个月有100M的流量可以使用, 但还是有点不够用, 我觉得最理想的是能够借助电脑的网络上网. 也许有人会觉得这样有点多余, 既然有电脑, 干嘛还非得用手机上网, 其实这也因人而异, 有些时候确实会很有帮助. 试想你一边使用电脑, 再一边用手机听着豆瓣电台是怎样的感觉.

现在手机借助有线网络上网一般有以下几种方法:

  • 通过无线路由器+Wi-Fi上网, 这是最方便的一种方法, 但也是经济成本最高的一种.
  • 通过笔记本电脑的无线网卡建立ad hoc网络, 再使用Wi-Fi连接上网. 这种方法我曾经在Window$ XP里试过, 有点复杂, 且最终以失败告终... 不过据@coolwdp同学说在Win7下很方便.
  • 通过USB数据线将手机与电脑相连, 再分别在电脑和手机上虚拟出一个网络接口用于网络通信, 这很类似于VPN与虚拟机上网的原理. 今天将要介绍的就是这种方法, 好处是不论台式还是笔记本都适用, 只要有USB接口. 机锋网上有一篇针对Window$系统的介绍帖, 使用Window$的同学可以参考参考, 这里的介绍仅仅面向使用Linux的同学.

下面是详细步骤, 初看会有点复杂, 但只要理解了原理还是很简单的.

  1. 按照我以前的文章[在Ubuntu中配置可供Windows主机共享上网的VPN服务器]中介绍的方法设置电脑的IP转发及NAT.

  2. 用USB数据线连接手机与电脑, 上一篇文章介绍的CM ROM提供了"Internet tethering" (tethering是使电脑通过手机上网的意思, 和我们今天介绍的目的刚刚相反) 功能, 在"Settings->Wireless controls"中. 如果你的手机提供有"Internet tethering"功能, 将它开启. 为什么需要这么一步呢? 我们并不是想要借助手机网络来让电脑上网, 仅仅是为了利用它来建立虚拟的网络接口. 当开启"Internet tethering"后, 分别在电脑和手机上输入"ifconfig"与"busybox ifconfig", 你会发现两边都有一个叫做"usb0"的网络接口, 且IP地址都是一个网段, 如"192.168.77.X", 两边也可以互相ping通. 这就是"Internet tethering"虚拟出来的网络接口, 我们后面全部需要靠这个接口来与电脑通信.

  3. 虽然现在手机和电脑已经可以互相ping通, 但手机还无法访问外网, 这就需要设置一下手机上的路由表. 方法很简单, 只需要将默认路由的网关设置为电脑上"usb0"接口的IP地址就可以了, 比如这个IP地址为"192.168.77.100", 则在手机终端中输入以下命令:
    # busybox route add default gw 192.168.77.100 dev usb0
    
    现在再试试ping一下"g.cn"的IP地址: 203.208.39.104, 通了的话就证明已经可以访问外网.
  4. 光能通过IP地址访问外网还不够, 需要再将DNS设置好, 同样在手机终端中输入命令:
    # setprop net.dns1 8.8.8.8
    
    感谢万能的Google大神提供了这个万能地址, 现在应该可以直接ping通"g.cn"这个网址.
  5. 其实到现在为止, 基本的配置已经完成, 你已经能够享受电脑网络而丝毫不用考虑流量这回事了. 但当你关闭"Internet tetering"之后, 刚才所有的配置又会还原, 也就是说下次还需要输入以上两行命令, 这样就太麻烦了一点. 这里推荐使用GScript软件将以上命令保存为脚本文件, 当需要设置的时候就直接运行脚本, 脚本配置如下图:

    GScript

    这样每次的步骤就变成了开启"Internet tetering", 然后运行脚本. 可能是GScript本身软件的问题, 有时脚本需要多运行几次才行.

  6. 最后需要注意的一点就是某些Google服务 (如Google Talk) 必须在打开手机网络的情况下才能使用, 即使你已经可以通过电脑访问外网. 并不用担心打开手机网络会消耗流量, 那只是一个假象, 真正的网络通信全部都是通过电脑网络来实现的, 你可以仔细观察状态栏上的手机网络图标的箭头并不会闪动.

参考资料: 【更新】让G1通过usb共享电脑的网络,更新简单详细教程, [android-freerunner] Share internet connection through USB.

Sunday, February 14, 2010

HTC Magic (G2) 简明刷机指南

刷机可以理解为重装系统, 如果一个智能手机买来都没有刷过一次机, 在我看来那是极大的浪费. 作为一个智能手机的初级用户, 在经历了足够长的适应期与心理准备期之后, 我决定尝试着弄一次. 刚开始还一直担心会不会刷完后机子就直接变砖块了, 后来才知道, 如果不刷SPL (bootloader的一部分) 的话, 普通刷机是没有风险的.

刷机最重要的就是选择合适的ROM, Android系统从版本来分有1.5、1.6、2.0、2.1, 每个版本又有官方与非官方数种ROM. 就中文用户来说, 适用的有国内两大阵营: 机锋网 (这是@coolwdp同学推荐给我的) 和安卓网制作的各种ROM. 我选择的是机锋网基于CyanogenMod (CM) 编译的ROM, 最新的稳定版为4.2.14.1, 是Android 1.6的ROM.

下面是在G2上刷机的详细步骤:

  1. 从上面的论坛地址中下载相应的ROM, 重命名为"update.zip", 复制到SD卡的根目录.

  2. 关闭手机, 同时按住Home (小房子) 和Power键一段时间, 直到进入recovery mode. 这时需要按"Alt+W"键来清空内存, 但由于G2没有硬键盘, 也就没法直接完成. 但有人对recovery mode进行了修改, 加入了几个可以用轨迹球选择的菜单, 如果你的手机的recovery mode里没有这样的菜单, 就需要安装修改版的recovery image, 如果已经有了, 请跳到下一步.

    一开始我使用的是CyanogenMod官方制作的"cm-recovery-1.4.img", 结果进入recovery mode的时候一直卡在HTC的画面上, 只能把电池取下来, 强行重启. 后来才发现G2不能使用1.4的image, 于是在xda-developers上下载了专门针对G2 32A制作的1.4 image (也有32B的image). 下载相应的recovery image到SD卡的根目录, 然后在手机的终端里执行以下命令即可安装:
    # flash_image recovery /sdcard/cm-recovery-1.4-32A.img
    
  3. 现在已经进入了recovery mode, 选择"Alt+W"开始清空内存, 这里强烈建议在清空之前使用AppManager将所有的软件都备份到SD卡上, 以免重新下载 (这年头流量可不便宜).

  4. 清空完毕之后选择"Alt+S"安装ROM, 这步时间会稍微长点, 成功之后即可重启手机开始享受全新的ROM吧.

Tuesday, January 12, 2010

Android系统在发送短信后报错的解决

今天在发送短信的时候, 每发完一条就提示"The application Messaging (process com.android.mms) has stopped unexpectedly. Please try again.", 很是烦人, 还以为是系统出问题了, 然后在这里找到了解决方法, 说来也简单, 把所有短信删了就行了... 难道是存储的短信太多造成的? 太诡异了, 我手机里总共也没多少, 不过反正有一个叫做"SMS Backup"的软件, 重要的以后就备份到Gmail去算了.