【问题标题】:How to handle uninstall intent on Android 6 and above?如何在 Android 6 及更高版本上处理卸载意图?
【发布时间】:2016-08-25 03:03:04
【问题描述】:

背景

在我的“app manager”应用上,我处理了卸载意图,以便用户可以在后台使用 root 卸载应用。

问题

到 Android 5.x 为止,一切顺利且运行良好,但似乎从 Android 6 开始,情况发生了变化,即使日志说正在使用,应用程序也无法使用相同的意图。

我尝试过的

清单包括活动的这个意图过滤器,就像它一直有的那样:

  <intent-filter>
    <action android:name="android.intent.action.DELETE"/>
    <action android:name="android.intent.action.UNINSTALL_PACKAGE"/>

    <category android:name="android.intent.category.DEFAULT"/>
    <data android:scheme="package"/>
  </intent-filter>

这是因为文档,herehere,它说这些是框架使用的。

我尝试将操作分开,并尝试查看日志,但它与之前的日志完全相同。示例:

system_process I/ActivityManager: START u0 {act=android.intent.action.DELETE dat=package:me.scan.android.client flg=0x10800000 cmp=com.google.android.packageinstaller/com.android.packageinstaller.UninstallerActivity (有额外的)}来自显示 0 上的 uid 10078

似乎框架已经决定了哪个应用程序将处理该意图。

问题

是否仍然可以处理卸载意图?即使有根?

【问题讨论】:

    标签: android android-intent uninstallation intentfilter


    【解决方案1】:

    根据this commit,这是首次在marshmallow-release branch 中看到的有意更改,以禁止拦截包卸载 UI。

    【讨论】:

    • 你在哪里看到它? “不要让别人拦截包卸载UI。” ?如果需要的话可以用root绕过吗?
    • 似乎在“isInstallRequestFromUnknownSource”函数中有一个检查,上面写着“特权应用程序不被视为未知来源”。 .将应用程序变为系统应用程序似乎没有帮助。
    • 在日志中看到分支的提交意味着提交在分支中,是的。 Root 不允许您覆盖 &lt;intent-filter&gt; 优先级 AFAIK。
    • 那么就没有办法处理了吗?你怎么这么快就找到了?
    • 如果我认为有办法绕过可以准确解释您所看到内容的故意更改,我不会以这种方式回答这个问题。查看blame for the AndroidManifest.xml that contains the UninstallerActivity 可以很容易地找到最后触及一行的确切提交。
    猜你喜欢
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 2012-07-27
    相关资源
    最近更新 更多