Поврежденные или отсутствующие векторные элементы рисования после запуска 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)

Другие вопросы по тегам