在 AOSP 上设置默认应用程序
Set default application on AOSP
问题
如果有两个相同类别的应用程序,我可以在构建中设置默认应用程序吗?
安装了吗?
例子
我要在 AOSP 上添加自定义浏览器。我想在构建开始前将其设置为默认浏览器。
在包的 Android.mk
文件中有一个指定 'LOCAL_OVERRIDES_PACKAGES'
的选项,它基本上覆盖了提到的包的安装,使我的应用程序成为默认应用程序。
但我希望其他应用成为 ROM 的一部分,我的应用作为默认应用。
任何想法将不胜感激。
所以我找到了在构建时将应用程序设置为默认应用程序的解决方案。我正在记录它,希望它能帮助其他人。
Android 系统在位于 /data/system/users/{*user-id*}/package-restrictions.xml
的名为 <preferred-activities></preferred-activities>
[= 的文件中的一个块中保留了一个默认 applications/activities 列表17=]
此文件由 Settings.java 和 PackageManager.java 在构建时生成。每当 android 系统上的默认值发生变化时,此 xml 块上的标志也会相应地发生变化。
- 在构建时,系统从附加位置读取一组首选活动,即
/system/etc/preferred-activities/*.xml
- 为了添加我们想要的 preferred/default 活动,我们创建了一个 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>
通过在<!--AOSP_SOURCE-->/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
构建后,浏览器activity将设置为默认
限制和注意事项
上述过程存在一些限制。它们如下:
- 在构建时,我们需要知道所有的主要 activity
解决特定意图过滤器的应用程序。
- 上述过程 不适用于 Launcher 首次启动时。
假定 ResolverActivity 不考虑
启动时的包限制。
问题
如果有两个相同类别的应用程序,我可以在构建中设置默认应用程序吗? 安装了吗?
例子
我要在 AOSP 上添加自定义浏览器。我想在构建开始前将其设置为默认浏览器。
在包的 Android.mk
文件中有一个指定 'LOCAL_OVERRIDES_PACKAGES'
的选项,它基本上覆盖了提到的包的安装,使我的应用程序成为默认应用程序。
但我希望其他应用成为 ROM 的一部分,我的应用作为默认应用。
任何想法将不胜感激。
所以我找到了在构建时将应用程序设置为默认应用程序的解决方案。我正在记录它,希望它能帮助其他人。
Android 系统在位于
/data/system/users/{*user-id*}/package-restrictions.xml
的名为<preferred-activities></preferred-activities>
[= 的文件中的一个块中保留了一个默认 applications/activities 列表17=]此文件由 Settings.java 和 PackageManager.java 在构建时生成。每当 android 系统上的默认值发生变化时,此 xml 块上的标志也会相应地发生变化。
- 在构建时,系统从附加位置读取一组首选活动,即
/system/etc/preferred-activities/*.xml
- 为了添加我们想要的 preferred/default 活动,我们创建了一个 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>
通过在
中添加以下行,将上面的xml复制到<!--AOSP_SOURCE-->/build/target/product/full_base.mk
/system/etc/preferred-apps/
位置PRODUCT_COPY_FILES +=/<location-of-file>/preferred-activities-home.xml:system/etc/preferred-apps/preferred-activities-home.xml
构建后,浏览器activity将设置为默认
限制和注意事项
上述过程存在一些限制。它们如下:
- 在构建时,我们需要知道所有的主要 activity 解决特定意图过滤器的应用程序。
- 上述过程 不适用于 Launcher 首次启动时。 假定 ResolverActivity 不考虑 启动时的包限制。