Все знают, что, даже после хорошего тестирования, программы для Android иногда способны падать в самых неподходящих случаях. Может, виновато глобальное потепление, может, это проделки бессовестных китайцев, но факт остается фактом - приложение, которое вы долго разрабатывали, а потом долго и трепетно тестировали, может на некоторых устройствах работать совершенно непредсказуемо, причем воспроизвести ошибку на своих устройствах не получается.
В таких случаях на помощь рядовому разработчику приходит какой-нибудь дамп падения наподобие аварийного минидампа в Windows. Но в Android такого механизма нет, или по крайней мере мне об этом ничего не известно.
Столкнувшись в свое время с такой проблемой, я просмотрел несколько готовых решений ( это, например ), как обычно все они чем-то не понравились. Поэтому пришлось написать простой собственный велосипед, который и хочу здесь привести.
Класс LogCatWrapperBackgroundTask работает в отдельном потоке ( AsyncTask ), и его задача сводится к запуску logcat ( см. developer.android.com ), который как раз и пишет системный лог в указанный вами файл. Для работы нужно прописать в AndroidManifest.xml разрешение
<uses-permission android:name="android.permission.READ_LOGS" />
public class LogCatWrapperBackgroundTask extends AsyncTask<ArrayList<String>, Void, StringBuilder>{
@Override
protected void onPreExecute(){
}
@Override
protected StringBuilder doInBackground(ArrayList<String>... params){
final StringBuilder log = new StringBuilder();
try{
ArrayList<String> commandLine = new ArrayList<String>();
commandLine.add("logcat");
Read more: Plaincodesource