Domanda

Quali soluzioni di registrazione esistono per j2me?

Sono specificamente interessato ad escludere facilmente la registrazione per " release " versione, per avere un pacchetto più piccolo & amp; impronta di memoria.

È stato utile?

Soluzione

Se si utilizza la preelaborazione e l'offuscamento con Proguard, è possibile disporre di una semplice classe di registrazione.

public class Log {
  public static void debug(final String message) {
    //#if !release.build
    System.out.println(message);
    //#endif
  }
}

O effettua la registrazione dove mai è necessario. Ora, se la proprietà release.build è impostata su true, questo codice verrà commentato, risultando in un metodo vuoto. Proguard rimuoverà tutti gli usi del metodo vuoto - In effetti, nella build di rilascio verranno rimossi tutti i messaggi di debug.

Modifica:

Pensandoci a livello di libreria (sto lavorando sulla mappatura della libreria J2ME), probabilmente ho trovato una soluzione migliore.

public class Log {
  private static boolean showDebug;

  public static void debug(final String message) {
    if (showDebug) {
      System.out.println(message);
    }
  }

  public static void setShowDebug(final boolean show) {
    showDebug = show;
  }
}

In questo modo lo sviluppatore finale può abilitare i livelli di registro all'interno della libreria a cui è interessato. Se nulla sarà abilitato, tutto il codice di registrazione verrà rimosso nell'offuscamento del prodotto finale. Dolce :)

/ JaanusSiim

Altri suggerimenti

MicroLog è una scommessa sicura. È una piccola libreria di registrazione per Java ME (J2ME) come Log4j. Supporta la registrazione su console, file, RecordStore, Canvas, Modulo, Bluetooth, una porta seriale (Bluetooth, IR, USB), Socket (incl. SSL), UDP, Syslog, MMS, SMS, e-mail o Amazon S3 .

http://sourceforge.net/projects/microlog/

È possibile utilizzare -assumenosideeffects in proguard per rimuovere completamente la classe di registrazione:

-assumenosideeffects public class logger.Logger {*;}

Invece di dover preelaborare.

I telefoni Series60 e UIQ che hanno una macchina virtuale Sun modificata da Symbian hanno il reindirizzamento dell'output standard.

Non solo puoi catturare System.out ma anche Throwable.printStackTrace () funziona.

Sui primi portatili, è necessario scrivere un'applicazione C ++ che si agganci al processo del server di libreria standard. Symbian ha prodotto l'applicazione Redirector in grado di acquisire l'output standard della VM in una console o in un file.

Sui telefoni più recenti, un "reindirizzamento: //" È stato introdotto il protocollo GCF in grado di leggere l'output standard della VM in un byte Java [] o in un oggetto String (si vorrebbe farlo in un MIDlet separato) e l'applicazione Redirector è stata riscritta in Java.

Sulla nuovissima VM J9 utilizzata nei telefoni Series60 3rd Edition Feature Pack 2 (e successivi), potrebbe essere necessario provare " redirect: // test " invece.

Ho usato MIDPLogger a un livello accettabile in un'applicazione di produzione , anche se ho scoperto che ha più utilizzo dopo l'integrazione nell'applicazione piuttosto che come un altro Midlet nella suite o così via. Ho anche trovato MicroLog ma non l'ho usato per nessun dettaglio.

Ho scritto un ottimizzatore bytecode e, a causa del formato dei file di classe, puoi puntare alla codifica UTF di classname & amp; funzione che ti consente di generare log con MyClass.someFunc () (puoi elaborare la firma se vuoi ottenere i tipi) che ti permette di fare qualcosa come il debug in stile C usando LINE & amp; FILE macro.

L'uso della compilazione condizionale della classe logger non risolve il problema della rimozione completa delle istruzioni di registrazione, poiché molto spesso si registra più di una semplice stringa. Ricercherai i valori delle variabili e poi li assemblerai in stringhe, ad es. Qualunque sialog.log (" Loaded " + someclass.size () + " foos ").

Ora, se si esclude solo il corpo di qualunqueLog.log (come mostrato nella soluzione accettata), si lascerà comunque molto codice non necessario, inclusa la concatenazione di stringhe (e quindi una creazione di StringBuffer). Ecco perché è meglio usare uno strumento di post-elaborazione del codice byte come proguard (già menzionato). -Assumenosideeffects di Proguard consentirà al suo ottimizzatore di rimuovere non solo le istruzioni di registrazione ma anche tutto il codice i cui risultati verrebbero utilizzati solo dalla chiamata di registrazione.

Il framework LWUIT di J2ME fornisce il modulo di registrazione che può contenere un registro dell'istruzione al suo interno. Puoi aggiungere il registro in ogni posto che ritieni possa generare l'eccezione.

Esempio: Log.getInstance (). showLog (); Aggiungendo la riga sopra è possibile tenere traccia della registrazione nei dispositivi J2ME.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top