查看: 5309|回复: 1
收起左侧

[讨论] 最近驯猴学到的东西和自己的一些想法

[复制链接]
kakenhi
发表于 2015-10-21 19:55:07 | 显示全部楼层 |阅读模式
我很久没来卡饭了,主要原因是账号登不进去,懒得管了。今天改密码进来了。虽然知道卡饭近况不好,但写了东西总得找地方发。

我也是最近才开始玩猴,之前基本是任手机自生自灭。因此肯定有说错的地方,欢迎指正,欢迎讨论。

自启动与驻留

1. 当“事件”发生时,与它关联的APP就会启动,比如开机,关机,安装应用,打开屏幕。我使用过Autostarts来禁止这种关联。

2. 安卓的进程分为Activity和Service(服务),前者在不与用户交互时会暂停运行,后者启动后就会一直运行(休眠状态除外)。服务过多会明显造成手机卡顿。一个APP可以创建多个服务。我使用过一个名叫“禁用服务”的APP来禁用服务。也用过“Per App Hacking”来禁止应用启动服务。刷了5.1.1版安卓后,Per App Hacking好像无效了。

3. 在使用过1,2中提到的APP之后,我又找到一个新的APP名叫MyAndroidTools。它可以同时实现上面所说的功能。另外借助这个软件了解到,1中提到的“事件关联”,其实叫“广播接收器”,一个APP可以创建多个广播接收器,每个接收器都可以关联多个“事件”。

4. 我原本以为对“广播接收器”和服务的修改需要root权限,但发现一些APP在启动之后把MyAndroidTools禁用的东西重新启用了。针对这个问题,我找到了一个名叫“流氓终结者”的APP来阻止这种操作。

5. 某些应用把必要的功能放到驻留服务中,禁止之后应用就无法使用了。(有些时候这种做法也确实是必须的,比如音乐播放器,下载工具)  我希望这些APP能够使用,又不希望它驻留后台消耗资源,针对这个问题,我找到一个叫“绿色守护”的APP,在锁屏一段时间后终止这些应用。

一些想法:

* 经过这些软件的优化,手机运行已经非常流畅。其实我做这些事的目的只有一个,禁止我不需要的后台服务的运行。我不指望谷歌能相信用户,把这些加入高级功能菜单。但如果哪天能出来一个APP,把这些功能整合在一起就好了。

* 关于“绿色守护”:它终止APP的条件是锁屏一段时间后。为什么不给出更多选项,针对每个APP让用户自行选择呢?比如,“锁屏 1分钟后”,“退出主界面 1分钟后”,“不与用户界面发生交互 后”,“下载速度小于5kB/s持续 3分钟后”。我觉得可以把这些选项加入“高级模式”,让用户更自由的选择。



权限

第三方权限管理大家比较推崇的是XPrivacy。这个APP有点类似于Windows上的HIPS。只不过安卓里面没那么多病毒木马,流氓却遍地都是。第三方APP安装后,XPrivacy会自动应用模板,默认对每一个访问权限都进行“询问”,所以程序运行时会弹出很多权限请求对话框。

有一次我无意点开了某个“权限”的下拉菜单,发现还可以对这个权限中的每个函数进行具体设置。研究了一会之后,我开始怀疑XPrivacy是否能够真正的完全限制某项权限的访问。

比如,在一项名叫“存储(内置存储器/存储卡)”的权限中包括了12个函数,其中的11个都是红色。按照XPrivacy的说法,禁止这些函数可能导致程序无法正常运行。在XPrivacy中,没有任何快速的办法把禁止这11个函数的勾全部勾上,只能一个个点。使用默认模板时,如果在XPrivacy询问对话框中选择“拒绝”,也只有那1个没有标红的函数会被勾上。但是在其余的11个标红的函数中,我清楚的看到有open、openFile、openFileDiscriptor、openInputStream等。虽然对安卓系统的API不甚了解,但我强烈怀疑,仅仅禁止那1个函数并不能阻止程序访问内置存储器和SD卡。

在“命令行(执行命令/获得超级用户权限)”这一项中可以看到6个函数,而这些函数都被标红。也就是说,我们在“命令行(执行命令/获得超级用户权限)”询问对话框上点“拒绝”的时候,XPrivacy并不会阻止任何函数访问,它的作用应该仅仅是显示一个提示对话框而已。

还有几项我怀疑光凭弹出对话框不能阻止的权限访问,包括“互联网(网络通讯)”、“系统(查看已安装的应用)”。

如果真如我所估计的,那XPrivacy的这种做法是一种欺骗和对用户的不信任。



电池与唤醒

我开始了解这方面内容时,最先找到的是关于WakeLock(唤醒锁)的文章。读过这些文章后我产生了一个误解(也许是写这些文章的作者自己也没弄明白),我以为是WakeLock导致了设备的唤醒,只要禁止某个应用创建WakeLock就可以阻止该应用唤醒设备。但其实,WakeLock就像它名字一样,是用来阻止设备由唤醒状态进入休眠状态的,而真正导致设备唤醒的常见原因是Alarm。在BetterBatteryStats的统计中,QQ这个应用从切断电到目前为止的16小时中,一共进行了393次Alarm,其频率达到23.5次/小时,使用唤醒锁的时间却很少。

禁止唤醒锁的确很重要,但如果不管理Alarm,还是无法达到我的目的。我目前还没有找到这方面的应用,是因为实现起来很困难吗?

另外讲讲我使用BetterBatteryStats的一些想法。我看到有人把设备充好电,然后拔掉电源放一晚上再打开这个APP。他们是为了计算“深度休眠时间”在“屏幕关闭时间”中所占的百分比。其实不用这么做。在BBS主界面选择Other->Boot->Current,计算公式:

深度休眠百分比 = DeepSleep时间 / (DeepSleep时间 + Awake时间 - ScreenOn时间)

我相信很多用户关心这项数据,要是BBS能在主界面直接显示出来就好了。

另外,我应该没有弄明白所有的耗电因素。在我的测试中,晚上从1:00到10:00,电量从100%掉至94%,白天从10:00至17:30,电量从94%掉至63%,奇怪的是,白天我也并没有怎么使用手机,虽然不时会短暂的开屏幕查看消息,但耗电差别不至于这么大。原因还在研究中。

kakenhi
 楼主| 发表于 2015-10-22 17:50:32 | 显示全部楼层
说一下耗电研究的后续。初步推测:

QQ等APP会侦测用户手动的唤醒,侦测到之后(这表明手机正在被用户使用),为了更快的回复消息会缩小Alarm间隔。用户长时间不进行手动唤醒时(很可能是已经睡觉了),为了省电会增大Alarm间隔。频繁的手动唤醒手机会导致更为频繁Alarm唤醒,并且,安卓唤醒操作消耗的电量也大于我的预期。以上似乎可以解释白天耗电量激增的原因。

另外说一下对Alarm管理的看法。我觉得很好实现。将系统中设置Alarm的函数Hook,拦截请求后我们自己记录下来。由我们的APP来唤醒系统,再分发所有超时的Alarm对应的Intent。当然我们的APP唤醒间隔会很长,比如10分钟1次,这样就可以把每小时上百次的Alarm,压缩到每小时6次。副作用当然是QQ消息响应速度延迟10分钟,应该说大部分人都可以接受。以上只是个人设想,因为没做过安卓开发所以不知有没有问题。希望哪天有人实现,或者哪天我想通了自己实现。


您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-12-5 10:48 , Processed in 0.125557 second(s), 16 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表