Android 11 -- 强制清理app后台,关于权限引发的问题

发布时间 2023-11-21 17:11:01作者: 僵小七

需求:发现一个第三方应用,点击最近任务,在清理后台的界面没办法将它彻底杀死

android 11 的最近任务部分在launcher3 里面 quickstep 里面

quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java

在这个里面添加强制清理app的方法

private void removeSignApps(String pkgname) {
        if ("xxx".contains(pkgname)){
            ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
            am.forceStopPackage(pkgname);
            am.killBackgroundProcesses(pkgname);
        }
    }

android 杀死app的方法

编译,push之后,发现不生效,查看日志看见了报错:没有申请权限。
forceStopPackage并不能被第三方程序调用,只能让系统应用调用。
使用条件:

1)权限:<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"/>
         <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>

2)只能运行在系统进程:android:sharedUserId="android.uid.system"

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:sharedUserId="android.uid.system"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
-----------------------------------

3)android.uid.system属性的进程 须要在android.mk里这样设置:

  LOCAL_CERTIFICATE := platform

参考——1
参考——2

再次编译,push之后,机器卡在开机动画,抓取日志发现:
Signature|privileged permissions not in privapp-permissions whitelist 异常

Android 8.0开始,一些特殊的权限被标记为系统特许权限,并且等级为signature|privileged,
如果应用要使用这些权限,不但要在app的清单文件中申请,还要将其加入对应的白名单中。
白名单文件一般是来自frameworks/base/data/etc/目录

Android.bp
com.android.carrierconfig.xml
com.android.contacts.xml
com.android.dialer.xml
com.android.documentsui.xml
com.android.emergency.xml
com.android.launcher3.xml
com.android.provision.xml
com.android.settings.intelligence.xml
com.android.settings.xml


我修改的是launcher部分,找到com.android.launcher3.xml文件,添加相应的权限
然后push 它到机器里,不报错了!!!

备注:
adb shell -x
find ./system ./system_ext ./etc -name com.android.launcher3.xml (寻找其在机器中的位置)

参考——3
参考——4