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 @@