Proguard не работает, когда цель сборки установлена ​​на 16, но компилируется на уровне API 17

Я могу отладить и запустить мое приложение нормально на 4.1.2 (API 16) и на 4.2.2 (API 17). Если я попытаюсь экспортировать приложение для производства, когда для сборки будет установлено значение 17, оно будет работать нормально, но если я снизлю целевой показатель до 17, я получу несколько ошибок, основной из которых будет

Предупреждение: com.google.android.gms.common.images.a: невозможно найти ссылочный метод 'android.graphics.drawable.Drawable[] getCompoundDrawablesRelative()' в классе android.widget.TextView

Не уверен, почему он выбрасывает эту ошибку или почему он работает для одного уровня API, но не для другого?

Вот мой конфигурационный файл proguard

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

-keepclassmembers public class org.springframework {
    public *;
}

-dontwarn com.amazonaws.**
-dontwarn com.fasterxml.**
-dontwarn org.springframework.**
-dontwarn com.emilsjolander.**



-keep class com.amazonaws.**                            { *; }
-keep class org.springframework.**                      { *; }
-keep class com.fasterxml.**                            { *; }
-keep class com.facebook.**                             { *; }

-keep class com.emilsjolander.** { *; } 


-keepnames class * implements java.io.Serializable
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    !static !transient <fields>;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}



-keep class * extends java.util.ListResourceBundle {
    protected Object[][] getContents();
}

-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
    public static final *** NULL;
}

-keepnames @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class * {
    @com.google.android.gms.common.annotation.KeepName *;
}

-keepnames class * implements android.os.Parcelable {
    public static final ** CREATOR;
}

1 ответ

Описанный метод не существует в более ранних версиях Android. ProGuard предупреждает о возможных несоответствиях в приложении. На практике это нормально; библиотека GMS правильно обрабатывает версии. Вы можете сказать ProGuard продолжить:

-dontwarn android.widget.TextView
Другие вопросы по тегам