分类 Android 下的文章

通过一晚的测试与实验,终于用YUMI,把Android-x86 4.4.2 RC2装到U盘上,并且启动成功。记录一下吧:

1)打开YUMI并选择U盘,Step 2选“Try Unlisted ISO (via SYSLINUX)”,Step 3选ISO文件,如“android-x86-4.4-RC2.iso”。然后就等待YUMI自动处理完成。

2)进入刚弄好的U盘,找到文件 X:\multiboot\android-x86-4.4-RC2\isolinux\isolinux.cfg 并用编辑器打开。修改 kernel 和 initrd 的路径前缀为 /multiboot/android-x86-4.4-RC2 。具体修改后的文件内容如下:

default vesamenu.c32
timeout 600

menu background android-x86.png
menu title Android-x86 Live & Installation CD 4.4-RC2 
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffff00 #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ffffff00 #ff000000
menu color hotkey 7 #ffffff00 #00000000

label livem
    menu label Live CD - ^Run Android-x86 without installation
    kernel /multiboot/android-x86-4.4-RC2/kernel
    append initrd=/multiboot/android-x86-4.4-RC2/initrd.img root=/dev/ram0 androidboot.hardware=android_x86 video=-16 quiet SRC= DATA=

label vesa
    menu label Live CD - ^VESA mode
    kernel /multiboot/android-x86-4.4-RC2/kernel
    append initrd=/multiboot/android-x86-4.4-RC2/initrd.img root=/dev/ram0 androidboot.hardware=android_x86 video=-16 quiet nomodeset vga=788 SRC= DATA=

label debug
    menu label Live CD - ^Debug mode
    kernel /multiboot/android-x86-4.4-RC2/kernel
    append initrd=/multiboot/android-x86-4.4-RC2/initrd.img root=/dev/ram0 androidboot.hardware=android_x86 video=-16 vga=788 DEBUG=2 SRC= DATA=

label install
    menu label Installation - ^Install Android-x86 to harddisk
    kernel /multiboot/android-x86-4.4-RC2/kernel
    append initrd=/multiboot/android-x86-4.4-RC2/initrd.img root=/dev/ram0 androidboot.hardware=android_x86 video=-16 INSTALL=1 DEBUG=

PS. Android-x86项目越来越完善了,非常适合上网本安装。但要注意驱动的问题,特别是无线网卡!

记得刷上Android 4.0之后,想过为什么系统自带了流量监控功能,还要装个监控流量的软件呢?系统自带的流量控制,最大的缺点是不能把流量统计情况显示在桌面上。于是想做个Widget,直接显示系统统计的流量情况。一直拖到上几个星期,终于开工了。但是,面临着一大堆问题……

首先是API。Android统计流量的API都是系统不开放的,就是带了@hilde的类、属性、方法等。

方案1:直接源码编译。首先想到是把android framework的源码下载下来,重新编译成jar包。问题是,CM提供的源码(http://github.com/CyanogenMod/)可能跟Android SDK的对不上。而采用SDK自带的源码,又不能编译。于是直接否决此方案。

方案2:采用Java的反射(Java Reflection)。比编译源码简单多了,什么类都可以拿来用。但是,要写一堆try catch代码,太麻烦了!

方案3:反编译虚拟机上的jar包,即把已编译成dex的jar还原成JVM的jar。由于虚拟机上的jar已被odex化,所以还要先合并。
1)用smali把odex文件转化为dex文件(smali项目:https://code.google.com/p/smali/)。
2)用dex2jar把dex文件转为class文件(dex2jar项目:https://code.google.com/p/dex2jar/)。
3)把class文件打包,并替换SDK上的platforms/android-17/android.jar文件。
这样就可以只用系统的所有api了。但是有个问题,就是system权限的问题未解决。要获得system权限,必须要获得rom的签名。就是说,只能放到rom里面,不能做成通用的软件。

所以,这个项目就研究到这里,然后无限期的暂停了……

在G1时代,入手了蓝牙耳机之后,就一直想把蓝牙耳机当成无线快门来用。虽然很屌丝,但是很实在的一个功能,特别是当年还一个人到处乱逛。

这几天终于启动这个项目。一开始的想法,肯定是参考一些音乐播放软件,利用BroadcastReceiver接受蓝牙耳机的按键事件,再广播一个Camera按键事件,实现从蓝牙的“播放键”到相机的“快门”的动作转换。但是,静态注册了BroadcastReceiver后,不起作用,怀疑是受其它音乐播放软件的影响,但也查不到原因。

后来灵机一动,想起直接修改Android的按键影射文件,把“播放键”直接改成“快门键”。于是修改 /system/usr/keylayout/AVRCP.kl 文件,把 key 200 MEDIA_PLAY WAKE 中的 MEDIA_PLAY 替换成 CAMERA。连上蓝牙后,测试通过,但还有个问题,就是相机不会先自动对焦后拍照,而是直接就拍照。然后就是写个Shell脚本(主要是sed命令吧)来自动修改影射文件。再然后就是写个app来实现这个功能了。当然,这是后话,希望不会成为屁话……

后面还有个想法,通过老G1来自动拍照,上传到服务器,实现监控功能。好吧~继续努力~

忘了当初是什么时候,为了在G1上运行脚本(或动态语言),发现了SL4A,记得那个时候还是叫做ASE。然后又发现了Beanshell这个运行Java语言的脚本环境,貌似挺好玩,于是在G1上都装上了,但是运行不了,弹出ClassNotFoundException。该问题一直解决不了,只好作罢。现在换上Nexus S后,前几天又找出这东西来玩,问题依然。今天找了一下,终于解决了!简单来说,就是权限问题。具体过程如下:

1)安装 SL4A 。先到该项目官方网站 http://code.google.com/p/android-scripting/ 下载当前最新版 sl4a_r4.apk ,并安装到手机或模拟器上。

2)安装Beanshell for Android。可以到SL4A官方网站下载当前最新版 beanshell_for_android_r2.apk ,安装到手机货模拟器上。或者运行SL4A,依次点击 菜单键(menu) -> View -> Interpreters -> 菜单键(menu) -> Add -> BeanShell ,就会自动下载 Beanshell 了。

3)打开 BeanShell ,点 Install 。安装完成后,就会在SL4A中看到 hello_world.bsh 脚本文件。

4)打开 SL4A ,运行  hello_world.bsh 脚本文件,就会看到报错。大概说找不到 /mnt/sdcard/com.googlecode.bshforandroid/extras/bsh/bsh-2.0b4-dx.jar 。

解决办法1:
进入Android的Shell环境(例如:超级终端、ConnectBot等),运行以下命令:
su
dalvikvm -classpath /mnt/sdcard/com.googlecode.bshforandroid/extras/bsh/bsh-2.0b4-dx.jar bsh.Interprefer

就可以进入BeanShell环境了。很明显,在root权限下运行,无视了一切权限问题。当然,这不是我们想要的。

解决办法2,也就是真正的解决办法:
手机上找到 /mnt/sdcard/com.googlecode.bshforandroid/extras/bsh/bsh-2.0b4-dx.jar 。打开 bsh-2.0b4-dx.jar ,解压 classes.dex 文件到 /data/dalvik-cache 下,并重命名为 mnt@sdcard@com.googlecode.bshforandroid@extras@bsh@bsh-2.0b4-dx.jar@classes.dex 。更改该文件的权限为 rw-r--r-- ,更改Owner为 1000 (即system),更改Group为 1000 (即system) 或 2000 (即shell) 或 与SL4A相同的Group。这样就可以了。测试发现最重要修改文件权限和Owner。

再三纠结后,终于在上个月中 (2011-6-12)入手了Google Nexus S(SAMSUNG i9020)。虽然是二手,且花了2400RMB,但买到了Super AMOLED版,感觉还是值了。

机子没什么挑剔了,强大的性能、几乎最全面的功能、轻薄的身段……只是机子太强大了,导致用着用着变颓废了。主流3D游戏全部可玩,不再失望与无奈,这样花在游戏上的时间更多了;内存512MB,不用考虑APP to EXT、APK的ODEX化、压缩内存以增大使用空间或挂载swap分区等等,感觉拿着它没事可干了;内置16GB闪存,但是不能分个EXT分区,想chroot个Debian也变得麻烦了;Android 2.3.4什么都集成了,又不用装其它软件了……这一切的改变,使得该机子更接近于手机加掌上娱乐,感觉没G1好玩了。

即将要失业了,得赶紧做下计划。希望能依靠Nexus S与G1,在Android上能有所收获吧。

G1用了两年后,刷上2.3.4,虽然还基本满足日常需要,但仍感不足。内存过小从来都是被骂的硬伤,加上IO效率低下,然后是CPU速度不高(相比很多新的机器),于是再升上去绝对是勉强了。看着N多机器降价,口水直流,于是想到了换新机器。

候选佳丽1号,HTC Desire Z。去年年末一看到发布就迷上这货了,而且有着另一个名字——T-Mobile G2,G1的真正继承者啊!最重要的是,带QWERTY键盘!但是,有个硬伤——非常耗电。别人的评测中,开WiFi浏览网页只有3个小时左右,开3G的话更费电!杯具了~再想想,主频连1G都没有,键盘不如G1的(只有4行,G1有5行),没有前置摄像头,没有NFC……犹豫了。

候选佳丽2号,Google Nexus S (SAMSUNG i9020)。作为与HTC Desire Z同价格等级的选择机型,也作为Google的第2个亲生儿子,具备Android 2.3.4所需的一切硬件条件。前置摄像头、NFC芯片、1G CPU、强劲的显示芯片、Super AMOLED屏幕……而且最大的好处是,对Android新版本有更好的支持,不愁升级的问题。但是必须牺牲偶一直向往的键盘,而且不能插TF (Micro SD) 卡(还好内置16GB Flash)。另外,由于Super AMOLED产能有限,SAMSUNG推出了采用Super Clear SLCD屏幕的机型i9023,此屏幕缺点是黑屏漏光,重量增加。所以想买到i9020还有一定的困难。

场外佳丽,Nikon D5100。很久前就想买个单反了,从D3000开始观望,到D3100出来还是不敢下手(其中日本东海的大地震也间接把价格推高,导致下不了手),现在被D5100迷住了。本来“五一”假期就可以入手D5100了,可是这假期挥霍了,加上预算中的第一季度奖金居然只有想象中的一半……不给力啊!!!于是购买计划又暂停了,而且不知道要拖到什么时候。总是在想,单反这么贵,也只能拍照,值么?然而去拍照时,又感触,怎么就不买个单反呢?

其实,问题的根源还是没钱。有钱的话,都可以实现了。-_-///

终于如愿入手16GB TF卡,小小的遗憾是,只买了Class 4的,没能买个Class 6或以上的(主要是价格)。

等了N久(偶也算比较理性的),终于等到16GB的TF卡降价(以前是400左右或以上),跌到200以内了。12月12日那晚,看到“卓越网”有货,而且是见过的最低价格,189!于是果断入手一个(下订单后第2天就涨了10块),只是4天后的今天才送过来,太折磨人(在卓越上第一次等这么久)。

到手后马上分区、拷贝数据。第一次用G1上的Recovery 1.7分区,太方便了。拷贝数据时,用Ghost备份、恢复,比起直接复制、粘贴快很多,尤其是小文件比较多的情况。

装上G1后,系统一切如常。由于也是Class 4的卡,所以跟原来的KingSton 8G没多大变化。最大的变化当然是容量扩大了。

本人的目的是用来多放点的歌、电影、资料等,所以从性价比来说,Class 4、16GB是最佳的选择了。原来的8G卡以50块转给同事,这样就更划算了。选SanDisk的原因嘛,主要是口碑好,据说以前SanDisk的Class 2卡,速度直赶别人的Class 6卡。

PS. 容量有了,应该可以把图形界面的Debian装上去跑跑看~~去年就想搞的了~~

PS.. 今晚把Nokia BH-214的原装耳机拿来听听,音质还是那么不给力。于是放回原来的角落,换上一直在听的MX 360。还是看谁需要的,把它送人算了。有机会换耳机的话,希望能换上Sennheiser(森海塞尔) MX 760!据说听人声、纯音乐之类,可以达到心灵救赎的效果……哈哈,太夸张了。

想为G1换个新电池(原电用了一年多,开始肿胀了),于是逛了一晚上的淘宝,但还是没找到好的。

本来计划好买个“烤鸭电池”(别人用电芯DIY出来的山寨电池,据说比原电耐用),但是看着样子太山寨了,于是想还是买个原电吧。

于是在信誉比较好的“淘宝商城”里搜了几家,都是50RM左右。看着图片还是不放心,问店主是不是HTC原装的,怎么鉴别之类。店主都说自己的是原装的,都可以通过客服(指的是国内多普达的客服)鉴定。但是当要求进一步提供鉴定材料(例如更清晰的实物照片)时,都说不能提供,而且都说是散装,没有外包装。淘宝真是个山寨厂商的宝地啊!看着店主都在闪烁其辞,我也心灰意冷了,还是明天再考虑那“烤鸭电池”吧。

PS. 明天又一个经常一起玩的同事离职了,他说要去深圳做网络产品的实施了。今晚聊起他的经历,还挺波折的。他是学电子商务专业的,毕业后去了一家广告公司上班。然后学会做网站,又跳到中山的一家网站公司,后来跳到我们公司做网管。考了几个证后,现在跳到深圳了。比较羡慕他有这么丰富的经历,我毕业后就在现在的公司上班了,都干了两年多,还没找到机会跳槽。

临睡前还是想写点东西。

星期天看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