在AOSP上设置默认应用程序

时间:2015-12-03 18:14:18

标签: android android-source

问题

如果同一类别的两个应用是,我可以在构建上设置默认应用 设置?

示例

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

在包的Android.mk文件上有一个指定'LOCAL_OVERRIDES_PACKAGES'的选项,它基本上覆盖了我提到的应用程序作为默认设置的软件包的安装。

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

任何想法都将受到赞赏。

1 个答案:

答案 0 :(得分:7)

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

  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
  5. 示例

    向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>
      
    • 通过在/system/etc/preferred-apps/

      中添加以下行,将上述xml复制到<!--AOSP_SOURCE-->/build/target/product/full_base.mk位置
      PRODUCT_COPY_FILES +=/<location-of-file>/preferred-activities-home.xml:system/etc/preferred-apps/preferred-activities-home.xml
      
    • 构建完成后,浏览器活动将设置为默认

    限制与警告

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

    • 在构建时,我们需要知道所有的主要活动 解决特定intent-filters的应用程序。
    • 上面的过程在第一次启动时为Launcher工作。 假设ResolverActivity不考虑 启动时的包裹限制。