標籤:define ima adb shell root 它的 因此 分享圖片 檔案 def
Android原生系統預設情況下,log是不輸出到檔案的,這樣對於只能用模擬器進行開發實驗的人來說,不是很方便。
當然android預設不輸出log到檔案也是考慮到輸入日誌到檔案會引起效能問題。
下面提供一種將日誌定向到檔案的方法
修改system/core/logcat/logcatd.rc檔案,在檔案的最後添加如何代碼:
# define my log directoryservice applogcat /system/bin/logcat -v threadtime -r 4096 -n 10 -f /data/log/android_logs/applogcat_log class late_start user root. group system disabled writepid /dev/cpuset/system-background/tasks
這裡定義了一個名為applogcat的服務,服務對應的可執行檔為/system/bin/logcat,後面的/data/log/android_logs/applogcat_log表示日誌的輸出檔案路徑
修改system/core/rootdir/init.rc檔案,在on post-fs-data階段的最後添加如下代碼
注意,這裡在建立data/log/android_logs目錄時,分兩步進行,因為在.rc檔案裡面不支援跨級建立檔案(夾),因此這裡先建立了log目錄,然後才建立它的子目錄android_logs。
最後,別忘了使用start命令,啟動剛才建立的applogcat服務。
到這裡,Log Service和目錄已經建立好了。
此時,編譯一下,重新手機發現只有目錄,並沒有對應的記錄檔產生。
使用adb shell進行手機,dmesg查看一下kernel日誌,發現SELinux許可權報錯。
此時,正確的方法應該是給/data/log/android_logs目錄添加正確的SELinux許可權,由於對SELinux部分內容並不瞭解,暫時不懂如何添加許可權,於是直接從代碼上把SELinux給關了。(不推薦這種方法,只是自己玩那無所謂)
從代碼層級關閉SELinux的方法很簡單,修改/system/core/init/init.cpp中的selinux_initialize(bool in_kernel_domain)方法即可,將其中的is_enforcing置為0即可。
當然,這並不是正確的方法,等後面學習了SELinux部分的內容後,再來更新正確的方法,先把這個方法記錄下來。
Android O版本自訂日誌輸出目錄