Пакет приложений Android для динамической доставки функций, включая contentProvider, может дать сбой - PullRequest
0 голосов
/ 10 июля 2019

Попытка опубликовать новое приложение (это средство запуска, это тоже очень важно) с новым форматом App Bundle может оказаться непростой задачей, если у нас есть следующие параметры: - использовать пакет приложений в формате публикации - использовать динамическую функциюпоставка (функция по требованию) - модуль функций, включающий контент-провайдера в подбиблиотеку

, вызвал несколько проблем: 1. из-за проблем с классами не найден, контент-провайдер в модуле не может быть включен, его следует отключитьв главном манифесте, а затем включите программно после того, как динамическая функция была загружена и доступна для основного приложения.

если мы используем SplitCompatInstall, функция вполне может быть загружена, но на самом деле она эмулируется как первая и не устанавливается, что вызывает следующую проблему

, если приложению требуетсяперезапустите, так как contentProvider был программно включен, и поскольку он сохраняется, он пытается перезапустить.Что не удается, поскольку динамическая функция еще не установлена ​​- фактически переустановлена ​​с помощью SplitCompat.install () - поэтому загрузчик классов не может найти соответствующий класс, и приложение вылетает.

если приложение является средством запуска, которое автоматически перезапускается системой, существует цикл сбоя!

Так что для этого конкретного случаяЯ рекомендую не использовать SplitCompat.install. Предпочитайте использовать deferredInstall (), который загружает файлы функций, а затем опубликуйте задачу для правильной установки с помощью Android Play.core.Недостатком этой стратегии является то, что вы не можете контролировать, когда установлена ​​функция приложения.Возможно, вам придется подождать, пока ваше приложение будет работать в фоновом режиме, чтобы оно установилось с новой функцией.Если ваше приложение запускается, у которого всегда есть работающий поток, это может никогда не произойти, даже при перезагрузке (что я вижу).Наконец, когда вы обновляете свое приложение через Playstore, оно, наконец, устанавливается со всеми динамическими apk-компонентами (и связанными компонентами, такими как contentProvider)

Я открыт для обсуждения этой темы

Включение, отключение ContentProvider:

        Log.d("DebugDynamicFeature", "com.duapps.ad.stats.MyProvider"+ (enable?" enabling":" disabling"));
        final ComponentName componentName = new ComponentName(context, "com.duapps.ad.stats.MyProvider");
        final PackageManager packageManager = context.getPackageManager();
        packageManager.setComponentEnabledSetting(componentName, enable ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
    }```
...