android收集日誌
① android怎樣記錄cpu的日誌
在發生ANR時,系統會將異常信息寫入到traces文件中,系統會記錄異常的位置、CPU和內存當時的使用情況,通過查看日誌基本就能判斷問題所在。接下來打開該文件,通過shell命令就可以了。如使用cat的打開文件:1,adb shell-->cat /data/anr/traces.txt
2,adb shell "cat /data/anr/traces.txt" | less
② android 極光推送怎麼收集crash日誌
設備連接到Xcode , Window -> Devices 點中對應硬體, 右側再點 View Device Logs, 然後就會看到了很多日誌了.
③ android測試 app 閃退 怎麼捕獲日誌
比如說,你內存有泄露的情況,比如說你發生了異常,而又沒有被處理,就會發生閃退的情況。 仔細檢查一下你的代碼。 或者做好全局的異常捕獲,及時將日誌上傳到服務端進行分析。
④ 如何獲取Android 的系統日誌logcat
您好,很高興為您解答。 讀取日誌需要的許可權 1 <uses-permission android:name="android.permission.READ_LOGS"/> 主要代碼 package mt.fzgh; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; public class MyLog { public static class MLog //靜態類 { public static void getLog() { System.out.println("--------func start--------"); // 方法啟動 try { ArrayList<String> cmdLine=new ArrayList<String>(); //設置命令 logcat -d 讀取日誌 cmdLine.add("logcat"); cmdLine.add("-d"); ArrayList<String> clearLog=new ArrayList<String>(); //設置命令 logcat -c 清除日誌 clearLog.add("logcat"); clearLog.add("-c"); Process process=Runtime.getRuntime().exec(cmdLine.toArray(new String[cmdLine.size()])); //捕獲日誌 BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(process.getInputStream())); //將捕獲內容轉換為BufferedReader // Runtime.runFinalizersOnExit(true); String str=null; while((str=bufferedReader.readLine())!=null) //開始讀取日誌,每次讀取一行 { Runtime.getRuntime().exec(clearLog.toArray(new String[clearLog.size()])); //清理日誌....這里至關重要,不清理的話,任何操作都將產生新的日誌,代碼進入死循環,直到bufferreader滿 System.out.println(str); //輸出,在logcat中查看效果,也可以是其他操作,比如發送給伺服器.. } if(str==null) { System.out.println("-- is null --"); } } catch(Exception e) { e.printStackTrace(); } System.out.println("--------func end--------"); } } } 這里比較令人糾結的一點就是日誌的清理 logcat -c 如果不加入 清理 在buffer滿為止,代碼自身能夠迭代6~7次.... 附帶一份logcat的 命令...不過好像 過濾器 指令有問題....慎用 選項 說明 -s 默認設置過濾器 - f 文件 輸出到日誌文件 -c 清除日誌 -d 獲取日誌 -g 獲取日誌的大小 - v 格式 設置日誌(見下面的格式列印格式) - v 格式 例 brief W/tag ( 876): message process W( 876) message (tag) tag W/tag : message thread W( 876:0x37c) message raw message time 09-08 05:40:26.729 W/tag ( 876): message threadtime 09-08 05:40:26.729 876 892 W tag : message long [09-08 05:40:26.729 876:0x37c W/tag ] message
⑤ 如何獲得Android的崩潰日誌
已經做成sdk的形式,源碼已公開,源碼看不懂的請自行google。
如果想定製適應自己app的sdk請自行fork。
AndroidLogCollector
android
app崩潰日誌收集sdk 1.0
作者:賈博士
崩潰日誌收集方法:
1.LogCollector是lib包,在需要添加崩潰日誌sdk的工程中導入此包。
2.導入lib後,在自己的工程的AndroidManifest.xml文件中加入許可權:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
3.在自己的工程中重寫自己的application,在oncreate中加入
LogCollector.init(getApplicationContext(), UPLOAD_URL, params);
PS:重寫自己的application記得在Manifest注冊
參數:
1.Context
2.String UPLOAD_URL ,上傳地址url,支持http和https方式,post方法。
3.HttpParameters params ,自定義的類,用於post上傳其他參數。
說明:
發生崩潰後,日誌會保存在 /data/data/{your package name}/files/ 目錄下
日誌只有一個文件,多條數據日誌保存
日誌文件上傳成功後會自動刪除,上傳不成功則不刪除
日誌格式可以根據自己的需求在源碼中改動
http的post傳的數據也可自行修改
參考代碼:
public class MyApplication extends Application {
//post method , upload logfile url,replace your site . support http or https
private static final String UPLOAD_URL = "http://xxxxxxxx";
@Override
public void onCreate() {
super.onCreate();
//upload logfile , post params.
HttpParameters params = new HttpParameters();
params.add("key1", "value1");
params.add("key2", "value2");
params.add("key3", "value3");
//.......
//replace your key and value;
boolean isDebug = true;
//set debug mode , you can see debug log , and also you can get logfile in sdcard;
LogCollector.setDebugMode(isDebug);
LogCollector.init(getApplicationContext(), UPLOAD_URL, params);//params can be null
}
}
上傳日誌方法:
需要先在application中執行init,
然後在任何位置添加如下代碼:
LogCollector.upload(boolean isWifiOnly);
參數:
1.boolean isWifiOnly; true代表只在wifi情況下發送,false代表有網的情況下就發送(包括流量和wifi)
您可以在service,activity等位置的合適時機觸發,不會卡界面也不會影響性能。
參考代碼:
private void uploadLogFile(){
boolean isWifiOnly = true;//only wifi mode can upload
LogCollector.upload(isWifiOnly);//upload at the right time
}
調試:
在init之前調用
LogCollector.setDebugMode(boolean isDebug);
說明:
1.開啟調試後可以看到堆棧的log信息
2.同時可以在sd卡下的Android/data/{your package name}/Log/ 目錄下可以查看保存的崩潰log日誌
該目錄下的日誌不會自動刪除,請及時清空,避免佔用空間
⑥ 使用cocos2dx移植 android平台,怎麼收集崩潰日誌
很高興能幫助您
如果你用的是windows系統作為開發環境,使用的是cocos2d-x3.2最新版的,你在一開始安裝cocos2d-x的時候,會要求輸入
NDK_ROOT
ANDROID_SDK_ROOT
ANT_ROOT
最新版的cocos2d-x使用了python來進行安裝和編譯程序的,所以你要先在你的windows系統上安裝上python.安裝好之後,下載最新版的cocos2d-x,然後,cd到這個目錄下,你會看到一個有一個setup.py的文件,.py後綴的文件就是python的腳本文件了。是要用python來運行的。如果你安裝好python之後設置好了python的環境變數,這個時候,你只要在命令行里運行:
python setup.py就可以了。
然後你就可以看到要求你輸入的這三個路徑了。
這三個工具的所在路徑,這幾個路徑輸入對了之後,你的cocos2d-x就安裝好了,這個時候,在cmd里創建一個新項目,創建的方法是在命令行里輸入:
cocos new youprojectname -p com.youcom,youprojectname -l cpp -d 你的新建項目所在路徑
然後回車,你就可以看你的的項目會在你的新建項目路徑下有一個youprojectname的文件夾,打開,你就可以看到里邊有各個系統的project文件夾了,還有一個Class和Resources的文件夾。這個時候,你在命令行里cd到你的proj.android文件夾下,使用命令:
python bulid_native.py
就可以對你的安卓新建的helloworld項目進行編譯了。不出意外,要不然一分鍾就編譯好了。會生成一個libcocos2dcpp.so在你的pro.android/libs/armabi的路徑下。然後打開你的ADT,也就是eclipse,進入pro.android目錄,導入android項目到eclipse。這個時候可能會報一個cocos2d-x的lib庫錯誤,只要把cocos2d-x的
cocos2d/cocos/platform/android/java/src
目錄下的文件夾復制到pro.android/src下就可以解決這個問題了。
然後,接上你的android手機,並且在手機中打開開發者模式。點擊程序遠行設置,選擇使用設備運行。在彈出的一個選擇手機設備的框時選擇run,不一會,你的helloworld項目就可以在手機上看到了。
如果要調試,你可以在eclipse中打開logcat,看到cocos2d-x的log輸出信息。
總的來說,android最好的開發環境還是mac系統。因為在mac系統下很多linux命令都可以使用。不像windows系統比較蹩腳。
你的採納是我前進的動力,
記得好評和採納,答題不易,互相幫助
⑦ 如何抓取Android系統APP測試的日誌
近日看到一篇文章,總結的不錯,對剛接觸手機端測試的人很有幫助,記錄下來備用。 現在我們測試時,開發會先在本地機上打好測試包,自己安裝,測完一輪,開發修改好後,再打一個包提測。以下是功能測試時需要注意的點: 1、登錄 ●登錄用戶名和密碼錯誤時,界面有提示信息 ●用戶主動退出登錄後,下次啟動APP時,應該進入登錄界面 ●對於支持自動登錄的APP,數據交換時 ,是否能自動登錄成功且資料庫操作無誤 ●密碼更改後,登錄時是否做到了有效數據的校驗 ●對於未登錄時一些頁面的操作,是否做了控制 ●切換賬號登錄,檢驗登錄的信息是否做到及時更新 ●對於多個端都進行操作時,確保資料庫操作無誤,且每個端可以及時看到數據的更新 ●對於一些軟體,支持一個賬號只允許登錄一台機器,這時,需要檢查賬號登錄多個手機時,是否將原用戶剔除,且能夠給出提示信息 ● APP切換到後台時,再次切換到前台的測試,如登錄時,有電話打進來 2、離線 離線是應用程序在本地的客戶端會緩存一部分數據以功程序下次調用 ●對於一些程序,需要在登錄進來後,這時沒有網路的情況下可以瀏覽本地數據 ●對於無網路時,刷新獲取新數據時,不能獲取數據且能給出友好提示 ●切換到後台,再次切換到前台時,可以正常查看 ●離線後又連上網,這時對數據有更新時,需要從伺服器端獲取新數據來更新客戶端數據,且要更新本地緩存信息 ●對於一些界面的數據不提供離線查看,需要給出相應提示且界面更新後無任何數據 3、sqlite資料庫 android和IOS客戶端都採用了sqlite資料庫, 當APP需要在客戶端保存數據時,它們會創建相應的資料庫表,最常見的就是對賬號的保存,這時的測試點主要有: ●跟一般資料庫一樣,需要見擦數據的增,刪,改,查 ●客戶端即用即建,當表不存在時,是否會自動創建 ●數據表被刪除後,新建的表中的數據能否自動從伺服器端中獲取回來兵保存 ●當對數據進行了修改,刪除,客戶端和伺服器端能否有相應的更新 ●獲取數據,客戶端是從直接從客戶端獲取還是和伺服器端的數據進行比較 ●對於客戶端從伺服器端更新的數據,客戶端是否有保存於本地。 4、個人提的bug注意點: ●因為ios系統有不斷的更新,所以會出現這樣那樣兼容性的問題,其實我們軟體中有一點,我記得很清楚,就是在送人彩票環節,贈送成功後會彈出一個溫馨提示(問用戶是,否要提醒用戶領取),用戶一旦點了【好的】,會跳到一個簡訊提醒框,此時就會出錯,在蘋果5上都沒事,一旦在4s上運行就有可能付出閃退。 ●如果是同一個用戶,那麼她在android,ios上登錄後,記錄應該都是一樣的。 ●一款手機軟體在android系統上測試要特別注意,android手機款式多,內存,解析度不一,所以測試難過也比較大。我們的軟體有一個問題一直走不去,就是在小手機上,如果應用開多,占內存大了,就會出現閃退。 ●有新的版本要上線前,一定要測舊的版本,不能因為新版本上線了,老版本就不能用了,用老版本的用戶還是大有人在。有一次,我用新版本注冊的用戶去玩老版本,結果就有有錯過,當然這樣玩的人很少。 ●如果一頁面里有很多條記錄里,要注意上下多滑動,我在測試過程中,好幾次在上下滑動中又由於數據出現錯誤,導致閃退,尤其是android. ●到了某個頁面,突然斷網了,然後你在不知情的情況下,點擊某個按鈕想繼續往下走,此時,不能出現閃退的情況,而要給出斷網提示。 ●文本框校驗時採用等價類劃分法,邊界值法,錯誤推測法與場景法,至少這些方法的概念,自己網上去搜。 ●很多手機app在打開後,一般用戶都不需要先注冊登錄,到了合適的地方,彈出合適的提示,很好友的讓用戶去登錄。當然有些頁面,而且有時沒有判斷,未登錄去點一些按鈕,有可能會閃退。未登錄與登錄顯示的頁面是完全不一樣的,要仔細測。 ●用戶登錄狀態太久,sessionId會過期,會出現「雖然是登錄狀態,系統會提示用戶沒有登錄。」 ●外部軟體需要更新導致自家軟體閃退。我公司是一款博彩類軟體,用戶需要通過支付寶或財付通支付,有一次在用支付快捷支付時,提示我支付快捷支付需要更新,我就點了更新,更新完成後,我們的軟體就異常退出了。 ●輸入數據,點某顆按鈕,會出現錯誤提示,有時不管這個提示,繼續猛點這個按鈕,會出現出人意外的結果哦。 ●上線前一定要測一下軟體更新,我好幾次這里沒測,結果挨了批。
⑧ 如何獲取 android 的系統日誌
讀取日誌需要的許可權
1
<uses-permission android:name="android.permission.READ_LOGS"/>
主要代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package mt.fzgh;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class MyLog
{
public static class MLog //<a href="https://www..com/s?wd=%E9%9D%99%E6%80%81%E7%B1%BB&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">靜態類</a>
{
public static void getLog()
{
System.out.println("--------func start--------"); // 方法啟動
try
{
ArrayList<String> cmdLine=new ArrayList<String>(); //設置命令 logcat -d 讀取日誌
cmdLine.add("logcat");
cmdLine.add("-d");
ArrayList<String> clearLog=new ArrayList<String>(); //設置命令 logcat -c 清除日誌
clearLog.add("logcat");
clearLog.add("-c");
Process process=Runtime.getRuntime().exec(cmdLine.toArray(new String[cmdLine.size()])); //捕獲日誌
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(process.getInputStream())); //將捕獲內容轉換為BufferedReader
// Runtime.runFinalizersOnExit(true);
String str=null;
while((str=bufferedReader.readLine())!=null) //開始讀取日誌,每次讀取一行
{
Runtime.getRuntime().exec(clearLog.toArray(new String[clearLog.size()])); //清理日誌....這里至關重要,不清理的話,任何操作都將產生新的日誌,代碼進入死循環,直到bufferreader滿
System.out.println(str); //輸出,在logcat中查看效果,也可以是其他操作,比如發送給伺服器..
}
if(str==null)
{
System.out.println("-- is null --");
}
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("--------func end--------");
}
}
}
這里比較令人糾結的一點就是日誌的清理 logcat -c 如果不加入 清理 在buffer滿為止,代碼自身能夠迭代6~7次....
附帶一份logcat的 命令...不過好像 過濾器 指令有問題....慎用
選項 說明
-s 默認設置過濾器
- f 文件 輸出到日誌文件
-c 清除日誌
-d 獲取日誌
-g 獲取日誌的大小
- v 格式 設置日誌(見下面的格式列印格式)
- v 格式 例
brief W/tag ( 876): message
process W( 876) message (tag)
tag W/tag : message
thread W( 876:0x37c) message
raw message
time 09-08 05:40:26.729 W/tag ( 876): message
threadtime 09-08 05:40:26.729 876 892 W tag : message
long [09-08 05:40:26.729 876:0x37c W/tag ] message
⑨ android 怎麼捕獲app異常閃退的日誌
1、通過集成第三方SDK,如網路統計、友盟統計等
2、發版時使用加固工具,他們也會收集錯誤日誌,如360加固
3、在程序中添加程序異常崩潰的捕捉代碼,保存到本地文件中。