Czy powinienem komentować moje połączenia dziennika podczas tworzenia ostatecznego pakietu?

Mam aplikację, która używa wielu Log.d() LUB Log.e() wywołań do debugowania. Teraz chcę stworzyć mój ostateczny pakiet do wydania. Funkcja eksportu Androida z Eclipse wspomina, aby usunąć flagę "Debuggable" w manifeście, co zrobiłem. Czy powinienem również skomentować wszystkie wywołania Log w celu poprawy wydajności mojej aplikacji, czy te wywołania nie zrobią nic w pakiecie finalnej wersji bez debugowania ?

Author: Vasily Kabunov, 2011-02-10

4 answers

Podklasowałem klasę Log do klasy o nazwie Trace, która odzwierciedla metody w logu. Więc Namierzam.d (TAG,"blah"), a następnie w ślad.metoda d kod jest wykonywany tylko w oparciu o statyczną zmienną klasy końcowej o nazwie LOGGING_LEVEL, która ma poziomy 1-5 (brak, tylko błędy, błędy i ostrzeżenia, błędy i ostrzeżenia i informacje, i wszystko w tym debugowanie) . Podczas produkcji APK produkcji, Proguard usuwa cały kod, który nie jest używany w aplikacji, więc robi to za mnie.

Dla ja, logowanie jest zbyt ważne, aby usunąć je ze źródła, ale musi zostać usunięte z aplikacji produkcyjnej, ze względu na wydajność, bezpieczeństwo i własność intelektualną.

Ta struktura pozwala mi dodać o wiele więcej logowania do aplikacji, co sprawia, że problemy z debugowaniem są znacznie łatwiejsze, ale bez żadnego wpływu na Apk produkcji

public class Trace
{
    public static final int    NONE                         = 0;
    public static final int    ERRORS_ONLY                  = 1;
    public static final int    ERRORS_WARNINGS              = 2;
    public static final int    ERRORS_WARNINGS_INFO         = 3;
    public static final int    ERRORS_WARNINGS_INFO_DEBUG   = 4;

    private static final int          LOGGING_LEVEL   = ERRORS_ONLY;        // Errors + warnings + info + debug (default)

    public static void e(String tag, String msg)
    {
        if ( LOGGING_LEVEL >=1) Log.e(tag,msg);
    }

    public static void e(String tag, String msg, Exception e)
    {
        if ( LOGGING_LEVEL >=1) Log.e(tag,msg,e);
    }

    public static void w(String tag, String msg)
    {
        if ( LOGGING_LEVEL >=2) Log.w(tag, msg);
    }

    public static void i(String tag, String msg)
    {
        if ( LOGGING_LEVEL >=3) Log.i(tag,msg);
    }

    public static void d(String tag, String msg)
    {
        if ( LOGGING_LEVEL >=4) Log.d(tag, msg);
    }

}
 18
Author: Ollie C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-10 15:53:28

To zmusiło mnie do sprawdzenia mojego założenia, że log.d linie w kodzie w jakiś sposób nie pojawią się w podpisanym pliku apk bez flagi debuggable ustawionej w manifeście, myliłem się, nadal się pojawiają.

Szybkie wyszukiwanie na SO doprowadziło mnie do zaakceptowanej odpowiedzi na to pytanie: Usuń wszystkie wywołania logowania debugowania przed publikacją: czy są do tego narzędzia?

Działa bardzo dobrze i nie musisz zmieniać żadnego kodu.

 8
Author: NickT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:00:28

Od developer.android.com:

Wyłącz logowanie i debugowanie i wyczyść dane / pliki do wydania, ty powinien upewnić się, że debug udogodnienia są wyłączone i to debugowanie i inne niepotrzebne dane / Pliki to usunięto z projektu aplikacji.

Usuń Androida: debuggable= " true" atrybut z element manifestu. Usuń dziennik pliki, pliki kopii zapasowych i inne niepotrzebne pliki z aplikacji projekt. Sprawdź prywatne lub zastrzeżonych danych i usunąć je jako konieczne. Dezaktywuj wszelkie połączenia do logowania metody w kodzie źródłowym.

Źródło

 4
Author: Will Tate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-10 15:20:43

Usunąłbym kod logowania jak poniżej:

-assumenosideeffects class android.util.Log {
    public static boolean isLoggable(java.lang.String, int);
    public static int v(...);
    public static int i(...);
    public static int w(...);
    public static int d(...);
    public static int e(...);
    public static java.lang.String getStackTraceString(java.lang.Throwable);
}

-assumenosideeffects class java.lang.Exception {
    public void printStackTrace();
}

-assumenosideeffects class * implements org.slf4j.Logger {
    public void trace(...);
    public void debug(...);
    public void info(...);
    public void warn(...);
    public void error(...);
    public boolean isTraceEnabled(...);
    public boolean isDebugEnabled(...);
    public boolean isInfoEnabled(...);
    public boolean isWarnEnabled(...);
    public boolean isErrorEnabled(...);
}

W razie potrzeby kategorie error I warn mogą zostać zachowane. Ale upewnij się, że optymalizacja i zmniejszanie jest włączone dla kompilacji tylko wtedy usunięcie kodu jest skuteczne

 2
Author: Jeevaraj Dhanaraj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-13 00:49:57