Pergunta

existem

Que soluções madeireiras para J2ME?

Eu estou interessado especificamente na exclusão facilmente o registo para a versão "release", para ter um pacote & memória menor pegada.

Foi útil?

Solução

Se você estiver usando pré-processamento e ofuscação com Proguard, então você pode ter uma classe de log simples.

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

Ou fazer login onde quer que você precisa. Agora, se a propriedade release.build é definido como verdadeiro, este código será comentada, que irá resultar em um método vazio. Proguard irá remover todos os usos do método vazio -. Em compilação de lançamento efeito terá todas as mensagens de depuração removidos

Editar:

Thinking sobre isso no nível de biblioteca (Eu estou trabalhando em biblioteca J2ME mapeamento) Eu, provavelmente, encontrado uma solução melhor.

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;
  }
}

Este desenvolvedor fim forma pode permitir níveis de log dentro da biblioteca que ele / ela está interessado. Se nada será ativado, todo o código de registro será removido em ofuscação produto final. Sweet:)

/ JaanusSiim

Outras dicas

Microlog é certo aposta. É uma biblioteca logging pequeno para Java ME (J2ME) como Log4j. Tem suporte para log para console, arquivo, RecordStore, Lona, Form, Bluetooth, uma porta serial (Bluetooth, IR, USB), Socket (SSL incl), UDP, Syslog, MMS, SMS, e-mail ou para o Amazon S3 .

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

Você pode usar os -assumenosideaffects em proguard para remover completley sua classe de log:

-assumenosideeffects public class logger.Logger {*;}

Ao invés de ter que pré-processar.

O telefone Series60 e UIQ que tem uma máquina virtual Sun modificada pela Symbian em si tem o redirecionamento de saída padrão.

Não só você pode capturar System.out mas Throwable.printStackTrace () também funciona.

No início dos aparelhos, você precisa escrever um aplicativo C ++ que ganchos para o processo do servidor biblioteca padrão. Symbian produzido a aplicação Redirector que poderia capturar a saída padrão VM para um console ou um arquivo.

Em aparelhos mais novos, um "redirecionamento: //" protocolo GCF foi introduzido que podia ler a saída padrão VM em um byte Java [] ou objeto String (você iria querer fazer isso em um MIDlet em separado) ea aplicação Redirector foi reescrito em Java.

Por mais novo J9 VM usado em Recurso Series60 3rd Edition Pacote de 2 aparelhos (e posteriores), você pode precisar de tentar "redirecionamento: // test". Invés

Eu usei MIDPLogger para algum nível aceitável em um aplicativo de produção , embora eu descobri que tem mais uso após integração no aplicativo, em vez de como um outro Midlet em suite ou assim por diante. Eu também achei Microlog , mas não tê-lo usado a qualquer grande detalhe.

Eu escrevi um otimizador de bytecode, e por causa do formato de arquivos de classe que você pode apontar para a codificação UTF de classname & função que lhe permite logs de saída com MyClass.someFunc () (você pode processar a assinatura se você quiser obter os tipos) que lhe permite fazer algo como o debug estilo C usando linha e arquivo macros.

Usando a compilação condicional da classe logger não resolve o problema de remover completamente as declarações de registo, porque você vai muitas vezes registrar mais de uma corda simples. Você vai olhar para cima os valores das variáveis ??e depois montá-los em cordas, por exemplo .: WhateverLog.log ( "carregado" + someclass.size () + "foos").

Agora, se você só deixar de fora o corpo de WhateverLog.log (como mostrado na solução aceita), você ainda vai deixar um monte de código desnecessário em, incluindo concatenação de String (e, portanto, uma criação StringBuffer). É por isso que é melhor usar uma ferramenta de pós-processamento código byte como proguard (já mencionado). -assumenosideeffects de Proguard permitirá que seu otimizador para remover não só as declarações de registro, mas também todo o código cujos resultados só seria usado pela chamada de registro.

quadro LWUIT do J2ME fornecer a forma de registro que pode ter um registo de declaração dentro dela. Você pode adicionar o registro em cada lugar que você acha que pode gerar a exceção.

Exemplo: Log.getInstance () showlog ();. Ao adicionar a linha acima, você pode capaz de rastrear o registro nos dispositivos J2ME.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top