1

我使用的是 Android Studio 的最新版本并且我在.Android Studio

Build.gradle比如这样的内容:

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

但是当启动构建项目时,会出现类似的错误, 请参阅错误

警告图片:见警告

我怎样才能解决这个问题?

4

1 回答 1

8

简短的回答

如果您完全确定您的应用程序可以与其他构建类型(调试)一起按预期工作,则通过将以下内容添加到您的proguard-rules.pro文件来抑制警告

-dontwarn com.github.siyamed.shapeimageview.**


长答案

警告说它找不到引用的类org.kxml2.io.KXmlParserKXmlParser仅在SvgToPath.java中使用,如下图所示:

import org.kxml2.io.KXmlParser;
...
public class SvgToPath {
    ...
    private static PathInfo parse(InputStream in, boolean ignoreDefs, float dpi) {
            try {
                XmlPullParser xr = new KXmlParser();
                ...
            } catch (Exception e) {
                Log.w(TAG, "Parse error: " + e);
                throw new RuntimeException(e);
            }
    }
    ...
}

我认为这会导致它失败的两个潜在原因之一:

  1. 您使用的库不包含org.kxml2.io.KXmlParser,因此您必须自己包含它
  2. Proguard 正在破坏com.github.siyamed.shapeimagevieworg.kxml2.io.KXmlParser混淆他们的代码。

如果您认为 Proguard 正在破坏您的构建,请考虑以下几点

归根结底,您和大多数人使用的库几乎总是开源的。混淆开源代码没有任何好处,因为任何潜在的攻击者都可以在线查找源代码。

proguard-rules.pro您可以通过将以下内容添加到文件中来保留类(阻止它们被 Proguard 混淆) :

-keep class com.github.siyamed.shapeimageview.** { *; }

-keep interface com.github.siyamed.shapeimageview.** { *; }

-keep class org.kxml2.io.KXmlParser.** { *; }

-keep interface org.kxml2.io.KXmlParser.** { *; }

于 2015-06-12T15:00:48.557 回答