从 Android APP 收集完整设备日志

问题描述 投票:0回答:1

我正在开发一个 Android 应用程序,目标是 Android 13 或更高版本。在应用程序中,我正在执行连续更新,对于每次更新,我想收集整个设备的日志,包括 update_engine 的日志,因此,如果任何更新失败,我可以知道问题是什么。 对于每次更新,我都会将日志保存在不同的文件中。

为了收集完整的设备日志,我正在使用系统权限

<uses-permission android:name="android.permission.READ_LOGS" />

虽然只有当我们的应用程序与设备具有相同的系统签名时才会授予系统权限,但在 Android 13 中,谷歌对其进行了更多限制,现在默认情况下只能授予prv应用程序,我不能将我的应用程序设置为prv应用程序,因为对于Google 需要批准该请求。

如果我们无法收集完整的设备日志也没关系,但我仍然想收集我自己的应用程序日志,不幸的是,我只能收集我的应用程序日志的一半。

目前,我正在使用-

        StringBuilder command = new StringBuilder(); // Start to get logcat log to new file
        command.append("logcat -v threadtime -f ");
        command.append(Constants.LOGCAT_LOG_PATH);
        try {
            mProcess = Runtime.getRuntime().exec(command.toString());
        } catch(Exception e) {
            Log.e(TAG, "Logcat exec ERROR ");
        }

我还尝试了“-d”选项,它将日志转储到文件中,但有时我仍然没有获得完整的日志,或者有时我在日志文件中收到重复的日志。

注意 - 应用有效负载后,我将调用重新启动以确认设备是否已成功更新。似乎日志仍在缓冲区中(尚未写入文件)并且设备重新启动。我还尝试了 30 秒的 postRunnable(),以便可以将日志写入文件形式缓冲区,但没有帮助。

PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
pm.reboot(null);

Android 13 READ_LOG 权限行为更改后可能有什么解决方法?虽然如果我允许,设备会显示一个允许/拒绝权限对话框的弹出窗口,但它正在收集完整的设备日志,但我不能一直允许/拒绝它,因为这是一个长时间运行的过程。

java android logging logcat android-runtime
1个回答
-1
投票

嗨,你有什么解决方案吗,我也在为android设计一个错误报告机制,可能对我也有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.