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 72661cfc8..9d211df6c 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 @@ -103,8 +103,7 @@ class PluginContentProviderManager() : UriConverter.UriParseDelegate { providerInfo.packageName = context.packageName providerInfo.name = it.className providerInfo.authority = it.authorities - providerInfo.grantUriPermissions = true //插件没有权限管理机制 - + providerInfo.grantUriPermissions = it.grantUriPermissions contentProvider?.attachInfo(context, providerInfo) providerMap[it.authorities] = contentProvider } catch (e: Exception) { diff --git a/projects/sdk/core/manifest-parser/src/main/kotlin/com/tencent/shadow/core/manifest_parser/AndroidManifestKeys.kt b/projects/sdk/core/manifest-parser/src/main/kotlin/com/tencent/shadow/core/manifest_parser/AndroidManifestKeys.kt index 3a2e2ad96..dee8e4f4e 100644 --- a/projects/sdk/core/manifest-parser/src/main/kotlin/com/tencent/shadow/core/manifest_parser/AndroidManifestKeys.kt +++ b/projects/sdk/core/manifest-parser/src/main/kotlin/com/tencent/shadow/core/manifest_parser/AndroidManifestKeys.kt @@ -17,6 +17,7 @@ sealed class AndroidManifestKeys { const val service = "service" const val provider = "provider" const val receiver = "receiver" + const val grantUriPermissions = "android:grantUriPermissions" } } typealias ComponentMapKey = String diff --git a/projects/sdk/core/manifest-parser/src/main/kotlin/com/tencent/shadow/core/manifest_parser/AndroidManifestReader.kt b/projects/sdk/core/manifest-parser/src/main/kotlin/com/tencent/shadow/core/manifest_parser/AndroidManifestReader.kt index 1ef520a10..ee94146cb 100644 --- a/projects/sdk/core/manifest-parser/src/main/kotlin/com/tencent/shadow/core/manifest_parser/AndroidManifestReader.kt +++ b/projects/sdk/core/manifest-parser/src/main/kotlin/com/tencent/shadow/core/manifest_parser/AndroidManifestReader.kt @@ -157,6 +157,7 @@ class AndroidManifestReader { val providerMap = parseComponent(element).toMutableMap() providerMap.putAttributeIfNotNull(element, AndroidManifestKeys.authorities) + providerMap.putAttributeIfNotNull(element, AndroidManifestKeys.grantUriPermissions) return providerMap } diff --git a/projects/sdk/core/manifest-parser/src/main/kotlin/com/tencent/shadow/core/manifest_parser/PluginManifestGenerator.kt b/projects/sdk/core/manifest-parser/src/main/kotlin/com/tencent/shadow/core/manifest_parser/PluginManifestGenerator.kt index cf51f99df..3497bd0b3 100644 --- a/projects/sdk/core/manifest-parser/src/main/kotlin/com/tencent/shadow/core/manifest_parser/PluginManifestGenerator.kt +++ b/projects/sdk/core/manifest-parser/src/main/kotlin/com/tencent/shadow/core/manifest_parser/PluginManifestGenerator.kt @@ -241,6 +241,9 @@ private class PluginManifestBuilder( private fun toNewProviderInfo(componentMap: ComponentMap): String { val authoritiesValue = componentMap[AndroidManifestKeys.authorities] + //如果未传值使用android.content.pm.ProviderInfo.grantUriPermissions的默认值false + val grantUriPermissions = componentMap[AndroidManifestKeys.grantUriPermissions] ?: false + val authoritiesLiteral = if (authoritiesValue != null) { "\"${authoritiesValue}\"" @@ -249,7 +252,7 @@ private class PluginManifestBuilder( } return "new com.tencent.shadow.core.runtime.PluginManifest" + - ".ProviderInfo(\"${componentMap[AndroidManifestKeys.name]}\", $authoritiesLiteral)" + ".ProviderInfo(\"${componentMap[AndroidManifestKeys.name]}\", $authoritiesLiteral,$grantUriPermissions)" } companion object { diff --git a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/PluginManifest.java b/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/PluginManifest.java index a4bfb5972..67f8a31c0 100644 --- a/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/PluginManifest.java +++ b/projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/PluginManifest.java @@ -132,10 +132,12 @@ public ReceiverInfo(String className, String[] actions) { final class ProviderInfo extends ComponentInfo { public final String authorities; + public final boolean grantUriPermissions; - public ProviderInfo(String className, String authorities) { + public ProviderInfo(String className, String authorities, boolean grantUriPermissions) { super(className); this.authorities = authorities; + this.grantUriPermissions = grantUriPermissions; } } diff --git a/projects/test/plugin/general-cases/test-plugin-general-cases/src/main/AndroidManifest.xml b/projects/test/plugin/general-cases/test-plugin-general-cases/src/main/AndroidManifest.xml index fbe7193f9..30236806f 100644 --- a/projects/test/plugin/general-cases/test-plugin-general-cases/src/main/AndroidManifest.xml +++ b/projects/test/plugin/general-cases/test-plugin-general-cases/src/main/AndroidManifest.xml @@ -99,6 +99,7 @@