Activity-Alias在应用程序更新时被删除。

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

我已经实施了两项activity-alias用户应该能够在运行时启用或禁用。

<activity-alias
    android:name=".ui.alias.open_location"
    android:targetActivity=".ui.activity.location"
    android:enabled="false">

    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity-alias>

我不想让他们在一开始就启用,以免扰乱用户设备的应用程序屏幕。但是在运行时,用户应该能够启用别名。我是通过PackageManager:

PackageManager pm  = getApplicationContext().getPackageManager();
ComponentName componentName = new ComponentName(context, ".ui.alias.open_location");
pm.setComponentEnabledSetting(componentName,
                              PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                              PackageManager.DONT_KILL_APP);

这在一开始就像魅力一样,但是当安装了我的应用程序更新时,别名又被禁用了。如何防止系统用清单覆盖启用的状态?我不希望用户在一开始就使用启动程序,我也不希望用户在更新后重新创建所有别名快捷方式。

我想我需要一些类似的东西PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER,但只适用于已启用的状态。

提问于
用户回答回答于

启用或禁用组件的所有配置都保存在设备的此路径中(0用于设备的第一个用户):

/data/system/user/0/package-restrictions.xml

XML的格式如下(只能从根设备中提取文件):

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<package-restrictions>
    <pkg name="com.example.myapplication">
        <enabled-components>
            <item name="com.example.myapplication.ActivityAlias" />
        </enabled-components>
    </pkg>
    <preferred-activities />
    <persistent-preferred-activities />
    <crossProfile-intent-filters />
</package-restrictions>

当你更新应用程序时,即使你清除应用程序的数据,启用或禁用的组件仍然是相同的。

此设置丢失的唯一情况是包名或组件名称更改时。

我认为你的问题是由于组件名称的更改(可能是ProGuard/DexGuard的一些奇怪配置),因为你无法在Play存储中上传一个具有不同包名的更新。

你可以尝试对APK进行反编译,并验证两个应用程序中组件的名称是否相同。

用户回答回答于

扫码关注云+社区