Ошибка сборки proguard-android-optimize

я пытаюсь отключить все журналы

-assumenosideeffects class android.util.Log {

public static *** v(...);
public static *** i(...);
public static *** w(...);
public static *** d(...);
public static *** e(...);

}

 -assumenosideeffects class android.util.Log { *; }

но когда я установил

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

Ошибка сборки

    UNEXPECTED TOP-LEVEL EXCEPTION:
Error:java.lang.InterruptedException: Too many errors
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:600)
... 4 more
Error:Execution failed for task ':app:transformClassesWithDexForDebug'.

com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command'/Library/Java/JavaVirtualMachines/jdk1.8.0_66. jdk/Contents/Home/bin/java'' завершено с ненулевым значением выхода 2

с этим proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' его сборка, но логи видны

Рекомендуемое решение — перекомпилировать класс из исходного кода с использованием актуального компилятора и без указания каких-либо параметров типа «-target». Следствием игнорирования этого предупреждения является то, что отражающие операции над этим классом будут неправильно указывать, что он не является внутренним классом.

Неперехваченная ошибка перевода: com.android.dx.cf.code.SimException: несоответствие типа локальной переменной: попытка установить или получить доступ к значению типа java.lang.Object, используя локальную переменную типа int. Это характерно для инструментов преобразования .class, которые игнорируют информацию о локальных переменных.


person andro    schedule 03.02.2016    source источник
comment
может быть и другая ошибка. Пожалуйста, проверьте снова.   -  person Mustansar Saeed    schedule 03.02.2016
comment
check edit qus Предупреждение: Игнорирование атрибута InnerClasses для анонимного внутреннего класса (android.support.v7.widget.by), который не имеет связанного атрибута EnclosingMethod. этот тип ошибки возникает с другим именем пакета, например (android.support.v7.widget.bx),   -  person andro    schedule 03.02.2016
comment
это показывает, что вы должны сохранить собственные ссылки. Пожалуйста, выложите файл proguard   -  person Mustansar Saeed    schedule 03.02.2016
comment
-keepparameternames -renamesourcefileattribute SourceFile -keepattributes Exceptions,InnerClasses,Signature,Deprecated,LineNumberTable,SourceFile -keepattributes EnclosingMethod ###remove log#### -assumenosideeffects class android.util.Log { public static *** v(...) ; общедоступный статический *** я (...); общедоступный статический *** w(...); публичный статический *** d(...); публичный статический *** e(...); }   -  person andro    schedule 03.02.2016
comment
скомпилировать дерево файлов (каталог: 'libs', включить: ['.jar'], исключить: 'android-support-.jar')   -  person andro    schedule 03.02.2016
comment
У вас неправильный файл proguard. Выкладываю правильный файл, в котором нативные методы нужно оставить как есть.   -  person Mustansar Saeed    schedule 03.02.2016
comment
Давайте продолжим обсуждение в чате.   -  person andro    schedule 03.02.2016


Ответы (2)


Пожалуйста, используйте следующий proguard для справки, так как во время оптимизации нативные методы должны оставаться такими, какие они есть.

-dontusemixedcaseclassnames
-optimizationpasses 5
-allowaccessmodification
-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.preference.Preference
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.app.Fragment
# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames class * {
 native <methods>;
}
-keep public class * extends android.view.View {
 public <init>(android.content.Context);
 public <init>(android.content.Context, android.util.AttributeSet);
 public <init>(android.content.Context, android.util.AttributeSet, int);
 public void set*(...);
}
-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);
}
# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers enum * {
 public static **[] values();
 public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
 public static final android.os.Parcelable$Creator *;
}

надеюсь это поможет.

person Mustansar Saeed    schedule 03.02.2016
comment
Это очень популярная, но неправильная конфигурация ProGuard. AAPT автоматически создает правила для сохранения классов, упомянутых в манифесте, поэтому действия не будут удалены. А вот этот конфиг, например, сохраняет даже абстрактные активности. - person Miha_x64; 21.11.2017

Вы можете попытаться создать фиктивный класс Log в пакете com.example.mylog с NOPs для v,i,w,d,e, а затем использовать это переназначение proguard.

android.util.Log -> com.example.mylog.Log

с опцией -applymapping

person Radu Ionescu    schedule 03.02.2016