Я работаю над приложением, которое использует Android MediaMuxer для записи экрана. При использовании Crashlytics у значительного числа пользователей происходит сбой «Не удалось остановить мультиплексор», но я не могу воспроизвести его локально ни на одном из моих устройств. Согласно другому вопросу , журналы MPEG4Writer, сгенерированные во время работы MediaMuxer, должны указывать источник проблемы, но так как я не могу воспроизвести его локально, мне нужно собрать эти журналы удаленно и передать их к Crashlytics.
Итак, вот моя проблема: MediaMuxer и MPEG4Writer являются системными классами, поэтому, очевидно, я не могу редактировать их, чтобы добавить строки Crashlytics.log (). Я думал о том, чтобы приложение прочитало выходные данные Logcat и сохранило все записи, содержащие MPEG4Writer, которые затем отправляются в Crashlytics в случае сбоя мультиплексора, используя эту реализацию в качестве основы. Вот мой код:
public class LogRetriever extends Thread {
private static final String TAG = LogRetriever.class.getCanonicalName();
public static ArrayList<String> logStorage = new ArrayList<>();
private AtomicBoolean mLoggingActive = new AtomicBoolean(true);
@Override
public void run() {
try {
String[] command = new String[] { "logcat" };
Process process = Runtime.getRuntime().exec(command);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while (mLoggingActive.get() && ((line = bufferedReader.readLine()) != null)){
if(line.contains("MPEG4Writer")) {
logStorage.add(line);
}
}
}
catch (IOException ex) {
Log.e(TAG, "start failed", ex);
}
}
public void stopLogging() {
mLoggingActive.set(false);
}
}
Используя вышеупомянутый метод, я, кажется, получаю только первые четыре строки журнала, сгенерированные MPEG4Writer. Остальные видны через logcat Android Studio, но не собраны моим кодом. Я также попробовал эту библиотеку , которая, кажется, делает то же самое, но, опять же, та же проблема, только первые 4 строки собраны. Я подозреваю, что MediaMuxer создает свой собственный процесс после этих 4 строк, и в этот момент я больше не могу читать его вывод logcat, потому что мой класс LogRetriever теперь находится в другом процессе. Так как же мне собирать эти логи? Я здесь ошибаюсь?