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

时间:2015-06-12 14:51:23

标签: android deobfuscation android-proguard

我正在使用Android Studio的持续版本,我在Android Studio中通过 ProGuard 模糊我的项目。

Build.gradle的内容,例如:

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

但是在启动构建项目时,就是这样的错误 see error

警告图片:see warning

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:7)

简答

如果您完全确定您的应用程序与其他构建类型(调试)一样正常工作,则通过将以下内容添加到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
  3. 如果您认为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.** { *; }