You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android普通应用获取Logcat日志并通过邮件发送附件失败如何解决

问题根因

你遇到的附件添加失败问题核心是Android分区存储适配和路径配置错误,和系统隐藏API的警告无关,以下是可直接落地的修改方案:

修正步骤

  • 1. 替换日志存储路径(核心修改)

    API 29(Android 10)开始普通应用无法直接读写外部存储公共目录的自定义路径,你当前使用的Environment.getExternalStorageDirectory()已废弃,需改为应用专属外部存储目录,无需额外申请存储权限,完全合规:
    // 替换原来的appDirectory定义
    File appDirectory = new File(getExternalFilesDir(null), "MyPersonalAppFolder");
    File logDirectory = new File(appDirectory, "logs");
    // 创建目录要使用mkdirs(),确保多级目录创建成功
    if (!appDirectory.exists()) {
        appDirectory.mkdirs();
    }
    if (!logDirectory.exists()) {
        logDirectory.mkdirs();
    }
    
  • 2. 调整FileProvider路径配置

    修改xml下的路径配置文件,匹配应用专属目录的映射规则:
    <?xml version ="1.0" encoding ="utf-8"?>
    <paths xmlns:android="http://schemas.android.com/apk/res/android">
        <external-files-path name="app_files" path="."/>
    </paths>
    
  • 3. 修正邮件Intent配置

    原来的MIME类型设置兼容性差,改为邮件通用类型:
    emailIntent.setType("message/rfc822");
    
  • 4. 清理无效权限

    删掉Manifest里的READ_LOGS、WRITE_EXTERNAL_STORAGE、READ_EXTERNAL_STORAGE权限声明:
    • READ_LOGS仅系统应用可获取,普通应用获取自身进程日志不需要该权限
    • 应用专属目录读写不需要额外存储权限
  • 5. 确认Manifest的Provider配置

    确保你已在Manifest中正确注册FileProvider:
    <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/你的路径配置文件名" />
    </provider>
    

补充说明

你通过Runtime.getRuntime().exec("logcat")获取自身应用日志的方式是合规的,普通应用可正常使用,不会被安全规则拦截。


内容的提问来源于stack exchange,提问作者Mvfm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:18:02