1.Qaulcomm 有自己的auto_start 權限:
1.AppOpsManager 中添加 OP_AUTO_START 權限項
2.AMS 中添加 isAutoStartAllowed 函數:調用AppOpsService 的noteOperation 函數,檢測此pkg是否有AppOpsManager.OP_AUTO_START
3.isAutoStartAllowed函數置於 AMS.startProcessLocked 中,hostingType = service 不檢查,hostingType = content provider ,直接fail 不允許啓動。
2.JLQ 的自啓動管理:
ActiveServices.java::startServiceLocked
ActiveServices.java::bindServiceLocked
ActivityStarter.java::startActivity
1.監聽service啓動
AMS.bindService-->AMS.bindServiceLoced-->ActiveServices.bindServiceLocked
AMS.startService-->ActiveServices.startServiceLocked
AMS.startServiceInPackage-->ActiveServices.startServiceLocked
【 自啓動攔截的核心就是 阻止 AMS 的 成員變量 ActivityStarter中,阻止 生成對應的 ActivityRecord 成員變量,因此不會生成對應的TASK ,也不會放在STACK中。】
【原生對啓動activity 的permission 攔截是在哪裏???????】