fix(file): isolate sdk file provider from hosts
这个提交包含在:
父节点
0b681dbbb2
当前提交
7784399bd8
@ -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()
|
||||||
正在加载...
在新工单中引用
屏蔽一个用户