diff --git a/projects/sdk/core/loader/src/main/kotlin/com/tencent/shadow/core/loader/managers/ComponentManager.kt b/projects/sdk/core/loader/src/main/kotlin/com/tencent/shadow/core/loader/managers/ComponentManager.kt index 0b8a1e78d..843f3d89a 100644 --- a/projects/sdk/core/loader/src/main/kotlin/com/tencent/shadow/core/loader/managers/ComponentManager.kt +++ b/projects/sdk/core/loader/src/main/kotlin/com/tencent/shadow/core/loader/managers/ComponentManager.kt @@ -60,6 +60,13 @@ abstract class ComponentManager : PluginComponentLauncher { abstract fun onBindContainerContentProvider(pluginContentProvider: ComponentName): ContainerProviderInfo + open fun onBindContainerContentProvider( + pluginContentProvider: ComponentName, + pluginAuthority: String + ): ContainerProviderInfo { + return onBindContainerContentProvider(pluginContentProvider) + } + override fun startActivity( shadowContext: ShadowContext, pluginIntent: Intent, @@ -212,11 +219,16 @@ abstract class ComponentManager : PluginComponentLauncher { pluginManifest.providers?.forEach { val componentName = ComponentName(applicationPackageName, it.className) - mPluginContentProviderManager!!.addContentProviderInfo( - loadParameters.partKey, - it, - onBindContainerContentProvider(componentName) - ) + it.authorities.split(";") + .filter { authority -> authority.isNotBlank() } + .forEach { authority -> + mPluginContentProviderManager!!.addContentProviderInfo( + loadParameters.partKey, + it, + onBindContainerContentProvider(componentName, authority), + authority + ) + } } pluginManifest.receivers?.forEach { diff --git a/projects/sdk/core/loader/src/main/kotlin/com/tencent/shadow/core/loader/managers/PluginContentProviderManager.kt b/projects/sdk/core/loader/src/main/kotlin/com/tencent/shadow/core/loader/managers/PluginContentProviderManager.kt index 9d211df6c..135c77d72 100644 --- a/projects/sdk/core/loader/src/main/kotlin/com/tencent/shadow/core/loader/managers/PluginContentProviderManager.kt +++ b/projects/sdk/core/loader/src/main/kotlin/com/tencent/shadow/core/loader/managers/PluginContentProviderManager.kt @@ -71,21 +71,22 @@ class PluginContentProviderManager() : UriConverter.UriParseDelegate { fun addContentProviderInfo( partKey: String, pluginProviderInfo: PluginManifest.ProviderInfo, - containerProviderInfo: ContainerProviderInfo + containerProviderInfo: ContainerProviderInfo, + pluginAuthority: String ) { - if (providerMap.containsKey(pluginProviderInfo.authorities)) { + if (providerMap.containsKey(pluginAuthority)) { throw RuntimeException("重复添加 ContentProvider") } - providerAuthorityMap[pluginProviderInfo.authorities] = containerProviderInfo.authority - var pluginProviderInfos: HashSet? = null + providerAuthorityMap[pluginAuthority] = containerProviderInfo.authority + var pluginProviderInfos: HashSet? if (pluginProviderInfoMap.containsKey(partKey)) { pluginProviderInfos = pluginProviderInfoMap[partKey] } else { pluginProviderInfos = HashSet() + pluginProviderInfoMap[partKey] = pluginProviderInfos } pluginProviderInfos?.add(pluginProviderInfo) - pluginProviderInfoMap.put(partKey, pluginProviderInfos) } fun createContentProviderAndCallOnCreate( @@ -105,7 +106,10 @@ class PluginContentProviderManager() : UriConverter.UriParseDelegate { providerInfo.authority = it.authorities providerInfo.grantUriPermissions = it.grantUriPermissions contentProvider?.attachInfo(context, providerInfo) - providerMap[it.authorities] = contentProvider + it.authorities + .split(";") + .filter { authority -> authority.isNotBlank() } + .forEach { authority -> providerMap[authority] = contentProvider } } catch (e: Exception) { throw RuntimeException( "partKey==$partKey className==${it.className} authorities==${it.authorities}",