diff --git a/build.gradle.kts b/build.gradle.kts index d6df70a..0840974 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -148,7 +148,8 @@ val verifySdkManifestOwnership by tasks.registering { val file = mergedManifest("sdk-file") check("XuqmMergedProvider" in file) - check("androidx.core.content.FileProvider" in file) + check("com.xuqm.sdk.file.platform.XuqmFileProvider" in file) + check("androidx.core.content.FileProvider" !in file) val push = mergedManifest("sdk-push") check("XuqmMergedProvider" in push) @@ -171,7 +172,7 @@ val verifySampleManifestMerge by tasks.registering { ).readText() check(Regex("com\\.xuqm\\.sdk\\.internal\\.XuqmMergedProvider") .findAll(manifest).count() == 1) - check(Regex("androidx\\.core\\.content\\.FileProvider") + check(Regex("com\\.xuqm\\.sdk\\.file\\.platform\\.XuqmFileProvider") .findAll(manifest).count() == 1) check(Regex("com\\.xuqm\\.common_plugin_applied") .findAll(manifest).count() == 1) diff --git a/docs/IMPLEMENTATION_HANDOFF.md b/docs/IMPLEMENTATION_HANDOFF.md index be6e6b5..d0821c5 100644 --- a/docs/IMPLEMENTATION_HANDOFF.md +++ b/docs/IMPLEMENTATION_HANDOFF.md @@ -10,6 +10,15 @@ - `sdk-update` 只提供更新领域 API;宿主与 RN 桥接不复制下载、校验和安装代码。 - APK 更新必须支持 SHA-256、原子临时文件、进度、取消、有限重试、FileProvider、未知来源安装权限及确定错误码。 +## 2026-07-27 sdk-file 与宿主 FileProvider 隔离 + +- `sdk-file` 不再直接把 `androidx.core.content.FileProvider` 注册进宿主 Manifest, + 改为注册唯一的 `XuqmFileProvider` 子类。 +- Android Manifest 可能按 Provider 类名合并节点;宿主已有 `FileProvider` 时, + 不同 authority 会在合并阶段冲突。 +- authority 和公开文件 API 保持不变,宿主不需要 `tools:replace` 或新增 Manifest + 配置。 + ## 2026-07-17 已完成 - `FileSDK` 新增详细下载进度、SHA-256 与哈希匹配公共 API。 diff --git a/sdk-file/README.md b/sdk-file/README.md index 2a6b550..63d6c41 100644 --- a/sdk-file/README.md +++ b/sdk-file/README.md @@ -58,5 +58,6 @@ PlatformFileSDK.openFile(context, file) 打开本地文件不依赖平台初始化或登录。 -模块唯一声明 `${applicationId}.xuqm.fileprovider`。宿主和其他 SDK 不应重复声明 -同一用途的 FileProvider。 +模块通过独立的 `XuqmFileProvider` 声明 `${applicationId}.xuqm.fileprovider`。 +它不会与宿主或其他 SDK 自己的 `FileProvider` 合并冲突,宿主无需添加 +`tools:replace`。其他模块不得重复声明同一 Xuqm authority。 diff --git a/sdk-file/src/main/AndroidManifest.xml b/sdk-file/src/main/AndroidManifest.xml index a1bb7be..def3e18 100644 --- a/sdk-file/src/main/AndroidManifest.xml +++ b/sdk-file/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ diff --git a/sdk-file/src/main/java/com/xuqm/sdk/file/platform/XuqmFileProvider.kt b/sdk-file/src/main/java/com/xuqm/sdk/file/platform/XuqmFileProvider.kt new file mode 100644 index 0000000..de7139e --- /dev/null +++ b/sdk-file/src/main/java/com/xuqm/sdk/file/platform/XuqmFileProvider.kt @@ -0,0 +1,13 @@ +package com.xuqm.sdk.file.platform + +import androidx.core.content.FileProvider + +/** + * Xuqm 文件能力专用 Provider。 + * + * Android Manifest 以 Provider 类名作为合并键。若 SDK 与宿主都直接声明 + * [FileProvider],即使 authority 不同也可能被错误合并并产生冲突。使用独立子类后, + * SDK 的文件共享路径与宿主自己的 FileProvider 完全隔离,宿主无需添加 + * `tools:replace` 等兼容配置。 + */ +class XuqmFileProvider : FileProvider()