【问题标题】:Set default application on AOSP在 AOSP 上设置默认应用程序
【发布时间】:2015-12-03 18:14:18
【问题描述】:

问题

如果有两个相同类别的应用程序,我可以在构建中设置默认应用程序吗? 安装了吗?

示例

我正在 AOSP 上添加自定义浏览器。我想在构建开始之前将其设置为默认浏览器。

在包的Android.mk 文件中,有一个选项可以指定'LOCAL_OVERRIDES_PACKAGES',它基本上会覆盖提到的包的安装,使我的应用程序成为默认值。

但我希望其他应用程序成为 ROM 的一部分,并以我的应用程序作为默认应用程序。

任何想法都会受到赞赏。

【问题讨论】:

  • 你是什么意思'同一类别'?
  • 可能重复(请参阅此答案):stackoverflow.com/questions/11312576/…
  • @CJBS “属于同一类别”是指两个具有意图过滤器的应用程序,其类别为 Home 或 Browsable。两个引用的链接都指向 覆盖 安装 - 阻止安装其他应用程序。我希望我的应用与现有应用共存并设置为默认应用。
  • 确实,CJBS 的链接和他们的回答都没有解决这里提出的具体问题。我正在回滚他们的编辑,试图将问题的焦点从所问的内容转向他们显然想回答的不同问题。这个问题不是关于信息亭,不是关于锁定替代品,并且不是关于启动器,因为有许多 Intents 来源和提到浏览器功能,启动器甚至不是主要功能之一。

标签: android android-source


【解决方案1】:

所以我找到了在构建时将应用程序设置为默认值的解决方案。我正在记录它,希望它可以帮助其他人。

  1. Android 系统将默认应用程序/活动列表保存在位于/data/system/users/{*user-id*}/package-restrictions.xml 称为<preferred-activities></preferred-activities> 的文件中的一个块中

  2. 此文件由 Settings.java 和 PackageManager.java 在构建时生成。每当android系统上的默认值改变时,这个xml块上的标志也会相应地改变。

  3. 在构建时,系统从 附加位置(/system/etc/preferred-activities/*.xml)读取一组首选活动
  4. 为了添加我们想要的首选/默认活动,我们创建一个 xml 文件并将其放置在 /system/etc/preferred-activities/ 然后由 android 系统读取,首选活动列表被添加到列表中在 package-restrictions.xml 中

示例

向 AOSP 添加自定义浏览器

  • 如果设备上只安装了默认浏览器 应该创建“mybrowser”以下 xml 文件。在这个 案例,我将其命名为 preferred-activies-home.xml

    <?xml version="1.0" encoding="UTF-8"?>
       <preferred-activities>
          <item name="com.mybrowser.MainActivity" match="200000" always="true" set="2">
             <set name="com.mybrowser./.MainActivity" />
             <set name="com.android.browser/.BrowserActivity" />
             <filter>
                <action name="android.intent.action.VIEW" />
                <cat name="android.intent.category.DEFAULT" />
                <scheme name="http" />
             </filter>
          </item>
       </preferred-activities>
    
  • 通过在&lt;!--AOSP_SOURCE--&gt;/build/target/product/full_base.mk 中添加以下行,将上述xml 复制到/system/etc/preferred-apps/ 位置

    PRODUCT_COPY_FILES +=/<location-of-file>/preferred-activities-home.xml:system/etc/preferred-apps/preferred-activities-home.xml
    
  • 构建后,浏览器活动将被设置为默认

限制和注意事项

上述过程存在一些限制。它们如下:

  • 在构建时,我们需要知道所有 处理特定意图过滤器的应用程序。
  • 上述过程不在 Launcher 首次启动时起作用。 假设是 ResolverActivity 不考虑 启动时的包限制。

【讨论】:

  • 如果您能详细说明 Limitaion[1],我将不胜感激?
  • 如果我们查看上面的代码块,您可以看到在指定浏览器 MainActivity 时,我们列出了默认使用的不同活动。限制是您必须知道意图过滤器使用的所有应用程序的主要活动,包括包名称。希望这会有所帮助。
  • 这适用于 Android Pie 吗?
  • @CVS package-restrictions.xml 似乎在 Pie 上的首选活动数量有限。 dumpsys package preferred-xml 和 dumpsys package pref 也是如此。可能是它已转移到其他数据库文件,或者它由 system_server 即时处理,因为 getPreferredActivities 和 getPreferredPackages 在 Q 中已被弃用。
  • .xml 文件是否进入 /system/etc/preferred-apps/ 或 /system/etc/preferred-activities/?你两个都提到了。
猜你喜欢
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
相关资源
最近更新 更多