Android 4.1 (API 16) 起,應用無法直接讀取其他應用的 logcat,但可讀取自身程序的日誌。無需 Root,需宣告權限。
<uses-permission android:name="android.permission.READ_LOGS" />
fun readOwnLogs(): List<String> {
val logs = mutableListOf<String>()
try {
val process = Runtime.getRuntime().exec(arrayOf("logcat", "-d", "*:V"))
val reader = BufferedReader(InputStreamReader(process.inputStream))
var line: String?
while (reader.readLine().also { line = it } != null) {
logs.add(line)
}
reader.close()
} catch (e: Exception) {
e.printStackTrace()
}
return logs
}
-d:讀取後立即結束(非持續監聽)。*:V:顯示所有等級日誌,可改為 MyTag:V *:S 過濾特定標籤。Timber、Logback 等日誌框架,自行寫入檔案並上傳。adb logcat 或 Android Studio Logcat 視窗。