【问题标题】:App cannot build when using ProGuard in Android Studio在 Android Studio 中使用 ProGuard 时无法构建应用
【发布时间】:2015-06-12 14:51:23
【问题描述】:

我正在使用最新版本的 Android Studio,并且我在Android Studio 中通过 ProGuard 对我的项目进行了混淆

Build.gradle的内容如:

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

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

警告图片:see warning

我该如何解决这个问题?

【问题讨论】:

    标签: android deobfuscation android-proguard


    【解决方案1】:

    简短的回答

    如果您完全确定您的应用在其他构建类型(调试)下可以按预期工作,则通过将以下内容添加到您的 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.** { *; }

    【讨论】:

    • tnnnnnnnnnnnnnnnnnnnnx
    猜你喜欢
    • 2015-08-28
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多