Activity-Alias ​​удаляется при обновлении приложения

Я реализовал два 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); 

Это работает как прелесть в начале, но псевдоним снова отключается, когда установлено обновление моего приложения. Как я могу запретить системе переписывать включенное состояние манифестом? Я не хочу, чтобы пользователь плавал с Launcher в начале, и я не хочу, чтобы пользователь воссоздавал все ярлыки псевдонимов после обновления.

Я думаю, мне понадобится нечто подобное PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER , но только для разрешенного состояния.

Благодаря!

Solutions Collecting From Web of "Activity-Alias ​​удаляется при обновлении приложения"

Все конфигурации включенных или отключенных компонентов сохраняются в этом пути устройства (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), так как вы не можете загружать в магазин воспроизведения обновление с другим именем пакета.

Вы можете попытаться декомпилировать APK и проверить, совпадает ли имя компонента в обоих приложениях.

Сохраните параметры, которые пользователь выбирает в SharedPreferences и повторно применяет их после обновления. Для этого вы также можете сохранить в настройках номер версии , чтобы вы могли знать, когда это необходимо применить.

Как вы можете видеть в этом ответе, можно с уверенностью сказать, что эти настройки сохраняются при обновлении приложения, и, возможно, это решение для вашей проблемы.