道貌岸然,斯琴高丽,vacation-聚她-创新约会场景-让相爱简单再简单

频道:趣闻中心 日期: 浏览:119

一、前语

咱们在做Android运用的时分都知道,有必要要有一套好的保活计划,这样运用的push抵达率高,运用的活跃度也就很高,咱们平常也能够发现许多运用咱们分明现已封闭了,可是仍是能够接纳到push音讯,或许ps检查进程仍是存在的。

当然这儿就有许多计划做这件事了,从最早的Java层中承受各种工作和播送等机遇唤醒咱们的运用,在到Native层的进程保活都是很好的计划,可是跟着Android体系的更新,Google也忧虑用户手机中的一些运用封闭失利导致手机耗电很快。所以也给出了许多战略让保活计划一度遭到很大的妨碍,一起国内的一些手机厂商更是凶猛,直接forcestop操作,这种操作理论上是终究的杀死进程计划了。包含小米,OV等厂商都是这么做的,可是有一个问题便是像微信中及时承受音讯的运用假如体系把他强杀之后接纳不到音讯,用户也是要疯掉的,所以体系厂商会给出一个白名单有一些运用是不会强杀的。

当然现在还有许多运用在一起组成了一个拉活联盟 ,便是你的运用能够把我的运用唤醒,我的运用能够把他人的运用唤醒,只需在这个联盟里边的运用都能够彼此唤醒和被唤醒,这样假如你手机中假如装了这些联盟中的运用,只需一个没有别杀死那么联盟中的成员运用都会被唤醒。

还有一种计划是由于咱们知道微信和QQ这样的及时运用许多厂商加了白名单 ,也便是这些运用不会被杀死的,那么他们运用必定会在指定机遇中宣布一些特定播送,这个需求反编译去看看他们内部到底有哪些播送了,咱们能够监听这些播送,只需微信不死,在必定时间内宣布了咱们注册了他的播送,咱们也有或许被唤醒。当然还有许多计划比方网上许多的MarsDaemon结构,不过这个结构关于小米体系来说简直是失利的。所以本文就针关于小米手机来一个全新的处理计划。

二、剖析小米杀进程原理

首要咱们看看小米手机他的杀进程计划是啥,咱们知道能够按体系的多任务菜单就能够很便利的杀死悉数进程或许悉数进程了:




那么咱们能够找到这个按钮,然后检查指定逻辑,咱们这儿能够经过UI东西找到id,然后去查找,可是到哪查找呢?

其实这儿有个知识点便是体系中的界面以及体系运用一般都在/system/priv-app/这个目录下,咱们能够直接进入这个目录查找指定运用,这儿需求留意的是咱们或许很简略以为应该是桌面运用也便是MiuiHome.apk 这个运用,可是经过反编译检查却找不到咱们想要的东西,然后就发现了还有一个体系UI运用MiuiSystemUI,然后在弄出来反编译就发现了这个当地:




咱们经过考虑一下,咱们看到的是最近正在运用的运用,那么咱们想体系应该呈现这个界面必定也需求调用这个方法获取其时正在运转的运用:getRecentTasks ,咱们能够大局查找这个信息,看到确实有一些内容,经过排查发现有一个重要的类:RecentTasksManager ,然后到这个类检查信息:






咱们点击进入检查方法:




这儿看到内部会用对运用做分类,后边的杀死的方法也是不一样的:



这儿看到杀死进程的方法:




这儿看到有许多哦判别,假如在这个判别内就走体系的强杀,也便是上面说的MarsDaemon结构是能够保活的,假如不在这个判别内就走了体系终究杀死计划,这个是最强的杀进程计划,现在没有好的保活计划能够处理。

咱们在来看一下那个判别,能够看到在之前的分类中假如强杀列表为空,或许是体系运用,或许是运用敞开了自发动权限就不会强杀了,经过后边的一个判别的方法名咱们能够猜想这个是自发动权限功用,能够去体系代码检查,这时分就需求去/system/framework/framework.jar 中查找体系类了:




这儿咱们把体系类的framework.jar 弄出来解压出dex直接翻开即可:




看到这儿是调用体系的APP_OPS 服务,所以咱们去咱们的项目顶用反射的方法调用这个方法:




然后运转项目,报了权限过错:




咱们在AndroidManifest.xml 中增加这个权限即可,然后运转惋惜没什么作用。所以就换个思路,已然要敞开运用的自发动权限,关于小米手机咱们知道在小米安全运用中办理的,咱们相同去/system/priv-app/ 这个目录下找到这个运用:




页面如下:




然后弄出来apk之后用Jadx翻开apk检查,一起咱们能够用adb shell dumpsys activity top 指令检查其时页面的activity信息:




然后去查找这个类,直接看到那个敞开的开关逻辑代码:




逐一排查找到这个类中:




持续往里边看:




这儿看到了重要信息便是写入CP了,有了uri信息,看到这儿写入三个字段信息,检查他的uri信息:




到这儿就简略了,咱们在运用中直接运用uri信息写入值,当然需求把咱们的运用自发动敞开:




然后运转看作用:




有报错信息,提示短少权限咱们增加即可。




三、成果出人意料

到这儿咱们就操作成功了,这儿就完毕了吗?

明显不是。由于这儿有一个很大的问题,仔细的同学发现了,假如这个真的不必root权限就这么简略的敞开那小米体系也太不安全了吧,可是我手中的这台小米4确实是能够的,可是用了其他的小米手机发现确仍是提示权限缺乏,其有用咱们的脚指头想一想也是正常的,这儿必定有问题,假如这一点都能够做到的话,那么小米体系真的是太不安全了,那为什么我的手机能够呢?由于我的手机其时自己刷了网上第三方的小米ROM,这个ROM应该是被改过了,只需是有权限验证的当地都能够免root过掉。那么这儿我就被我的手机耍了一次,而你们却被我耍了一次。

四、保活的特殊出路

咱们知道现在许多运用都想敞开自发动权限,这样运用就能够长生不老了,不过经过这一次剖析小米体系源码能够发现只需有了自发动权限之后运用首要是不会杀死,然后也能够重启,真的是完完全全的长生不老了,那么其实权限这个工作咱们必定是做不了了。

所以咱们能够想其他的计划,比方咱们能够引导用户去敞开 ,这个就要看产品怎样去很好的引导用户了,比方有一个提示说:敞开自发动能够更好的运用本运用此类音讯。

这样有了自发动权限之后能够做许多工作了,可是不是一切的用户都乐意去敞开的,那么咱们怎样让咱们的运用长生不老呢,莫非真的没方法了吗?方法其实仍是有的,咱们能够经过上面剖析体系源码的时分看到:




当咱们点击体系菜单键呈现体系多任务界面,然后点击清空内存,其实体系这时分会获取其时正在运转的程序,而且获取他们的页面截图用于展现,而关于正在其时运转的程序是不会强制杀死的,也便是TopActivity 的程序是不会杀死的。

那么咱们是否能够运用这一点来做呢?首要咱们能够监听体系的多任务菜单键,这个便是动态监听体系一个播送即可,然后咱们监听到之后就立马发动咱们自己的一个保活Activity这儿就叫做一像素Activity ,可是这个Activity需求具有以下三点:

榜首点:由于一像素关于肉眼来看简直能够疏忽,所以需求在这个Activity中设置巨细:




第二点:不能让这个Activity呈现在多任务中,否则会被用户发现就厌恶了,这儿能够在xml中设置一个特点即可:




第三点:发动这个Activity速度要十分快,也便是要赶在体系获取正在运转的Task之前发动起来,否则就无效了,所以依照正常的体系发动Activity流程会很慢的,这儿用反射发动Activity,这个技能在之前的文章现已介绍了,这儿不多说了,这样发动的话确保在10ms之内完结,这样就能够赶在体系获取Task之前了:




第四点:在发动之后要在必定时间内把一像素Activity封闭,否则最顶端的一像素Activity会攫取屏幕的触控焦点,用户点击清空内存就无效了,用户会癫狂的:




有了这四点,这个一像素Activity就能够让咱们的运用长生不老了。


当然这个或许有手机适配问题,咱们能够看代码进行项目的适配。

这种方法还有一个最大的优点便是,咱们知道Android8.0之后体系不允许运用在后台静默发动一个服务了,假如要发动服务就要告知用户,让用户能够看到,否则就报错,咱们能够自行查找相关内容:




其实这关于用户来说是功德,这样对设备有优点,否则后台发动了一大堆服务在跑,耗电耗功能。假如用了这个一像素保活计划的话那么咱们没有发动一个服务,也就不会有这种约束了,一起也让咱们的运用长生不老了。

五、保活计划总结

好了到这儿咱们就把小米的保活计划介绍完了,下面就来总结一下保活计划吧:

榜首、首要是网上有许多各种保活计划主要是监听播送等,而现在许多运用采用了MarsDaemon结构计划,这个结构确实仍是有用的,关于某些指定手机。

第二、一起现在有一个叫做保活合作联盟,比方支付宝,微信,头条等都在里边,只需用户手机中安装了联盟成员的运用,只要有一个成员的运用活着就会把其他现已被杀死的联盟成员运用都唤醒起来。而咱们知道像微信这类即时通讯东西一遍许多手机厂商都会加上白名单也便是不会强杀的,那么假如咱们经过反编译微信找到他内部一个不需求权限播送,微信不死咱们监听他的某个播送就能够起来了,条件是你能找到这个播送。

第三、上面也说了,不管是哪种保活计划,终究的归途都是欠好的,由于谷歌渐渐的优化体系关于后台发动服务的操作是不赞同的,所以后边跟着体系升级许多保活计划简直都要挂了,而本文介绍的特殊处理方法的一像素保活计划能够暂时处理这样的问题,当然暂时仅仅适配了小米手机。

第四、前面剖析了小米手机或许其他手机也是相似便是假如敞开了自发动权限就或许长生不老,所以假如在产品顶用一种比较友爱的方法去引导用户敞开这个权限也是未尝不可的。

经过上面的文章,我相信你现已更了解了Android运用保活,可是这还远远不够;在项目中会遇到林林总总的问题,现实情况或许没有demo这么简略;不过不要紧,咱们转发加重视,我这儿也有也一份关于Android进阶的具体教程,有爱好的小伙伴能够发私信 学习 给我,免费共享给咱们,或许假如在学习过程中遇到任何问题,都能够留言问我。一起,我也十分欢迎咱们相互沟通技能,一起生长~

本文部分内容来源于网络,侵权删。