android P 禁止应用开机自启动

公司有需求,禁止部分应用开机的时候自启动,实现代码如下:

--- a/frameworks/base/core/res/res/values/config.xml
+++ b/frameworks/base/core/res/res/values/config.xml
@@ -3540,4 +3540,32 @@
        <string-array translatable="false" name="apk_whitelist" >
                <item>"com.onstyle.track"</item>
        </string-array>
+
+  <!--for disallow auto start-->
+   <string-array translatable="false" name="disallowlist" >
+       <item>"com.chinatsp.smartlights:lights_server"</item>
+       <item>"com.chinatsp.dvrcamera"</item>
+       <item>"com.changan.oushangCos1"</item>
+       <item>"com.incall.apps.softmanager"</item>
+       <item>"com.huawei.hiviewlite"</item>
+       <item>"com.huawei.hisight"</item>
+       <item>"com.huawei.dmsdpdevice"</item>
+       <item>"com.huawei.hicar.demoapp"</item>
+       <item>"com.oushang.uploadservice"</item>
+       <item>"com.huawei.nearby"</item>
+       <item>"com.chinatsp.smartlights"</item>
+       <item>"com.chinatsp.media.scan"</item>
+       <item>"com.android.car.messenger"</item>
+       <item>"com.mediatek.engineermode"</item>
+       <item>"com.mediatek.avm"</item>
+       <item>"com.android.managedprovisioning"</item>
+       <item>"com.baidu.map.location"</item>
+       <item>"com.android.printspooler"</item>
+       <item>"com.chinatsp.update"</item>
+       <item>"com.android.se"</item>
+       <item>"com.android.keychain"</item>
+       <item>"android.car.usb.handler"</item>
+       <item>"com.android.onetimeinitializer"</item>
+       <item>"android.car.cluster.loggingrenderer"</item>
+  </string-array>
 </resources>
diff --git a/frameworks/base/core/res/res/values/symbols.xml b/frameworks/base/core/res/res/values/symbols.xml
index b4b7818..6060ea7 100755
--- a/frameworks/base/core/res/res/values/symbols.xml
+++ b/frameworks/base/core/res/res/values/symbols.xml
@@ -3474,4 +3474,6 @@

   <!-- For whitelist apk -->
   <java-symbol type="array" name="apk_whitelist" />
+  <!--for disallow auto start-->
+  <java-symbol type="array" name="disallowlist" />
 </resources>
diff --git a/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java b/frameworks/base/services/core/jav
old mode 100644
new mode 100755
index 60315ab..7af349f
--- a/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -731,7 +731,7 @@ public class ActivityManagerService extends IActivityManager.Stub
     private boolean mUseFifoUiScheduling = false;

     private static final String SYSUI_COMPONENT_NAME = "com.android.systemui/.SystemUIService";
-
+    private static HashSet<String> mDisallowList;
     BroadcastQueue mFgBroadcastQueue;
     BroadcastQueue mBgBroadcastQueue;
     // Convenient for easy iteration over the queues. Foreground is first
@@ -837,6 +837,59 @@ public class ActivityManagerService extends IActivityManager.Stub
         }
     };

+   private final int getRunningProcessRecordIndex(String packageName) {
+        // Find the application record.
+        if(packageName == null){
+            return -1;
+        }
+        for (int i=mLruProcesses.size()-1; i>=0; i--) {
+            ProcessRecord rec = mLruProcesses.get(i);
+            if (rec.thread != null && packageName.equals(rec.processName)) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    private String mCachePkg;
+    final boolean isProcessLocked(ApplicationInfo info, String hostingType,ComponentName hostingName) {
+        if(mDisallowList == null){
+            getDisallowList();
+        }
+       String launchPkg = info.packageName;
+       Slog.i(TAG, "~~~zjy~~~Package name ["+launchPkg+"] isSystemApp: " + info.isSystemApp());
+       boolean isRunningApp = getRunningProcessRecordIndex(launchPkg) != -1;
+          if(isRunningApp){
+               Slog.d(TAG, "~~~zjy Launch: " + launchPkg  + " " + hostingType);
+               return false;
+       }
+       if(launchPkg.equals(mCachePkg)){
+               Slog.d(TAG, "~~~zjy Launch for cache: " + launchPkg  + " " + hostingType);
+               return false;
+               }
+       if ("service".equals(hostingType) || "broadcast".equals(hostingType) || "content provider".equals(hostingType)) {
+
+               if (mDisallowList.contains(launchPkg)) {
+               Slog.d(TAG, "~~~zjy intercept: " + launchPkg + "  " + hostingType + "  " + info.processName);
+               return true;
+               } else {
+               Slog.d(TAG, "~~~zjy allowed: " + launchPkg + "  " + hostingType + "  " + info.processName);
+               return false;
+               }
+
+       }
+       mCachePkg = launchPkg;
+       return false;
+    }
+
+    private void getDisallowList() {
+       String[] disallowList = mContext.getResources().getSystem().getStringArray(com.android.internal.R.array.disallowlist);
+       mDisallowList = new HashSet<>(Arrays.asList(disallowList));
+       Iterator iter = mDisallowList.iterator();
+        while(iter.hasNext()){
+               Slog.d(TAG, "~~~zjy getDisallowList: item:"+(String)iter.next());
+       }
+    }
     public boolean canShowErrorDialogs() {
         return mShowDialogs && !mSleeping && !mShuttingDown
                 && !mKeyguardController.isKeyguardOrAodShowing(DEFAULT_DISPLAY)
@@ -4086,6 +4139,11 @@ public class ActivityManagerService extends IActivityManager.Stub
             ApplicationInfo info, boolean knownToBeDead, int intentFlags,
             String hostingType, ComponentName hostingName, boolean allowWhileBooting,
             boolean isolated, boolean keepIfLarge) {
+        if (isProcessLocked(info, hostingType,hostingName)) {
+               String launchPkg = info.packageName;
+               Slog.i(TAG, "~~~zjy~~~isProcessLocked name ["+launchPkg+"] isSystemApp: " + info.isSystemApp());
+               return null;
+       }
         return startProcessLocked(processName, info, knownToBeDead, intentFlags, hostingType,
                 hostingName, allowWhileBooting, isolated, 0 /* isolatedUid */, keepIfLarge,
                 null /* ABI override */, null /* entryPoint */, null /* entryPointArgs */,
(END)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值