2012-02-17 1 views
4

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

У меня есть 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(...); 
} 
+0

Просто дважды проверено, так как вы меня беспокоили. Я определенно не вижу ничего из моего Log.d o/p для сборки релиза Ant. Я фильтрую Logcat o/p своим PID, и я просто вижу dalvik GC_CONCUURRENT stuff – NickT

+0

У меня есть эта проблема. Я запускаю Proguard 4.4 – ron

ответ

0

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

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;, а затем все сообщения журнала подавляются

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

+0

Я должен не согласиться здесь. Я полагаюсь на идентичную инструкцию forenosideeffects, чтобы удалить строки журнала из моего проекта, и это работает - я не получаю log o/p в сборках Ant-релизов. Единственные различия между моим proguard.cfg и этим - у меня есть только один проект, и я не заявляю -dontobfuscate или -forceprocessing – NickT

+0

@NickT: Я удалил два элемента, которые вы упомянули, которых у вас нет в вашем proguard. cfg, но я все еще вижу записи журнала. Это стоило попробовать. – chris

+1

@slayton: в соответствии с Proguard docs «precenosideeffects» удалит вызовы методов, которые, как представляется, не имеют побочных эффектов, соответствующих спецификациям класса. http://proguard.sourceforge.net/index.html#manual/usage.html – chris

1

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

+0

оптимизация включена –

2

Здесь ваш файл 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

 Смежные вопросы

  • Нет связанных вопросов^_^