Android防自启拦截方案--framework层

背景:

最近需要做一个防应用自启的方案,做在framework层源码里面。这里做下简单的技术方案介绍。

 

原理:

  1. 防止应用接收静态广播启动;
  2. 防止应用的service隐式启动。

 

大致方法:

防止应用接收静态广播启动方案:

要了解此方案,要先了解广播发送接收机制,请参考:https://blog.csdn.net/zhgeliang/article/details/80493390

可以在BroadcastQueue.java中的processNextBroadcast方法中处理静态广播拉起引用之前:

if ((r.curApp=mService.startProcessLocked   判断是否是白名单应用,若不是,则调用scheduleBroadcastsLocked(); 方法继续处理下一个广播,并返回。 

为什么不加在processNextBroadcast的最前面?

我们要做的是防止应用自启,但应用启动后其应该接收到的广播还是应该让其接收到。

 

防止应用的service隐式启动

建议先了解service的启动流程,请参考:https://blog.csdn.net/freekiteyu/article/details/79785720

可以在ActiveServices.java 中的retrieveServiceLocked 中获取到ServiceRecord 之后(主要是为了获取应用相关的信息,为判断是否在白名单做准备),返回ServiceLookupResult之前 判断是否是白名单应用,若不是,则返回null。

防止应用被杀后再启动:

在killServicesLocked中"// Any services running in the application may need to be placed" 之前判断若不是白名单应用,调用bringDownServiceLocked(sr);   continue;

 

白名单应用注意事项

Android核心应用(coreApp)应该在白名单内,系统重要应用也应该在白名单内。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章