分类 Android 下的文章

临睡前还是想写点东西。

星期天看Linux C,终于看到汇编程序相关的章节了。于是想把那示例程序(一个找出数组中最大数的汇编程序)敲一下,运行一下。但是出差在外,身边没有装了Linux的电脑。这时想到了G1上装了Debian,于是把程序敲进去,但一编译就报错了。想了想,x86 CPU的指令集跟ARM不同啊!Google一下,果然是这样!再想想,还有MIPS(“龙芯“基于此架构),其指令集也跟x86和ARM的不同,也导致其也可以语言的指令代码不相同。于是无获。

PS. 在敲代码的过程中,重温了vi/vim的操作。太强大了!

昨天终于在CentOS 5.4上把G1的USB Tethering(USB共享)搞定了。花了两个星期都处理不了的问题,其实就是驱动问题。去找了个驱动装一下就解决了。只需要执行一下以下脚本即可:
# wget http://downloads.sourceforge.net/synce/usb-rndis-lite-0.11.tar.gz
# tar zxf usb-rndis-lite-0.11.tar.gz
# cd usb-rndis-lite-0.11/
# make
# ./clean.sh
# make install

执行前,最好现把以下文件备份一下,以防有什么问题:
/lib/modules/2.6.18-164.el5/kernel/drivers/usb/net/cdc_ether.ko
/lib/modules/2.6.18-164.el5/kernel/drivers/usb/net/rndis_host.ko
/lib/modules/2.6.18-164.el5/kernel/drivers/usb/net/usbnet.ko

G1用USB数据线接到电脑上,开启USB Tethering后,执行“ifconfig -a”就可以看到多了一个rndis0接口了。再执行一下脚本即可利用G1上网:
# dhcp rndis0
# ifconfig rndis0 up

如果只是想让G1与电脑处于同一局域网内,不执行上面的语句,而执行以下脚本:
# ifconfig rndis0 192.168.77.100 netmask 255.255.255.0
# ifconfig rndis0 up
其中IP地址的设置,可以先查看G1的usb0的IP地址,如192.168.77.254,再选一个同一网段的IP地址,如192.168.77.100。

查考的网页如下:
1)HTC Tattoo (usb0 did not show up)https://www.centos.org/modules/newbb/viewtopic.php?viewmode=flat&topic_id=24127&forum=40
2)SynceInstallation/Debian
http://www.synce.org/moin/SynceInstallation/Debian

昨天,一星期难得一天的假期,全耗在usbnet上。最终还是没找到解决方法,我的G1还是不能在CentOS上通过USB共享无线网络。网上找到有讨论,说升级了内核后,就轻松连上了(该讨论的地址:http://www.centos.org/modules/newbb/viewtopic.php?topic_id=24127&forum=40#forumpost95581。虽然该帖讨论的是HTC Tattoo,但跟G1是一样的)。果然2.6.18的内核太年迈了,但我又不想更换内核,于是时间都白搭进去。

在找的过程中,发现有人讨论OpenVPN在Android(特别是在CyanogenMod Rom)上运行。相关讨论几文章如下:

1)CM的OpenVPN设定指南:http://www.androidin.net/bbs/viewthread.php?tid=60483&extra=&page=1

讲述N1上设置内置的OpenVPN,被网友多处转帖。我用的CyanogenMod-4.2.15.1也集成OpenVPN的支持,就是一直没搞过。该设置最麻烦的地方是导入证书。Android只支持PKCS12格式的加密证书,于是需要转换格式。看过一些文章后,终于转换出.p12文件(参考:常见证书格式及相互转换)。导入格式还有个问题,原来CyanogenMod Rom只能导入文件名为certs.p12的证书,这个我看了源码才知道,杯具~~更杯具的是,发现我申请的OpenVPN没有提供用户证书及密钥,于是不能用这种方法进行设置。
导入证书的相关讨论:
How To Install Openvpn Certs?:
http://forum.cyanogenmod.com/index.php?/topic/1732-how-to-install-openvpn-certs/page__p__30859__hl__openvpn__fromsearch__1s
installing cert and key for openvpn:
http://forum.cyanogenmod.com/index.php?/topic/304-openvpn-and-certificates/page__hl__openvpn__fromsearch__1
CyanogenMod Rom的源码地址:
http://github.com/cyanogen/CyanogenMod
导入证书的相关源码(见getCertFile方法):
http://github.com/cyanogen/android_packages_apps_CertInstaller
/blob/donut/src/com/android/certinstaller/CertInstaller.java

2)安装OpenVPN Settings:Android G1 Openvpn设置

该文章讲述得比较详细,不过由于TunnelDroid的作者改为直接支持OpenVPN Settings了,所以只要直接从Market下载并安装OpenVPN Settings就可以了。然后建立目录/sdcard/openvpn,把OpenVPN的相关配置文件放进去就可以了。

拿着手机“翻墙”很有Hacker味道,twitter、facebook、youtobe等都可以直接上了。不过我最高兴的是,可以直接访问http://developer.android.com/。

PS. 1)OpenVPN最难的,还是找个免费的OpenVPN服务器

2)高中时发现个软件叫SoftEther的可以建立虚拟局域网的,现在该软件已经变成PacketiX VPN了。该软件由日本筑波大学开发的,据说具有优秀的防火墙穿透能力。官方网站:http://www.softether.co.jp/

本来想在G1上装个WiFi密码破解软件。但是启动Debian失败,于是搞了几天,才发现启动脚本有问题。过程中找到以下文章,可以自己编译一个ARM版的Debian:
Debian & Android Together on G1 - Jay Freeman (saurik)
http://www.saurik.com/id/10

成功运行Debian后,去下载了aircrack-ng-1.1的源码来装。后来发现装的Debian上已经附带aircrack-ng。
Aircrack-ng
http://www.aircrack-ng.org

然后发现G1上的无线网卡tiwlan0不能以监听模式运行,就是iwconfig命令不能用,于是不能实现G1破解加密WiFi。再看看相关资料,说是驱动问题,不允许对无线网卡进行底层的设置。看来只能等高手写个驱动了。

看了看WiFi的加密,分为wep、wpa及wpa2三种。其中wep加密最容易破解,只要抓到足够的数据包就可以了。例如aircrack-ng就能轻松破解。也有个叫BT3的整体解决方案,包含虚拟机、Linux操作系统(Slax)和图形化软件,公司的同事演示过,对wep加密简直是“秒杀“。wpa和wpa2加密更安全,破解需花费更多时间。暂时没接触过。

过程中发现一篇关于把Android移植到真实机器环境的文章:
KLDPWiki: Android Porting On Real Target
http://wiki.kldp.org/wiki.php/AndroidPortingOnRealTarget
花了一个晚上把它看完,获益良多。简单来说是对Android有更进一步的认识。

还发现了Android上的VNC Server:
Android VNC Server
http://code.google.com/p/android-vnc-server/
此软件是在别人的基础上修改而来的,免去了安装驱动的要求,在G1的终端上敲下命令就可以了。最新版本实现了对触摸屏的支持。

PS. iPhone出来后,大家都学做界面;Android出来后,大家都学做系统了。

由于不明原因,来自异世界的Ghost游荡在我们的世界,而且人类看不到它们!然而强大的Google服务器搜索出这不明来客,于是为了驱除Ghost,净化人类的世界,Google发明Android。来吧,拿起你的Android手机,装上SpecTrek就可成为战士,协助拯救世界。

以上为Android上著名游戏SpecTrek的故事背景。该游戏利用手机的摄像头、GPS、指南针、重力感应,结合Google Map、Internet,成为能够与现实交互的虚拟游戏。玩法很简单,启动游戏,选择游戏的时间长度(15分钟、45分钟或2小时),然后游戏根据所选游戏时间,以玩家当时所在地点为圆心,圈取一定范围作为游戏区域,并在该区域放置一定数量的Ghost。进入游戏,玩家只要在所选时间内,捕捉游戏区域内的Ghost,就算是完成任务。另外,游戏区域内还有隐藏物品,不过不会轻易捡到。游戏操作也很简单,玩的时候,手机平放就可以看到地图和指南针,举起手机就可以捕捉身边的Ghost。

该游戏的奇妙之处就是把虚拟游戏和现实结合,达到良好的操作体验。相信玩过Wii的,都可以想像到那乐趣。简单来说,是个随时可以玩的寻宝游戏。而且经验值像RPG一样可以累积,有等级和能力成长。这很适合替代无聊的饭后散步。

玩这游戏时,我想起了日本动画《电脑线圈》。此时我的G1就成了动画中眼镜,透过那特殊的眼镜,可以看到建立在现实世界中的虚拟世界。但此游戏的互动性肯定没那眼镜强。提起现实世界与虚拟世界的交互,就不得不提在MIT工作的一个印度人,他的想法是结合投影仪、摄像头、3G网络等,改变我们操作电脑的方式(扯远了,改天再写下那人的演讲)。It's amazing!

PS.
1)回顾一下电子游戏的发展,就会发现人们一直在努力提高电子游戏的操作性。以Nintendo的游戏主机发展为例,红白机上的光枪和扫描条形码的游戏,GameBoy上拍摄游戏者头像成为主角头像的“口袋妖怪“(卡带上有摄像头),GBA上能够识别白天和黑夜的“黄金太阳“,NDSL及其后继机型配备麦克风、触摸屏来提高操作性,Wii则配备拥有方位及重力感应的无线手柄……

2)曾经想过改造输入设备来提高电子游戏的乐趣:
A)高中时想过利用“跳舞毯“和键盘玩电脑版的“生化危机“。跳舞毯代替方向键,其它键用键盘操作,其中空格键设为开枪键。只是当时没钱买“跳舞毯“,想自己造一个,却发现买材料也需要成本。即使还想过用赛车游戏的“方向盘“来代替方向键,但也是钱的问题,最后都没实现。

B)大学时去玩“太鼓达人“,觉得很High,于是想自己弄个“鼓“。最后的实现是5块钱买个破手柄,把它的四个方向键分别外接上四个大按钮,并把这四个按钮固定在桌上。启动个跳舞游戏后,拿起两个小的塑料可乐瓶(当作鼓棍)就可以敲了。玩起来还是有一点感觉的,只是太山寨了。还有类似的,是玩“吉他英雄“(好像是这游戏)时,把键盘放地上当作脚踏(就因为空格键够大,好踩),手拿手柄。

 经过两天的研究,终于成功用G1发彩信了。在这激动人心的时刻,首先对中国移动(特别是广东分公司)送上伟大的神兽——草泥马,以表示此刻的心情。

我的sim卡是属于广东移动的神州行畅听卡,根据androidin论坛里的教程设置APN后可以接收彩信,但发送总不成功。昨天收到一条短信,说我“使用GPRS产生CMNET流量77K,超出GPRS套餐内容,收取流量费用1.00元”。后来查了广东移动的网站(https://www.gd.chinamobile.com/easyown/operation/internet/02,52.shtml)才知道,广东移动的新GPRS套餐是CMWAP可以包月,但CMNET不能包月,且收费为1元/MB。恐怖~~于是马上把CMNET删了。

最后领悟出APN的设置,需要建立以下两个APN:

---------第一个---------
名称:cmwap
APN:cmwap
代理:10.0.0.172
端口:80
用户名:<未设置>
密码:<未设置>
服务器:<未设置>
MMSC:<未设置>
彩信代理:<未设置>
彩信端口:<未设置>
MCC:460
MNC:02
APN类型:default

---------第二个---------
名称:cmwap mms
APN:cmwap
代理:10.0.0.172
端口:80
用户名:<未设置>
密码:<未设置>
服务器:<未设置>
MMSC:http://mmsc.monternet.com
彩信代理:010.000.000.172
彩信端口:80
MCC:460
MNC:02
APN类型:mms

其中“名称”随便填,而“MNC”有的说移动的是00(零零),其实默认就可以了,我的“MNC”默认是02(零二)。以上配置没有配CMNET,所以不能上Internet。也因为广东移动的CMNET收费很变态,所以没有配CMNET。

总结一下实验结果吧。首先,虽然这个设置是没错,但是彩信发送的发送不能百分百成功。原因可能跟网络及彩信大小有关。彩信大小为1K,成功率较高,但白天在公司,彩信一条都发不出去。晚上发的话,成功率很高,发了几条,别人都能收到,我也给自己发了个照片,40K左右,发送和接收都很顺利。

PS. 人家玩G1都上3G(外国的),而我还在研究2.5G的使用……正如应老板说的:“脑残,就玩别人不玩的东西”。

今晚很热,也很无聊,所以到外面逛逛——首选的地方是房子附近的中大。无它的,只是对当代大学生的夜生活有点兴趣,并怀念一下当年夜闯战场看野合的经历。但是,没什么收获,只是看到一些穿着暴露的MM,行色匆匆地往校外跑……

还是说点正经的吧。在校内的路上,偶然看到手机有WiFi信号的提示,有点惊讶!(但是再想想,宿舍里装个无线网络也不奇怪吧?)于是产生了一个想法——去寻找可用的WiFi!这样以后就可以在校园里上上网、吹吹风,顺便看看MM……

中大里逛了一圈,发现“动感地带”的营业厅(类似那种校园里交话费的地方)那里找到无加密的WiFi,附近还有一对情侣拿着笔记本上QQ。可是连上去就发现,网关加密了(要输入用户名跟密码才可以上外网)。登陆页面上除了英文就是问号,估计是编码不被支持。幸好有个咨询电话,打过一问才知道只是个搞网络维护的(技术支持),对帐号怎么申请一无所知,他推荐我打10086。于是又咨询10086的人工服务,那MM最后的答复是,中国移动没提供无线上网服务,这边的3G网络也没开通,让我打10000号咨询一下中国电信,顿时晕倒~~~没办法,只好等明天到那营业厅咨询一下。

然后又到了附近的商业区,看看有没有地方有免费WiFi,又可以坐下来喝东西的地方。又逛了一圈,发现很多WiFi信号,应该是附近的公司和住宅的,但不是信号弱就是加了密。最后找到了两个:一个是在一栋大厦前发现的,估计是那公司内部的WiFi,但由于附近阴暗,感觉不安全,于是测试过能连上就跑了(不知道能不能再作进一步行动,比如进入那公司的内部网之类)。另一个是一家酒店的CoffeeShop(咖啡馆),平时走过都不知道这酒店还有个CoffeeShop!居然跟踪WiFi信号找到这家店,但是进去前要经过酒店大堂,而且不知道里面的消费如何,还是没进去。

经过今晚的行动,深深感受到WiFi已经溶入我们的生活,变成很平凡的东西了。同时证明我买G1的选择是正确的!拿着它,比MID、上网本等都要好(轻便、实用,想象一下拿着笔记本在街上找WiFi就知道了)。

PS. 1、生活中的无线信号非常多——电视信号、GPS、手机信号、FM调频、WiFi等,究竟这些无线信号除了方便我们的生活以外,对我们的健康有没有带来什么影响呢?如果我们的生命受到这些东西的危害,又应该怎么去维护自己的权益,或者找谁去赔偿我们的损失呢?答案还是Who Knows。

2、渐渐地,G1已经溶入到我的生活了。例如:见到有趣的事物就用G1拍下来,到CoffeeShop就用G1来上网,在车上就用G1来看书、听歌、看电影,做饭、洗碗、洗澡都用G1来放歌(音质很一般,没有低音,带上原配的耳机也一样),甚至上厕所也带着G1。这东西完全替代了那老迈的e310之余,还带来很多新乐趣。是时候复习一下Linux命令了。

3、晚上十一、二点一个人在大街上找WiFi,Crazy~!这就足够证明我有多无聊了……

2009-06-07补充:中大的那个WiFi没戏了,那负责人说该WiFi主要是建给自己用的,如果别人用的话收费很贵,要两毛一分钟。明显是说,我这个WiFi你就别想了。

还没买G1之前就看到网上有人说可以在G1上跑Debian。那时就想,能运行Debian,G1不就万能了吗?今天通过实践,证明了我的想法是正确的。

其实几天前就把Debian装到G1上了,也用apt-get来安装而了nginx。昨晚把nginx(一个俄罗斯的HTTP服务器,以小巧、占用资源少、高并发等优点著称)重新以编译源码方式安装,然后把它的HTML文件夹挂到SD卡上,以便把SD卡上的一些HTML文档挂上去。最终的目的是实现本地HTTP服务,并用系统自带的浏览器(Chrome Lite)来看HTML文档(由于Chrome Lite不支持查看本地文件系统中的HTML文档,而用HTML Viewer又没Chrome Lite那么强大)。虽然这做法非常Crazy,但实现后很有满足感。今天把G1连到公司的WiFi,然后用台式机访问其HTTP服务,感觉很炫。同事们看了,也十分惊讶。

后来萌生了个想法。由于G1上不能无线传送文件,那可不可以绕个圈子来实现呢?首先装个aNetShare,该软件可以使G1变成无线AP(同类的软件还有WiFi Tether)。这样其它机器就可以通过WiFi连我的G1,然后我只要提供个HTTP服务或者FTP服务,那就可以共享我的文件,别人就可以下载了。呃,好像好麻烦……不过挺好玩的。明天再借个笔记本试试,看我的想法可不可以实现。

近来就忙着玩G1,还比较认真地开始去看C语言,以致很多事情都来不及做了,希望这个周末能赶赶进度。

PS. 1.看着程序在G1上慢慢编译,是一种很写意的感觉,但编译过程中出现error的情况除外。

2.看了C语言,才知道,原来两个数交换可以不用再建个临时变量的,用“异或”就可以了。感觉很神奇,而且节省时间跟空间。例如:
一般做法是这样:
int a=111;
int b=222;
int tmp=0;
tmp=a;
a=b;
b=tmp;

用“异或”实现:
int a=111;
int b=222;
a=a^b;
b=a^b;
a=a^b;

终于,终于有机会触摸屏G2了!

今晚又跟表姐两夫妇去了Jack Magic Pea咖啡馆,这次还把表妹拉了出来。

废话少说,还是先说说表姐夫的G2。拿在手里,第一感觉是轻薄!对于拿惯了G1的我来说,是一种非常意外的惊喜!当初还担心没有键盘和滑盖,会让G2变得不方便,但是随着的Android系统的成熟,却没有想象中的难用。不过还是不喜欢那虚拟键盘,按键小(iPhone也是这样),容易按错。系统就不用多说了,而且以可随便刷,不错。

但是跟iPhone比起来(正好表姐夫有台iPhone,可以比较一下),还有一定的距离。首先是让全世界都遗憾的多点触控,虽然硬件上已经准备好,但由于版权问题,还是没有出现在系统中(网上已有了Android上支持“多点”的软件,但没玩过)。其次是动画效果,Cupcake(Android 1.5的代号)出来后,增加了很多过渡动画,但只是在读取下一个画面前插播一个动画,反而加长了读取时间,这跟iPhone的不同(所以我屏蔽了这些特别效果)。然后就是软件问题,虽然日渐丰富起来,但还是有点少,还有旧软件有不支持Cupcake的情况(或者说新系统不兼容旧软件)。

总的来说,G2还是非常不错的!G1给人的感觉是一款试验性产品,很适合开发人员使用,而G2则感觉是实用性产品,更接近于iPhone。

由于“五一”假期买了G1,所以这几天一直沉迷于此。

第一眼见到这家伙就觉得充满“苹果”的味道(黑色版和灰色版便没有这感觉了)!简洁的机身,白色的钢琴键烤漆,圆滑的边角,金属底盘的键盘,整齐的USB接口……这些都是APPLE经典设计!真让人爱不释手。其另类的侧滑风格,相信会成为又一经典。据说屏幕是夏普的,加入点距小,看起来清晰亮丽。

Android系统操作起来很舒服,果然是专为手机而设计的系统。将其升级到1.5(Androidin.net提供的1.5MOD3)后,对中文的支持堪称完美。安装Google拼音输入法后,完全解决了中文输入的问题,使得搜索条、短信等都变得更加可用!结合机子自带的触摸屏、GPS、重力感应、磁铁等硬件,可以开发出各种有趣的应用程序和游戏。例如有个叫“Metal Detector”的软件可以用来探测铁,很好玩!又如Google Map加上GPS定位,便成了导航系统。但是,目前还缺少许多基本的应用软件,给日常使用带来诸多不便。相信随着时间的推移,这情况将会得到改善。

最后不得不说的是电池问题。续航时间短是个致命伤(现在好象大部分的智能机都存在这个硬伤),经常用的话,一天可能要充两次电。今天测了一下,把电池的电全部耗光,直到机器自动关机,然后用电脑的USB充电,大概就花了4个小时才充满。

还有个问题,就是机子背面的盖做得非常不好!当要换sim卡时,打开机子的背盖比较麻烦,这个问题不知道G2有没有改进。