Richtig loggen mit PhoneGap und Logcat

Vorgestern habe ich ja geschrieben, dass ich mit PhoneGap und Sencha Touch Apps baue. Das Debuggen funktioniert im Browser zwar ganz gut, aber es kann ja durchaus vorkommen, dass sich die Anwendung auf dem Telefon etwas anders verhält. Das direkte Debuggen auf dem Telefon ist so einfach nicht möglich, weshalb das Dokumentieren des Programmablaufs in einem Log sehr sinnvoll sein kann. Doch wie gelangt eine Ausgabe per console.log ins Logcat?

Im Prinzip ist es ganz simpel. Wir überschreiben dazu aus Java heraus einfach den JavaScript-Aufruf console.log (auf ganz ähnliche Weise stellt übrigens auch PhoneGap seine Funktionalität der WebView zur Verfügung).
Als erstes passen wir unsere Main-Activity (hier App) wie folgt an:

 

  1. import com.phonegap.DroidGap;
  2. import android.os.Bundle;
  3.  
  4. public class App extends DroidGap {
  5. @Override
  6. public void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. super.loadUrl("file:///android_asset/index.html");
  9.  
  10. this.appView.getSettings().setJavaScriptEnabled(true);
  11. this.appView.addJavascriptInterface(
  12. new Console(), "console"
  13. );
  14. }
  15. }

 

Damit auch alles läuft benötigen wir nun noch die Klasse Console:

 

Console   
  1. import android.util.Log;
  2.  
  3. public class Console {
  4. public static final String TAG = "myapp";
  5. public void log(String msg){
  6. Log.d(TAG, msg);
  7. }
  8. }

 

Was passiert dort? Eigentlich nichts weiter als dass wir per addJavascriptInterface ein neues Objekt Console in der WebView verfügbar machen. Diese Klasse hat für unseren einfachen Anwendungsfall nur eine Methode log, die lediglich einen String an das Android-Log durchreicht. Setzt man nun noch den einen Filter in Logcat auf den angegebenen Tag, bekommt man schön übersichtlich die Log-Einträge des JavaScript-Codes zu Gesicht. Dass wir console.log einfach überschreiben hat den Vorteil, dass wir keine Veränderungen am Code vornehmen müssen, um alles im Browser laufen zu lassen, denn dort funktioniert console.log natürlich auch ;-)

Man kann dies als einfaches Beispiel für Interaktion aus der WebView mit dem Telefon sehen, denn so kann man auch andere Funktionalitäten aus JavaScript auslagern bzw. zur Verfügung stellen, wie es eben PhoneGap auch tut.

2 Kommentare

  1. Pascal sagt:

    Super das ist genau wo nach ich gesucht hatte…

    Danke
    Pascal

  2. Ashen sagt:

    Thank you so much!!!

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Rss Feed Tweeter button Facebook button Linkedin button Digg button