Поврежденные или отсутствующие векторные элементы рисования после запуска Proguard
Я работаю над приложением, в котором я использую векторную графику, указанную ниже
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="100dp"
android:height="100dp"
android:viewportHeight="100"
android:viewportWidth="100">
<path
android:name="curve_left_atrium"
android:pathData="M4,48C4,22.6,24.6,2,50,2"
android:strokeColor="#eb273f"
android:strokeWidth="4"
android:trimPathEnd="0" />
<path
android:name="curve_right_atrium"
android:pathData="M96,48C96,22.6,75.4,2,50,2"
android:strokeColor="#eb273f"
android:strokeWidth="4"
android:trimPathEnd="0" />
</vector>
Это работает довольно хорошо в отладочной сборке, но не работает после запуска proguard в сборке релиза.
Версия библиотек дизайна и appcompat в файле Gradle упомянута ниже.
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
Компиляция и сборка версий
compileSdkVersion 23
buildToolsVersion = "23.0.1"
и для поддержки вектора я сделал следующее в Gradle.
defaultConfig {
generatedDensities = []
}
aaptOptions {
additionalParameters "--no-version-vectors"
}
и в Proguard для проектирования и поддержки библиотеки я сделал это
-dontwarn android.support.v7.**
-keep class android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }
# support design
-dontwarn android.support.design.**
-keep class android.support.design.** { *; }
-keep interface android.support.design.** { *; }
-keep public class android.support.design.R$* { *; }
-dontwarn android.support.**
Эта проблема даже открыта здесь
https://code.google.com/p/android/issues/detail?id=209558
Любая помощь будет оценена. Спасибо заранее.
3 ответа
В моем случае эта строка поможет мне:-keepattributes LocalVariableTable
Здравствуйте, я решил эту проблему сам. На самом деле я должен был добавить следующее в файл proguard
-keep class VectorPlay.** { *; }
-keep interface VectorPlay.**
-keep enum VectorPlay.**
и это сработало. Спасибо всем за помощь.
Я добавил следующий код в файл dexguard для решения проблемы:
# keep setters in VectorDrawables so that animations can still work.
-keepclassmembers class android.support.graphics.drawable.VectorDrawableCompat$* {
void set*(***);
*** get*();
}
-keepresourcexmlattributenames vector/**
(частично скопировано с https://code.google.com/p/android/issues/detail?id=209558)