Proguard не удаляет журнал звонков - PullRequest
5 голосов
/ 18 февраля 2012

При компиляции моего приложения с использованием Ant я вижу подробный вывод Proguard, и у меня есть настройки для удаления операторов журнала (см. Ниже), но когда я запускаю релиз apk, все операторы журнала, которые я пытался удалить, находятся там.

У меня есть 2 проекта, каждый из которых включает общий проект.Каждый из 2 основных проектов и общий проект имеют файл proguard.cfg, каждый из которых содержит фрагмент для удаления операторов журнала.

Есть что-то, чего мне не хватает?

** Всемои записи журнала: Log.d (...)

proguard.cfg

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-dontobfuscate
-forceprocessing
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** v(...);
}

Ответы [ 3 ]

3 голосов
/ 23 марта 2016

Здесь с вашим файлом proguard все в порядке, но есть деталь, которую вы можете пропустить.

В вашем файле Gradle у вас, вероятно, есть что-то вроде этого:

buildTypes {
    release {
        minifyEnabled true

        proguardFiles getDefaultProguardFile('proguard-android.txt), 'proguard-rules.pro'
    }
}

Отметьте getDefaultProguardFile('proguard-android'), поэтому, если вы намереваетесь оптимизировать его, вы должны изменить его на getDefaultProguardFile('proguard-android-optimize.txt').

Я потратил некоторое время, чтобы понять это, увидел ваш вопрос, но все еще не смог удалить мои Log вызовы в моем коде. Итак, я нашел эту ссылку, которая объясняет, что необходимо перейти на файл оптимизации, чтобы proguard мог оптимизировать.

https://developer.android.com/tools/help/proguard.html#enabling-gradle

1 голос
/ 14 мая 2012

Вы не можете использовать assumenosideeffects без оптимизации Proguard.

0 голосов
/ 18 февраля 2012

Вместо того, чтобы удалять или комментировать все ваши сообщения журнала, используя pro-guard, вы можете сделать что-то подобное. Создайте служебный класс, который в основном является оболочкой для системы регистрации Android

public class Util{

    public static boolean showLogs = true;
    public static String myTag = 'My Tag';

    public static void logD(String message){
        if (Util.showLogs)      
            Log.d(myTag, message);
    }
}

До Я компилирую свое приложение для распространения, я просто звоню showLogs = true;, а затем все сообщения журнала подавляются

Вы можете легко расширить этот класс, чтобы он мог указывать тег и создавать больше, чем просто сообщения отладки.

...