Android 在AOSP上设置默认应用程序

Android 在AOSP上设置默认应用程序,android,android-source,Android,Android Source,问题 如果两个应用程序属于同一类别,我可以在生成中设置默认应用程序吗 安装 示例 我正在AOSP上添加自定义浏览器。我想在构建开始之前将其设置为默认浏览器 在软件包的Android.mk文件中,有一个选项可以指定'LOCAL\u OVERRIDES\u packages',它基本上覆盖了上述软件包的安装,使我的应用程序成为默认应用程序 但我希望另一个应用程序是ROM的一部分,默认为我的应用程序 任何想法都将受到欢迎。因此我找到了一个解决方案,可以在构建时将应用程序设置为默认值。我正在记录它,希望

问题

如果两个应用程序属于同一类别,我可以在生成中设置默认应用程序吗 安装

示例

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

在软件包的
Android.mk
文件中,有一个选项可以指定
'LOCAL\u OVERRIDES\u packages'
,它基本上覆盖了上述软件包的安装,使我的应用程序成为默认应用程序

但我希望另一个应用程序是ROM的一部分,默认为我的应用程序


任何想法都将受到欢迎。

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

  • Android系统将默认应用程序/活动列表保存在位于
    /data/system/users/{*user id*}/package restrictions.xml的文件块中,称为

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

  • 在构建时,系统从附加位置读取一组首选活动,该位置为
    /system/etc/preferred activities/*.xml
  • 为了添加所需的首选/默认活动,我们创建了一个xml文件,并将其放置在/system/etc/preferred activities/上,然后由android系统读取,首选活动列表添加到package-restrictions.xml中的列表中
  • 示例

    向AOSP添加自定义浏览器

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

    • 生成后,浏览器活动将设置为默认

    限制和注意事项

    上述过程存在一些限制。详情如下:

    • 在构建时,我们需要知道所有组件的主要活动 处理特定目的过滤器的应用程序
    • 上述过程在第一次引导时对Launcher不起作用。 推定是决议活动不考虑 启动时的包限制

    你说的“同类”是什么意思?可能重复(请参见此答案):另请参见:@CJBS By“同类”我指的是两个应用程序,它们带有带有“分类主页”或“可浏览”的意向过滤器。两个引用的链接都指向覆盖安装-阻止安装其他应用。我希望我的应用程序与现有应用程序共存,并设置为默认。实际上,CJB的链接和答案都没有解决此处提出的特定问题。我正在将他们的编辑内容向后滚动,试图将问题的焦点从被问到的内容转变为他们显然想回答的另一个问题。这个问题不是关于信息亭,不是关于锁定替代品,也不是关于启动器,因为有许多意图来源,而且对于所提到的浏览器功能,启动器甚至不是主要的来源之一。如果您能详细说明限制[1],我将非常感谢。如果我们查看上面的代码块,您可以看到,在指定browser MainActivity时,我们列出了将用作默认设置的不同活动。限制是您必须知道意图过滤器要使用的所有应用程序的主要活动,包括包名。希望这能有所帮助。这是否适用于Android Pie?@CVS
    软件包限制。xml
    在Pie上的首选活动数量似乎有限。
    dumpsys包首选xml
    dumpsys包pref
    的情况也是如此。可能是由于
    getPreferredActivities
    getPreferredPackages
    在Q中被弃用,它被转移到了其他数据库文件中,或者被
    system\u服务器动态处理。xml文件是否进入/system/etc/preferredapps/或/system/etc/preferredactivities/?你都提到了。
    
    <?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>
    
    PRODUCT_COPY_FILES +=/<location-of-file>/preferred-activities-home.xml:system/etc/preferred-apps/preferred-activities-home.xml