From a6b1905a66fe3c8f0c4153b36e3a8bc351eaac3d Mon Sep 17 00:00:00 2001 From: XuqmGroup Date: Thu, 18 Jun 2026 13:50:14 +0800 Subject: [PATCH] =?UTF-8?q?fix(file):=20resolveBaseDir=20=E5=A4=9A?= =?UTF-8?q?=E9=87=8D=E5=B0=9D=E8=AF=95=E5=88=9B=E5=BB=BA=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=EF=BC=8C=E5=85=BC=E5=AE=B9=E5=8D=8E=E4=B8=BA/=E5=B0=8F?= =?UTF-8?q?=E7=B1=B3=E8=AE=BE=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - mkdirs() 静默失败时,尝试 Runtime.exec('mkdir -p') - 仍失败则回退到 Sandbox 目录,避免 ENOENT 崩溃 --- .../src/main/java/com/xuqm/sdk/file/FileSDK.kt | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/sdk-core/src/main/java/com/xuqm/sdk/file/FileSDK.kt b/sdk-core/src/main/java/com/xuqm/sdk/file/FileSDK.kt index 4ea0801..77e8302 100644 --- a/sdk-core/src/main/java/com/xuqm/sdk/file/FileSDK.kt +++ b/sdk-core/src/main/java/com/xuqm/sdk/file/FileSDK.kt @@ -278,12 +278,25 @@ object FileSDK { private fun resolveBaseDir(context: Context, destination: FileDownloadDestination): File = when (destination) { FileDownloadDestination.PublicDownloads -> { val appName = context.applicationInfo.loadLabel(context.packageManager).toString() - File( + val dir = File( android.os.Environment.getExternalStoragePublicDirectory( android.os.Environment.DIRECTORY_DOWNLOADS ), appName, - ).apply { mkdirs() } + ) + // mkdirs() 在部分华为/小米设备上静默失败,多重尝试确保目录存在 + if (!dir.exists()) { + dir.mkdirs() + } + if (!dir.exists()) { + runCatching { Runtime.getRuntime().exec(arrayOf("mkdir", "-p", dir.absolutePath)).waitFor() } + } + if (!dir.exists()) { + android.util.Log.w("XWV", "resolveBaseDir: cannot create ${dir.absolutePath}, falling back to Sandbox") + context.getExternalFilesDir(null) ?: context.filesDir + } else { + dir + } } FileDownloadDestination.Sandbox -> { context.getExternalFilesDir(null) ?: context.filesDir