Frage

Wir testen jetzt unsere Anwendung mit ein paar Freunden. Manchmal gibt es einige Fehler, die nicht eine Ausnahme werfen. Also ich weiß wirklich nicht, was das Problem war. Also dachte ich, es wäre eine gute Idee sein, um einen Menüpunkt zu implementieren, die die logcat Ausgabe in eine E-Mail-Adresse senden kann, so dass wir das Protokoll untersuchen können.

Leider habe ich nicht einen Hinweis im Internet finden, wie man die logcat von einem Telefon zu extrahieren. Wie sollte eine E-Mail senden, nicht das Problem sein.

War es hilfreich?

Lösung

Blick auf android-log-Kollektor , wie es tut, was Sie zu tun versuchen.

Es ist nicht möglich, beliebige LogCat Daten von Android 4.1 zu sammeln. Es gab nie eine dokumentierte und unterstützte Möglichkeit, dies zu tun, und die ohne Papiere / ohne Unterstützung wurde in Jelly Bean gesperrt. Für Ihre eigene abstürzt, werden Sie besser mit einer Crash-Logging-Bibliothek dienen, wie ACRA .

Andere Tipps

würde ich auch in Flurry aussehen ( flurry.com ), die nicht nur allgemeine Analytik gibt aber können Sie beliebig anmelden Info und protokolliert auch nicht abgefangene Ausnahmen für Sie. Ich stelle es in wahrsten Sinne des Wortes 5 Minuten, aber eine Sache im Auge zu behalten ist, dass es wie eine E-Mail-Benachrichtigung nicht in Echtzeit ist. Sie werden ein paar Stunden für das, was warten müssen Sie in der App anmelden ihrem Dashboard angezeigt. Es könnte auch sein Overkill wenn Sie eine wirklich leichte app haben, aber ich habe keinen Performance-Verlust in meiner app als Folge der Nutzung des Dienstes bemerkt.

fand ich die LogCollector sehr nützlich in der Tat (die Spitze von CommonsWare ):

Und nicht zu vergessen Satz in Ihrer eigenen Anwendung:

<uses-permission android:name="android.permission.READ_LOGS" />

Ich würde auf jeden Fall auch bei diesem Projekt zu suchen empfehlen hier

Diese Lösung ist nicht eine E-Mail senden, sondern sendet sie an einen Server über UDP.

https://github.com/Chemik/logcatudp

Der Quellcode ist verfügbar. Es kann in unserer eigenen App leicht eingebettet werden. Ich habe nicht versucht, dies zu tun.

In Ihrer Manifest-Datei den folgenden Berechtigungen geben:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

In Ihrer ersten / Start-Aktivität, direkt nach dem

super.onCreate(savedInstanceState);

Schreiben unten Linien: Dies wird Ihre App logcat auf Ihr Gerät der externen Speicher schreibt

        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, EXTERNAL_PERMISSION_CODE);
    }
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, READ_PERMISSION_CODE);
    }

    if ( isExternalStorageWritable() ) {

        File appDirectory = new File( Environment.getExternalStorageDirectory() + "/MyAppLog" );
        File logDirectory = new File( appDirectory + "/log" );
        File logFile = new File( logDirectory, "logcat" + ".txt" );

        // create app folder
        if ( !appDirectory.exists() ) {
            appDirectory.mkdir();
        }

        // create log folder
        if ( !logDirectory.exists() ) {
            logDirectory.mkdir();
        }

        // clear the previous logcat and then write the new one to the file
        if ( logFile.exists()){
            logFile.delete();
        }

        try {
            Process process = Runtime.getRuntime().exec("logcat -c");
            process = Runtime.getRuntime().exec("logcat -f " + logFile);
        } catch ( IOException e ) {
            e.printStackTrace();
        }

    } else if ( isExternalStorageReadable() ) {
        // only readable
    } else {
        // not accessible
    }

Für die logcat auf die gewünschte E-Mail-Adresse senden: Verwendung unter Methode

public void sendLogcatMail(){

    if ( isExternalStorageWritable() ) {

        File appDirectory = new File(Environment.getExternalStorageDirectory() + "/MyAppLog");
        File logDirectory = new File(appDirectory + "/log");
        File logFile = new File(logDirectory, "logcat" + ".txt");

        if (logFile.exists()) {
            Intent emailIntent = new Intent(Intent.ACTION_SEND);
            emailIntent.setType("vnd.android.cursor.dir/email");
            String to[] = {"yourEmailAddress@gmail.com"};
            emailIntent.putExtra(Intent.EXTRA_EMAIL, to);
            emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(String.valueOf(logFile.toURI())));
            emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Log files");
            emailIntent.putExtra(Intent.EXTRA_TEXT, "Send some message along");
            startActivity(Intent.createChooser(emailIntent, "Send email..."));
        }
    }
}

Methode zur Überprüfung, ob die Berechtigungen für das Schreiben auf einem externen Speicher gegeben sind oder nicht:

/ * Prüft, ob externer Speicher für Lese verfügbar ist und Schreib * /

public static boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if ( Environment.MEDIA_MOUNTED.equals( state ) ) {
        return true;
    }
    return false;
}

Dank Ihnen 2, aber durch das Androiden-log-Kollektor-Forum fand ich eine Lösung , die ist noch einfacher zu handhaben:

Dort finden Sie eine PHP-Datei irgendwo auf dem Server gespeichert werden können (oder, wenn Sie nicht wollen, einen eigenen Server verwenden, sie haben auch einen Skript auf dem Server). In dieser PHP-Datei können Sie festlegen, was geschehen soll, wenn die Post-Nachricht den Server erreicht. Ich definded nur einen sehr einfachen Code, der die Daten an meine E-Mail Adresse.

Das funktioniert nur, wenn eine abgefangene Ausnahme geworfen wurde. Aber man könnte die Standard-abgefangene Exception-Handler zu erweitern, so dass es auch möglich, nicht nur die Stacktrace erhalten, sondern auch die logcat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top