App 內調用 Runtime.exec("logcat -d") 讀取日誌無輸出,通常缺少 READ_LOGS 權限或進程參數不當。
<uses-permission android:name="android.permission.READ_LOGS" />
注意:Android 4.1+ 此權限僅系統應用可獲取,普通應用無法讀取其他進程日誌,只能讀取自身進程日誌。
// 讀取完畢退出
String[] cmd = {"logcat", "-d", "-v", "time", "MyTag:V", "*:S"};
// 持續監聽(去掉 -d)
String[] cmdLive = {"logcat", "-v", "time", "MyTag:V", "*:S"};
try {
Process process = Runtime.getRuntime().exec(cmd);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()), 1024);
String line;
StringBuilder log = new StringBuilder();
while ((line = reader.readLine()) != null) {
log.append(line).append("\n");
}
reader.close();
// log.toString() 即為日誌內容
} catch (IOException e) {
e.printStackTrace();
}
生產環境建議自行實現日誌收集(如寫入文件、上傳服務器),而非依賴 logcat,兼容性與權限更可控。
理解權限限制與命令參數,按需選擇日誌獲取方案。