fix(file): isolate sdk file provider from hosts

这个提交包含在:
XuqmGroup 2026-07-27 11:44:24 +08:00
父节点 0b681dbbb2
当前提交 7784399bd8
共有 5 个文件被更改,包括 29 次插入5 次删除

查看文件

@ -148,7 +148,8 @@ val verifySdkManifestOwnership by tasks.registering {
val file = mergedManifest("sdk-file") val file = mergedManifest("sdk-file")
check("XuqmMergedProvider" in 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") val push = mergedManifest("sdk-push")
check("XuqmMergedProvider" in push) check("XuqmMergedProvider" in push)
@ -171,7 +172,7 @@ val verifySampleManifestMerge by tasks.registering {
).readText() ).readText()
check(Regex("com\\.xuqm\\.sdk\\.internal\\.XuqmMergedProvider") check(Regex("com\\.xuqm\\.sdk\\.internal\\.XuqmMergedProvider")
.findAll(manifest).count() == 1) .findAll(manifest).count() == 1)
check(Regex("androidx\\.core\\.content\\.FileProvider") check(Regex("com\\.xuqm\\.sdk\\.file\\.platform\\.XuqmFileProvider")
.findAll(manifest).count() == 1) .findAll(manifest).count() == 1)
check(Regex("com\\.xuqm\\.common_plugin_applied") check(Regex("com\\.xuqm\\.common_plugin_applied")
.findAll(manifest).count() == 1) .findAll(manifest).count() == 1)

查看文件

@ -10,6 +10,15 @@
- `sdk-update` 只提供更新领域 API;宿主与 RN 桥接不复制下载、校验和安装代码。 - `sdk-update` 只提供更新领域 API;宿主与 RN 桥接不复制下载、校验和安装代码。
- APK 更新必须支持 SHA-256、原子临时文件、进度、取消、有限重试、FileProvider、未知来源安装权限及确定错误码。 - 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 已完成 ## 2026-07-17 已完成
- `FileSDK` 新增详细下载进度、SHA-256 与哈希匹配公共 API。 - `FileSDK` 新增详细下载进度、SHA-256 与哈希匹配公共 API。

查看文件

@ -58,5 +58,6 @@ PlatformFileSDK.openFile(context, file)
打开本地文件不依赖平台初始化或登录。 打开本地文件不依赖平台初始化或登录。
模块唯一声明 `${applicationId}.xuqm.fileprovider`。宿主和其他 SDK 不应重复声明 模块通过独立的 `XuqmFileProvider` 声明 `${applicationId}.xuqm.fileprovider`
同一用途的 FileProvider。 它不会与宿主或其他 SDK 自己的 `FileProvider` 合并冲突,宿主无需添加
`tools:replace`。其他模块不得重复声明同一 Xuqm authority。

查看文件

@ -1,7 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application> <application>
<provider <provider
android:name="androidx.core.content.FileProvider" android:name="com.xuqm.sdk.file.platform.XuqmFileProvider"
android:authorities="${applicationId}.xuqm.fileprovider" android:authorities="${applicationId}.xuqm.fileprovider"
android:exported="false" android:exported="false"
android:grantUriPermissions="true"> android:grantUriPermissions="true">

查看文件

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