mar*_*arc 5 android-contentprovider android-app-bundle
如果我们有以下参数,尝试使用新的 App Bundle 格式发布新应用程序(它是一个启动器,这也很重要)可能会很棘手:
ContentProvider一个子库这种方法导致了几个问题:
由于找不到类的问题,ContentProvider模块中的 无法启用,应在主清单中禁用它,然后在下载动态功能并可用于主应用程序后以编程方式启用。
如果我们使用SplitCompatInstall,该功能可以很好地下载,但实际上它被模拟为第一个并且没有安装,这会导致下一个问题
如果应用程序需要重新启动,因为 contentProvider 已以编程方式启用,并且由于它是持久的,所以它会尝试重新启动。失败是因为动态功能尚未安装(实际上是重新安装的SplitCompat.install()),因此类加载器无法找到相应的类并且应用程序崩溃。
如果应用程序是启动器,由系统自动重新启动,则会出现崩溃循环!
因此,对于这种特殊情况,我建议不要使用SplitCompat.install
Prefer using deferredInstall()which download the feature apks,然后通过 android play.core 发布一个正确安装的任务。
此策略的缺点是您无法控制何时安装应用程序功能。您可能需要等待您的应用程序进入后台,以便它安装新功能。
如果您的应用程序是一个始终有一个正在运行的线程的启动器,它可能永远不会发生,即使在重新启动时也是如此(我所看到的)。最后,当您通过 Playstore 更新您的应用程序时,它最终会安装所有动态功能 apk(以及相关组件,例如ContentProvider)
我愿意讨论这个话题
启用或禁用的代码ContentProvider:
public static void enableMyProviderForDynamicFeature(final Context context, final boolean enable) {
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
708 次 |
| 最近记录: |