运行Proguard后,矢量绘图损坏或丢失

时间:2016-07-14 12:51:17

标签: android performance android-studio android-vectordrawable

我正在申请使用下面提到的矢量绘图的应用程序

source

这在调试版本中工作得非常好,但在发布版本中运行proguard后它已经坏了。

gradle文件中的设计和appcompat库版本如下所述。

 <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>

编译和构建版本

    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:design:23.4.0'

并支持我在gradle中完成了跟踪的向量。

   compileSdkVersion 23
  buildToolsVersion = "23.0.1"

在设计和支持库的proguard我已经完成了这个

   defaultConfig {

    generatedDensities = []

   }

   aaptOptions {
    additionalParameters "--no-version-vectors"
  }

这个问题甚至在这里开启

https://code.google.com/p/android/issues/detail?id=209558#makechanges

任何帮助将不胜感激。谢谢。

3 个答案:

答案 0 :(得分:1)

就我而言,这一行帮助我: -keepattributes LocalVariableTable

答案 1 :(得分:0)

您好我自己解决了这个问题。实际上我必须在proguard文件中添加以下内容

-keep class VectorPlay.** { *; }
-keep interface VectorPlay.**
-keep enum VectorPlay.**

它有效。 感谢大家的帮助。

答案 2 :(得分:0)

我将以下代码添加到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#makechanges