在Android Studio中使用ProGuard时无法构建应用程序

das*_*oli 1 android deobfuscation android-proguard

我正在使用Android Studio的持续版本,我已经通过ProGuard对我的项目进行了模糊处理.Android Studio

这样的内容Build.gradle:

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
Run Code Online (Sandbox Code Playgroud)

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

警告图片:见警告

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

Jam*_*mie 7

简短的回答

如果您完全确定您的应用程序与其他构建类型(调试)一样正常工作,那么通过将以下内容添加到您的proguard-rules.pro文件中来禁止警告

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


答案很长

警告说它无法找到引用的类org.kxml2.io.KXmlParser.KXmlParser仅在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);
            }
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

  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.** { *; }