Yajin’s Blog

Work | Life

创建self-contained的Android模拟器运行环境

有的时候,我们需要创建一个自包含的Android模拟器运行环境,而不需要依赖于avd设备。经过一番尝试后,发现只需要如下文件就能创建这样的环境。

    #ls -l 
    drwxrwxr-x 2 yajin yajin    4096 Apr 27 11:28 data_dir
    -rwxr-xr-x 1 yajin yajin   35896 Apr 27 11:12 emulator
    -rwxr-xr-x 1 yajin yajin 2696404 Apr 27 11:12 emulator-arm
    drwxrwxr-x 2 yajin yajin    4096 Apr 27 11:16 lib
    -rwxrwxr-x 1 yajin yajin     271 Apr 27 11:28 run_emulator.sh
    drwxrwxr-x 3 yajin yajin    4096 Apr 27 10:45 skins
    drwxrwxr-x 2 yajin yajin    4096 Apr 27 11:28 sys_dir
  • emulator和emulator-arm: 拷贝自Android SDK中的tools目录
  • lib: 拷贝自Android SDK中的tools/lib目录。里面含有硬件3D加速模拟的库
  • skins: 拷贝自Android studio。这里我拷贝的是nexus_s的皮肤。 android-studio/plugins/android/lib/device-art-resources/nexus_s
  • sys_dir: 含有system image文件。拷贝自Android SDK中的 system-images/android-19/default/armeabi-v7a
  • data_dir: data image文件。其中userdata.img拷贝自Android SDK中的 system-images/android-19/default/armeabi-v7a

最后需要在sys_dir中新建一个config文件

    #cat sys_dir/config.ini
    avd.ini.encoding=UTF-8
    abi.type=armeabi-v7a
    disk.dataPartition.size=200M
    hw.accelerometer=yes
    hw.audioInput=yes
    hw.battery=no
    hw.camera.back=none
    hw.camera.front=none
    hw.cpu.arch=arm
    hw.cpu.model=cortex-a8
    hw.dPad=no
    hw.device.hash2=MD5:e4aa1843c1036cf7c41ef163fc4d1028
    hw.device.manufacturer=Google
    hw.device.name=Nexus S
    hw.gps=yes
    hw.gpu.enabled=yes
    hw.keyboard=yes
    hw.lcd.density=240
    hw.mainKeys=yes
    hw.ramSize=343
    hw.sdCard=yes
    hw.sensors.orientation=yes
    hw.sensors.proximity=yes
    hw.trackBall=no
    runtime.network.latency=none
    runtime.network.speed=full
    runtime.scalefactor=auto
    sdcard.size=100M
    skin.dynamic=no
    skin.name=nexus_s
    skin.path=../skins/nexus_s
    snapshot.present=no
    tag.display=Default
    tag.id=default
    vm.heapSize=32

启动模拟器的脚本:

    #cat run_emulator.sh

    current_dir=$(pwd)

    ./emulator -sysdir $current_dir/sys_dir/  -data   $current_dir/data_dir/userdata-qemu.img  -initdata $current_dir/data_dir/userdata.img 

Garmin Fenix 3 体验

作为一个业余跑步爱好者,在尝试过不同的手环和手表之后,对目前市面上的设备都不太满意。手环类的产品往往没有内置GPS功能,这样在跑步的时候还必须依赖智能手机来显示当前速度和里程。而运动手表类往往同步不方便,不能直接和智能手机连接来同步运动数据。我心目中理想的设备应该具有如下功能:

1)计步和睡眠监测。能统计当天行走步数以及监测睡眠情况。
2)内置GPS。这个很重要,能在跑步的时候不需要携带手机。
3)手机同步。能通过智能手机同步上传运动轨迹。
4)待机时间。待机时间需要长,至少不需要18个小时就充电。:)
5)时间显示。这个对于智能手表来说不是问题,但是对于手环来说并不是每一个手环都具有时间显示功能。之所以强调这个功能的原因是有了这个功能就不需要从口袋掏出手机才能知道时间。

小米手环是我买的第一个运动手环。79元的价格具有计步和睡眠监测功能实在属于良心价,闹钟和电话提醒功能也属于加分项目,另外和手机的蓝牙连接非常稳定。但是唯一的缺点是没有时间显示。于是在使用一段时间后,入手了玩咖K1。和小米一样都属于价格非常平民的产品,但带有时间显示功能。但是问题是 a)时间显示的LED在阳光下基本看不清,必须在比较暗的地方才可以。b)质量实在不敢恭维。在用了一个晚上后,就死机了。

有一个阶段,对基于Android系统的智能手表抱有厚望。Moto 360的样品刚出来的时候,圆圆的造型一扫方方正正的其他智能手表的呆板印象。毕竟我个人认为作为手表这个称谓来说,还是圆的好。Moto 360上市后,我去Best Buy看了实物。正所谓希望越大失望越大。首先手表的厚度超过了我的想象。其次,由于一些原因,基于Google服务的智能手表在国内是阉割品。最后,待机时间实在坑人,虽然不是18个小时一充,但是一天到两天就必须充电。微软的Band出来的时候,我开了一个小时车到最近的体验店去试带,199美刀的价格对于配有心率监测的手环来说不算贵。但是设计这个手环的哥们一定没有亲自带过,带上去之后极其不舒服,卡在手腕上的感觉非常僵硬。Fibit Surg我也关注了一段时间。待机一个礼拜,带GPS和心率检测,能和手机同步,有计步和睡眠检测功能。可是整个手表的外型塑料感太重,就没有入手。

在寻觅了一段时间,看到Garmin Fenix 3上市了。看了一眼spec,就被吸引了。之前一直在用Garmin Forerunner 610在跑步,非常不错。缺点是搜星比较慢,特别在北京这样的城市里面,如果周围建筑物比较密集,需要一段时间来搜星。平常问题不大,可是在冬天的时候站在寒风中等待GPS实在不是愉快的体验。另外,610没有办法和手机同步,只能通过PC上面的Garmin Connect进行,不是很方便。而Fenix 3功能就强大了很多,手环的计步,睡眠检测,提醒(不仅仅是电话和短信,还可以设置其他提醒比如微信),手机同步功能一个也不缺。除此之外,具有了户外运动手表的很多功能(比如指南针),这里就不细说。花了500美刀把Fenix 3搬回家使用了几天后,总体来说,对于这个手表非常满意,当然也有一些需要改进地方。

先说说优点。a) 整个手表造型非常漂亮,金属的外观一改以往运动手表的塑料感,而且还可以换成金属的表带,这个对于后期的改造非常方便。 b) 搜星非常非常快。相比我之前的610,主观上感觉搜星基本上没有延时,在家里室内几秒就能搞定。 c) 集成了运动手表和手环的功能。 d)待机非常给力。在每天把玩很长时间的情况下,4天后还剩下一半多的电量。e) 可以通过Garmin自己的app市场下载应用扩展手表功能。但是目前的应用数目不太多。另外由于不依赖Google服务,因此在国内可以无障碍使用(这个不知道是缺点还是优点)。

但是手表本身也有一些缺点。a)闹钟只能设定一个,不能设定多个闹钟。另外,闹钟也不能指定工作日和非工作日。这个后续应该可以通过软件升级解决。 b)蓝牙连接和断开通知非常烦人。在断开蓝牙连接和重新连接上蓝牙后,手表会提醒(根据设定可以有声音和震动)。这个功能也许出发点非常好,可以让用户随时知道蓝牙连上没有。可以理想很丰满,现实很残酷。对于Android手机来说,有时候蓝牙连接不是很稳定(这个后面再吐槽)。那么这个时候,会频繁有蓝牙连接和断开的振动提示,非常烦人。而系统并没有单独设定可以关闭蓝牙连接的提醒。如果关闭提醒,那么其他提醒(比如电话提醒)也收不到。网上也有不少人吐槽这个功能,希望在后续固件升级时候能有单独设置去关闭蓝牙连接提醒。这两个问题(特别是后一个)是我使用几天后觉得需要改进的地方。c)有睡眠检测功能,但是比较简单。只能显示睡眠是和活动情况,不能显示深度/浅度睡眠。希望后续手机app更新的时候能提供这个功能。另外虽然不需要手动进入睡眠模式,但是我感觉自动进入睡眠模式的时间不太准确,这个没有小米手环做地好。d)久坐提醒有bug。在一个小时没有活动后,手机会提醒用户起来活动。可是活动后,手表中久坐的进度条并不会被置位,而是还是显示没有活动。这个应该是软件的bug。

最后要吐槽一下手表和Android手机蓝牙连接的问题。我的手机是魅蓝Note联通版,系统版本4.4.2. 刚开始和Fenix 3配对成功后,会经常断开连接然后再重新连接。由于Fenix 3的蓝牙连接提醒,手表会一直振动。后来重新配对后有所改善,不会经常断开链接。但是问题又来了,那就是我发现手机的WIFI上网非常不稳定。在网上查询后发现,这个是魅蓝(其他魅族手机也有类似问题)Note的通病。原因应该是MTK芯片的问题。由于蓝牙和WIFI都跑在2.4G左右,导致它们会互相干扰。会造成打开蓝牙后WIFI不稳定的情况。暂时的解决方法是家里路由器打开5G频段,然后让手机WIFI连接5G频段。

上图。安装了一个自定义的表面。真机要比照片效果好。

Fenix 3

其他人的体验