4
6
2018
14

小米 Note 3 令人失望地方

小米 Note 3 入手的时候简单写过一篇文章。现在用了一些天了,有些新的体会,也是我最不满意的地方。

双摄像头看上去很厉害,但是照片大小只有1-2MB,不像我的 Z5C 一样有5-6MB。为什么呢? 在手机上,因为小米相册放大倍数有限,根本看不出来差别。但是传输到电脑上之后可以很明显地看出差别:

小米 vss Z5C

从图中可以看到,小米拍摄的照片(左)不仅比我的 Z5C 的(右)分辨率要低,而且有偏色、模糊不清(照片拍摄的是 Paperlike HD 的 Floyd 模式,所以那些沙粒一样的效果是本来就那样的;背景色有点偏绿也是肉眼所见之状态)。

这意味着,用于记录的时候,比如拍摄白板、幻灯片、小区通知,习惯了 Z5C 之后,用小米很可能在需要的时候才发现根本看不清(我已经有好几张记录用的照片现在才发现基本上是毁了)。

小米摄像头另外有一个大问题:在光照很强的时候(比如晴天室外),摄像头会有反光,在照片中呈现出一个偏绿色的亮点

摄像头反光亮点

之前已经提到过,这扬声器的设计挑握持姿势,很讨厌很讨厌:我左手握持的时候,为了保证手机不在遇到碰撞不稳等情况的时候意外滑落,我会用小指托住底边,刚好堵住扬声器的孔……

小米云同步能是能同步,但是很不及时。一般情况下,我 Z5C 拍好照片过一会儿,就可以在 Google Photos 上看到照片了。小米不知道怎么回事,经常看不到照片,需要手动打开相册然后等一会儿才会有。

啊对了,小米右上角那个天气,也是要点开才会更新的样子……

Category: Android | Tags: Android 小米 手机
3
24
2018
23

小米 Note 3 入手体验

为了对付诸如支付宝、淘宝、摩拜等在我的 Z5C 上特别卡的手机软件,我入手了一台小米 Note 3。

最初的感觉是:很滑,手感很不错。下面指纹识别很方便。

有点大,单手不容易按到对面。因为下巴上都是按键,所以放桌面边缘时不容易拿起来,会误触那些键。不过作为备机,在家的时候放桌面上就好了,解锁直接按,不需要经常拿起来。

没有拍照键,但是可以设置音量当快门用。有快速启动,但是是在系统设置的「手势及快速启动」中配置的。另外有个「街拍模式」,就是拿着手机,长按快捷键开始连拍或者摄像,而屏幕没有任何显示。

拍照默认带水印,可以在选项里关掉。前置摄像头拍照时默认带美颜(i.e. 别当镜子用)。还带了性别和年龄检测,以及我没太搞懂的「魔镜」评分功能。

云存储会存储原始品质的照片,免费空间只有5G,不像 Google 是 10G,并且可以无限量存储高品质照片。黑屏的时候似乎并不会同步照片,反正我等了好久,在网页端没看到。等再次打开相册时,它告诉我正在同步呢。

自带手电筒功能,可配置成亮屏后长按菜单键启动。不能像我那个 Xposed 模块那样,直接从黑屏状态启动。不过也没多大差别。

音质好不好不清楚,反正是够响。不过扬声器位于下边缘右边,手挡到的话会非常影响音质。我用过的 Z5C、Z3C、LT26i 上均没有发现这种事情,倒是我第一个智能手机 E15i 是这样,扬声器在背面,听歌时得俯卧着。

充电很快。剩余一半多的电,开始充电时 5.7V 0.9A,后来到了 6.6V 0.7A。不过使用小米充电器,我的Z5C更快,系统显示充电电流为 1.9A。我原来的充电器给 Z5C 充电时只有 0.9A 的,快了一倍。不过发生了一件令人悲伤的事情——忘记取下我的USB电流电压测量仪,它工作太久,累坏了……

SIM 卡槽需要使用配备的捅针去捅出来。不过需要的时候,最好同时配备一只汉子,或者女汉子,因为真的要用很大力,偏偏捅针就一个圈,细细的,底端也是面积极小的边缘,皮肤不够糙的话很难使上劲。当然也可以想办法,比如把针插好,然后对着桌面使劲磕几下,卡槽就会出来个边了。这体验比起 Z5C 用指甲一剥即开的体验,是有趣不少。

不插SIM卡无法安装未知来源的应用(apk 文件),也不知道这是什么鬼逻辑。小米商店里的东西还比较多的,条码扫描器、Elixir 2、Telegram 都有。HE 的 Network Tools 没有,不过可以去百度那边搜到。Google 应用说是因为授权问题没有,会提供位于百度上的版本。我没试过能不能安装,反正安装了也用不了……

默认浏览器默认为MIUI自己的浏览器,如要更改,需要去「设置」->「更多应用」->右上角菜单「默认应用设置」里修改,不会像 Android 原生系统那样让用户自行选择,也不能通过默认浏览器应用信息里的「取消默认操作」来重置。

主页是类似于 iOS 的:没有下边的「所有应用」界面,只有混杂在一起的应用图标和小部件。最让人受不了的是,应用图标被加了个半径非常大的圆角矩形,还带个白底

顶栏默认不显示通知图标。这样也好,因为放一天之后我一看,近十条没什么用的通知呢……可以设置显示网速,不过不知道是下行速率还是总和。可惜不能显示时间显示秒数。

总体来说,功能挺丰富,但是有些混乱,界限不清。比如两种设置快捷键的途径(相机内、设置内,其实 Android 系统原生快捷键比如截屏也是可以用的,但是设置里是没有的),比如两种设置默认应用的方法。比如到处都是的推广。应用商店里几乎搜任何东西都能看到知乎,搜 Network Tools 能看到 RealCalc。「游戏」应用里竟然有「直播」。建立个放应用的文件夹都能给你推荐应用。说得好听点,叫「紧密集成」,说不好听,就叫「高耦合」。

哦对了,这机器需要保持干燥。也就是说,我洗澡时想听歌还是得带上我的 Z5C。

2018年04月06日更新:续篇《小米 Note 3 令人失望的地方》

Category: Android | Tags: Android 手机 小米
1
5
2017
17

我使用的 Xposed 模块

开始使用 Xposed 之后,我对我的手机又多了一份拥有感,然后呢,装的模块越来越多了。以下是我正在使用的模块的列表,以及我为什么使用它们。链接我就懒得放了,想要安装的读者可以自己去 Xposed Installer 里搜。

绿色守护。装上这个我才敢装各种国产应用。它的 Xposed 模块用于功能增强,最重要的一点是,它可以切断唤醒途径。这样就不会总也杀不死那些耗电又耗流量的应用们了。

去你大爷的内置浏览器。我发现 Android 6 里,好多 Google 家的应用都开始默认使用内置浏览器了呢……不过国外的应用一般都是可以选择在内置浏览器里打开,还是外部浏览器里打开的。我更喜欢在外置浏览器里打开,一来减少相同的缓存和数据文件,节约存储空间,因为缓存共享而加快加载速度,二来能够使用自己的配置(比如广告拦截),并且能够使用最新的浏览器特性。上次听说了一个很棒的浏览器特性来着,然后就有人告诉我微信里不支持……当然了,微信这种应用,为它的内置浏览器增加了接口,有些网页必须在它里边打开。所以这个模块是有白名单的。

微信防撤回模块。顾名思义啦。

Android通话振动。Android 4.0.4 有一个很贴心的功能:在拨出电话接通时,它可以振动一下,告诉用户已经接通了。所以就不用一直把电话放在耳边等着啦,有时候等着等着,因为某些原因呼叫终止了还傻傻地等着……不知道为什么,后来的版本就没有这个功能了。还好我们有 Xposed。这个模块不仅把接通时振动给加回来了,还可以挂断时振动,以及如果对话费敏感的话,可以定时振动。

App Settings。目前我用来强制QQ轻聊版出现在最近使用的应用列表中。以后还可能需要强制某些中文翻译拙劣的应用使用英文语言。

Battery Stats Plus。这是一个同名应用带的模块。用于电池使用统计。

Xposed Torch。不需要解锁屏幕然后点来点去的手电筒。在锁屏状态下长按音量上键就可以启动了,再按一下音量下就关闭了。方便好用~

XPrivacy。权限管理。也是使用国产应用时必备的功能。虽然 Android 6 里,很多权限都像 iOS 那样在运行的时候询问了。但是呢,流氓总有流氓的手段,你要拒绝授权?那好,一切功能免谈,你卸载我吧。

XuiMod。我用来让右上角的时间显示秒数的。

哇已经装了九个模块了呢。其实我是不希望用这么多 Xposed 模块的,毕竟是打补丁嘛。可是呢,毕竟不是自由软件,只能这样了。也幸好我们还能打补丁。

Category: Android | Tags: Android Xposed
1
2
2017
6

在 Android 上运行 sshd

新的 Z5C 到手。拿 root 装软件。然后发现一个很重要的事情:我之前在 Z3C + Android 4.4.4 上用得好好的 Rooted SSH/SFTP Daemon,在登录的时候报了这么个错:

CANNOT LINK EXECUTABLE: "/system/lib/libc++.so" is 32-bit instead of 64-bit
page record for 0xXXXXXXXXXX was not found (block_size=32)

网上搜了一下,解决方法是有的,要重新编译 dropbear。可我之前研究过,我这软件使用的 dropbear 是一个修改版,和我用的这个 app 一样,好久没更新了……

于是想找个新的 sshd。之前我是使用的 SSHDroid。后来它需要付费版才能使用密钥认证了……而我的要求就两点:可以以 root 身份登录,并且支持密钥认证。在 Play 商店里能找到的 sshd 我都试过了一遍,竟然没一个能满足这么基本的需求的…………

之所以需要以 root 身份登录,而不是登录之后再获取 root,是因为跑命令时 su 之后很容易出现奇怪的问题,和缓冲、终端控制有关。

于是我只好失望地放弃使用 app,转到自己熟悉的领域——Linux 系统,编译一个 sshd adb 进去跑好了。

一开始使用的是 socat + tinyssh 的方案。这个方案我之前在光猫上实现过,tinyssh 的代码很少,很容易编译和修改。socat 直接用之前编译的版本就可以了。因为 Android 毕竟不是完整的 Linux userland,所以得把 tinyssh 改一改,主要是用户主目录和默认 shell 的部分。我就直接硬编码进 root 的配置了。然后写个 shell 脚本来启动:

#!/system/bin/sh

export ANDROID_ROOT=/system ANDROID_DATA=/data
PATH=/system/xbin:/su/xbin:/su/bin:/sbin:/vendor/bin:/system/sbin:/system/bin
socat tcp-l:PORT,reuseaddr,fork exec:'tinysshd /data/tinyssh/keydir' &

这样就可以了。只支持 Ed25519 密钥登录,挺好的。

然而,用着用着就发现有点小问题:socat 对经由网络的数据进行转发,有点低效;tinyssh 不支持连接复用,在一个会话中收到新的连接请求时会直接退出;还没有 scp 命令……

一开始我去 dropbear 那边编译了一个 scp。编辑好配置文件、开始 make 的时候,敲「make PROGRAMS=scp」就可以编译出一个 scp 命令了。然后我就想,既然都用上 dropbear 了,要不就都用了吧。于是把 dropbear 也编译出来了。不是很顺利,主要是以下几个事:

  • 改路径。各种路径,host key 的,pid 文件的,默认 PATH,还要禁用掉 lastlog 和 syslog 什么的
  • 改用户信息。默认 shell、主目录。不要检查 /etc/shells。刚刚发现我还不小心把其中两行代码交换了,是说怎么退出的时候会段错误呢 _(:з」∠)_
  • dropbear 的构建系统不支持 out-of-tree 构建,也就是不能像我习惯的那样,「mkdir build-android」然后进去「../configure」 :-(

另外就是,dropbear 不支持 Ed25519 key,于是我只好用 RSA key 了(DSS 有问题;openssh 的 ECDSA 实现也有问题) :-(

弄好之后同样写个 shell 脚本方便调用:

#!/system/bin/sh

export ANDROID_ROOT=/system ANDROID_DATA=/data
/system/xbin/dropbear -R -p PORT

然后,启动服务的事情。我发现改 /init.rc 不管用。这个是 initramfs,每次重启之后就恢复原状了……我懒得去重新打 initamfs 的包了,就每次重启系统之后接上 USB 线,然后 adb shell 进去跑脚本……还好 Z5C 跟 Z3C 不一样,USB 口在外边,很好插。

终于把 remote root shell 弄好了,接下来就是各种 rsync 和 scp 传文件改配置什么的了,一是复制各种软件的配置文件和数据,二是备份,三是把文件拿电脑上研究、编辑,方便啊!Sony 有个「换机助手」软件,但是它不能在加密了的手机上使用……

最后,还留下了一个问题:同样的环境,同样是 Wi-Fi 传输,我的电脑和 Z3C 之间传输速度能达到 4MiB/s,但是 Z5C 却只有 300KiB/s 左右的样子……

Category: Android | Tags: ssh Android 交叉编译
6
7
2015
18

Linux 系统接收通过蓝牙传输的文件

首先安装 bluez 包。我用的版本是 5.30。其次安装 blueman。

启动蓝牙服务:

systemctl start bluetooth.service

然后使用 blueman-manager 之类的命令启动 blueman。这时会在系统托盘看到蓝牙图标。点右键选择「添加新设备…」,完成配对。

然后,如果是要往手机发文件的话,是没有问题的,但是收的话,会失败。原因是,默认接收文件前会先询问用户要不要接收,而 blueman 不知道怎么搞的根本没反应……

解决方案是:直接启动一个默认接收文件的 obexd 就好了:

killall obexd
/usr/lib/bluetooth/obexd -r tmpfs -n -a

-r指定收到的文件存哪里,默认是 $XDG_CACHE_DIR 下的 obexd 目录,即默认是 ~/.cache/obexd。这里的路径是相对于用户主目录的。

-n是不要以守护模式运行,会把日志输出到终端而不是系统日志。

-a就是重点——接收所有文件——了。

obex 这套东西的文档在/usr/share/doc/bluez/dbus-apis/下有。

Linux 下遇到点问题还真是折腾,声称完成某一功能的软件一大堆,结果装好了,要么根本不知道怎么用(gnome-bluetooth、bluedevil),要么适用版本不匹配(obexpushd、ArchWiki 等网上的过时信息),要么有 bug 用不了(blueman)。

不过好的一点是,不涉及闭源的软件和协议,而又有足够的时间和能力的话,问题总是能够解决的。不像 Windows 或者 Android,遇到问题两眼一摸黑,只能不断地重试和重装,看看人品会不会爆发一下。

最后,折腾好久终于传输成功的照片:

雨后彩虹

北京好不容易下了场大雨,没想到雨后还出现了彩虹~

Category: Linux | Tags: linux Android 蓝牙
3
27
2014
7

火狐远程调试初体验

开始啦

首先要启用远程调试功能。在桌面端火狐里按快捷键Ctrl-Shift-K调用开发者工具,点左上角的「设置」按钮,勾选「启用远程调试」。移动端火狐也通过「设置」页启用远程调试。

启用远程调试

设置端口转发。使用 USB 连接并且在 Android 设备上启用了 adb 的话,可以使用如下命令来转发:

adb forward tcp:6000 tcp:6000

我使用 Wi-Fi 网络连接。因为移动端火狐只监听了 127.0.0.1 这个地址,所以外边连不上去。我使用 socat 命令来转发一下。我编译的 Android 版 socat 程序可在这边下载

socat tcp-listen:6000,fork,bind=192.168.1.XXX,reuseaddr tcp:127.0.0.1:6000

桌面端在「Web 开发者」菜单里选择「连接…」,然后填入移动端的 IP 地址。如果使用 adb 进行端口转发的话使用默认的「localhost」就可以了。

连接到远程设备

开始连接之后,被连接的火狐(这里即移动设备上那个)会弹窗询问是否允许。确认之后就可以看到远程设备的标签页以及 chrome 页面(即截图里那个「主进程」)了。

选择连接到的标签页

然后就跳出来一个新的开发者工具窗口了。我这里选择的是火狐自己那个 chrome 页面(「主进程」):

调试移动端火狐

大家可以看到,我在 Android 上的火狐上也安装了 Adblock Plus 哦~

小惊喜

桌面端火狐启用远程调试chrome 调试后,可以在「Web 开发者」菜单里看到「浏览器工具箱」这么一项。它会开启一个-P参数为default-chrome-debugger-chrome参数为chrome://browser/content/devtools/framework/toolbox-process-window.xul的新火狐实例,通过远程调试接口连接到当前火狐实例上,实现对火狐顶层 chrome 窗口的调试。不过直接执行在 htop 里看到的命令并不能开启调试器,大概是因为这时候需要被调试的火狐不知道有人要调试它吧。虽然火狐自带的开发者工具功能比较弱,不过能对顶层 chrome 窗口进行调试还是很不错的 :-)

参考资料

Category: 火狐 | Tags: 火狐 Android
3
8
2014
9

编译 Android 版 htop

编译完 lsof,却发现 htop 还是不能用……另开一个终端 strace 之,才知它竟然在调用 /bin/sh 而不是 /system/bin/sh。检查之,原来这个 htop 来自 Terminal IDE,是一个静态链接的版本,大概是使用 glibc 的吧,所以才会去标准位置寻找命令解释器。

编译过程:

path+=/opt/android-ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin
mkdir android-build && cd android-build
CFLAGS='-I/ldata/media/temp/android/installed_binaries/include/ncurses -I/ldata/media/temp/android/installed_binaries/include' LDFLAGS=-L/ldata/media/temp/android/installed_binaries/lib CC='arm-linux-androideabi-gcc --sysroot=/opt/android-ndk/platforms/android-18/arch-arm' ../configure --host=arm-linux-gnu --prefix=/system --bindir=/system/xbin --disable-unicode
rm ../config.h

然后修改当前目录中的 config.h 文件,注释掉 HAVE_NATIVE_AFFINITY 行,添加两个 syscall 的定义,即:

// #define HAVE_NATIVE_AFFINITY 1
#define SYS_ioprio_get __NR_ioprio_get
#define SYS_ioprio_set __NR_ioprio_set

继续 make 即可。

编译好的 htop 可由此下载

Category: Android | Tags: Android 交叉编译
3
8
2014
3

编译 Android 版 lsof

Android 自带的那个 lsof 实际上是 toolbox 里的,功能十分单一,除了显示出所有进程的所有打开的文件外就什么都不能做,连说明也没有 :-( 于是为了 htop 用着爽一点,还是自己编译一个吧。

首先弄个 GNU 工具链。Android NDK 的没有 tcp.h 头文件,会报 TCP_LISTEN 等标识符未定义。

  • 我使用 crosstool-NG 1.19.0 编译的 gcc 4.8.1。适用于 Arch Linux x86_64。第一次编译工具链,没想到在 crosstool-NG 的帮助下一次就编译好了,所以是未作静态链接的版本,其它版本的 Linux 可能无法运行。
  • zshaolin 使用的工具链 gcc 4.4.6。它是使用 crosstool-NG 1.13.2 编译的。

编译过程。使用了静态链接,最终文件大小 741K。

path+=/ldata/txtfiles/soft/arm-lilydjwg-linux-gnueabi/bin
LSOF_CC=arm-lilydjwg-linux-gnueabi-gcc LSOF_CFGF='-DHAS_STRFTIME -DHASNORPC_H -DGLIBCV' LSOF_VERS=3.0.8 ./Configure -n linux
make
arm-lilydjwg-linux-gnueabi-gcc -o lsof -static dfile.o dmnt.o dnode.o dproc.o dsock.o dstore.o arg.o main.o misc.o node.o print.o proc.o store.o usage.o util.o -L./lib -llsof
arm-lilydjwg-linux-gnueabi-strip lsof

编译好的 lsof 可由此下载

Category: Android | Tags: Android 交叉编译
3
2
2014
3

FUSE 初体验:Android dedupefs

自打知道 FUSE 以来都觉得亲手写一个 FUSE 文件系统是很好玩的事情,但是因为没好的自己能够很快实现的点子所以一直没动手。前段时间需要从 Android xrecovery 备份中取得一旧版本的应用,才决定动手的,顺便也练习一下很久没怎么用到的 C 语言。至于为什么不用 Python,好像那个 Python 绑定不太稳定的样子,Python 3 版更是如此。而且我也不希望效率太差。

首先介绍一下,所谓的「dedupefs」,就是把 Android xrecovery 的「dedupe」备份格式的数据挂载成文件系统来查看。其实仅仅只是想查看的话,把那个 dedupe 目录下的东东 gcc 一下就可以创建和解开 dedupe 的备份了,只是占用很多磁盘空间而已。

dedupe 的格式很简单,一个文本文件描述文件信息(时间、路径、大小、类型等),一个目录里全是 sha256 命名的文件来存储文件的数据,以便在备份时不同的备份中的相同文件只保存一次。

FUSE 嘛,我好像从来没看到过完整一点的文档,就是官方 API 文档也经常语焉不详。dedupefs 是参考 rofs 写的。dedupefs 也是只读的。

挂载之前,先得把 dedupe 的纯文本格式处理一下。纯文本适合存储和人阅读,但是查询效率低下。我决定用更适合处理纯文本的 Python,把数据存储到 GNU dbm 键值对数据库中,然后 dedupefs 直接读取数据库就好了。(于是顺便学会了在 C 中使用 GNU dbm :-))数据的组织方式如下:

  • d + 文件路径:该目录下的文件名列表
  • f + 文件路径:该文件的信息

这样要读取一个目录下的文件列表就查 d 开头的项,要取得一个文件的信息(stat)或者打开文件,就读 f 开头的。

下边是编码和调试过程中的经验与收获:

  • GNU dbm 没说它是线程安全的,所以它不是线程安全的。但是 FUSE 又是多线程的(调试用的单线程模式我就不玩的),所以读取数据库时要加锁。
  • GNU dbm 查询结果数据是要调用者来 free 的。
  • 因为涉及到二进制数据交换(Python <-> C),所以要注意在结构体声明时围上#pragma pack(push, 1)#pragma pack(pop),以免对齐不一致造成数据错误。
  • valgrind 用来诊断内存访问错误效果非常棒!
  • FUSE 的struct fuse_file_info里有个fh域可以用来存文件描述符,这样就不用像 rofs 那样每次读取都要打开一遍文件了。
  • FUSE 读取用的回调函数传的offset一定要用,要首先lseek(finfo->fh, offset, SEEK_SET);一下,不然指不定读取到什么地方的数据了。
  • FUSE 文件系统可以忽略文件权限,所以自己不在openaccess里判断的话,就可以访问到明明看上去不能访问的文件(这正在我想要的)。
  • du 命令读取文件占用磁盘空间时使用了struct statst_blocks域。如果在 FUSE 程序里不管它的话,那么 du 将总是报告占用了 0 字节的空间……这里的块大小总是 512 字节。

第一次写 FUSE 程序,虽然文档差了一点,但用起来还是挺方便 =w=

哦对了,android-dedupefs 的仓库链接。

12
14
2013
12

豌豆荚:黑水洗不白应用

豌豆荚说火狐更新了,但是签名变了,需要谨慎升级:

豌豆荚:火狐有更新

于是,本来应试是这样子的火狐:

火狐国际版:热门网站 火狐国际版:书签

变成了这个样子,桌面还多了个奇怪的图标:

火狐中国版:热门网站 火狐中国版:书签 火狐中国版:「二维码」图标

我看到这堆乱七八糟的网站之后,只好自行去 Mozilla 的 FTP 站点下载国际版火狐,并验证了一下签名:

29674 ~tmp/firefox
>>> wget ftp://ftp.mozilla.org/pub/mozilla.org/mobile/releases/latest/android/multi/fennec-26.0.multi.android-arm.apk ftp://ftp.mozilla.org/pub/mozilla.org/mobile/releases/latest/android/multi/fennec-26.0.multi.android-arm.checksums ftp://ftp.mozilla.org/pub/mozilla.org/mobile/releases/latest/android/multi/fennec-26.0.multi.android-arm.checksums.asc
29675 ~tmp/firefox
>>> gpg --recv-keys 15A0A4BC
gpg: 下载密钥‘15A0A4BC’,从 hkp 服务器 keys.gnupg.net
gpg: 密钥 3A06537A:公钥“Mozilla Software Releases <releases@mozilla.org>”已导入
gpg: 需要 3 份勉强信任和 1 份完全信任,PGP 信任模型
gpg: 深度:0 有效性:  1 已签名:  4 信任度:0-,0q,0n,0m,0f,1u
gpg: 深度:1 有效性:  4 已签名:  0 信任度:4-,0q,0n,0m,0f,0u
gpg: 合计被处理的数量:1
gpg:           已导入:1  (RSA: 1)
29676 ~tmp/firefox
>>> gpg --verify fennec-26.0.multi.android-arm.checksums.asc
gpg: 于 2013年12月06日 星期五 01时11分05秒 CST 创建的签名,使用 RSA,钥匙号 15A0A4BC
gpg: 完好的签名,来自于“Mozilla Software Releases <releases@mozilla.org>”
gpg: 警告:这把密钥未经受信任的签名认证!
gpg:       没有证据表明这个签名属于它所声称的持有者。
主钥指纹: 2B90 598A 745E 992F 315E  22C5 8AB1 3296 3A06 537A
子钥指纹: 5445 390E F5D0 C2EC FB8A  6201 057C C3EB 15A0 A4BC
29677 ~tmp/firefox
>>> grep -F fennec-26.0.multi.android-arm.apk fennec-26.0.multi.android-arm.checksums
f6b14fbb5847cd87c8821cfd71beba8f64c7059e05a555c31e6ea8168905a54def6be8d20b0766b5f35f10b63efb73225d20cb4bfa04383b66d396d33f743242 sha512 26553667 fennec-26.0.multi.android-arm.apk
b20f6faa9d88171fb504eaf1a323918c md5 26553667 fennec-26.0.multi.android-arm.apk
5ffb036fa664fbbb59e750ec50b44a781af9565e sha1 26553667 fennec-26.0.multi.android-arm.apk
29678 ~tmp/firefox
>>> sha1sum fennec-26.0.multi.android-arm.apk
5ffb036fa664fbbb59e750ec50b44a781af9565e  fennec-26.0.multi.android-arm.apk

顺便看了看这两个版本火狐签名用的密钥:

29753 ~tmp/firefox
>>> unzip -p fennec-26.0.multi.android-arm.apk META-INF/RELEASE.RSA | keytool -printcert
所有者: CN=Release Engineering, OU=Release Engineering, O=Mozilla Corporation, L=Mountain View, ST=California, C=US
发布者: CN=Release Engineering, OU=Release Engineering, O=Mozilla Corporation, L=Mountain View, ST=California, C=US
序列号: 4c72fd88
有效期开始日期: Tue Aug 24 07:00:24 CST 2010, 截止日期: Sat Jan 09 07:00:24 CST 2038
证书指纹:
         MD5: B1:E1:BC:EE:27:33:02:5E:CE:94:56:E4:19:A8:14:A3
         SHA1: 92:0F:48:76:A6:A5:7B:4A:6A:2F:4C:CA:F6:5F:7D:29:CE:26:FF:2C
         SHA256: A7:8B:62:A5:16:5B:44:94:B2:FE:AD:9E:76:A2:80:D2:2D:93:7F:EE:62:51:AE:CE:59:94:46:B2:EA:31:9B:04
         签名算法名称: SHA1withRSA
         版本: 3
29754 ~tmp/firefox
>>> unzip -p org.mozilla.firefox-1.apk META-INF/RELEASE.RSA | keytool -printcert
所有者: CN=Release Engineering, OU=R&D, O=Mozilla Online, L=Beijing, ST=Beijing, C=CN
发布者: CN=Release Engineering, OU=R&D, O=Mozilla Online, L=Beijing, ST=Beijing, C=CN
序列号: 514de131
有效期开始日期: Sun Mar 24 01:06:57 CST 2013, 截止日期: Thu Aug 09 01:06:57 CST 2040
证书指纹:
         MD5: D7:C9:FC:AE:D0:3B:9F:24:43:33:DD:41:15:65:CD:8A
         SHA1: 1A:97:FA:6D:9D:83:DB:84:BE:77:1C:72:60:42:48:7C:85:83:D4:60
         SHA256: 02:A7:BC:81:02:74:C9:ED:38:93:3B:06:3D:1A:48:A8:4F:88:CB:11:C6:40:CA:A1:6C:F8:AA:FA:66:E3:C6:3A
         签名算法名称: SHA1withRSA
         版本: 3

那个中国特色的版本的密钥声称自己是 Mozilla 北京。估计和电脑上的中国版火狐一样,真是他们搞的吧。其实 Opera Mobile 我也不小心装过中国版的(名叫「欧朋浏览器」),不过比火狐中国版稍微好点,首页上那堆我用不到的网站很容易就删掉了,而中国版火狐我没能找到要怎么办。

看来以后一些手机应用的升级得自己来做了呢,标榜能「洗白白」应用的豌豆荚不小心就会给我塞点一堆广告的中国版应用……

Category: Android | Tags: Android 火狐 中国特色

部分静态文件存储由又拍云存储提供。 | Theme: Aeros 2.0 by TheBuckmaker.com