Приложение не может быть создано при использовании ProGuard в Android Studio

Я использую последнюю версию Android Studio и обфусцировал свой проект с помощью ProGuard в Android Studio.

Содержание Build.gradleтакое как это:

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

но при запуске проекта сборки возникает такая ошибка см. ошибку

изображение предупреждения: см. предупреждение

Как я могу это исправить?


person dashakhe.goli    schedule 12.06.2015    source источник


Ответы (1)


Краткий ответ

Если вы полностью уверены, что ваше приложение работает должным образом с другими типами сборки (отладка), отключите предупреждение, добавив следующее в файл 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);
            }
    }
    ...
}

Я думаю, что это приводит к одной из двух возможных причин отказа:

  1. Используемая вами библиотека не включает org.kxml2.io.KXmlParser, поэтому вам придется включить ее самостоятельно.
  2. Proguard взламывает com.github.siyamed.shapeimageview или org.kxml2.io.KXmlParser, запутывая их код.

Если вы считаете, что Proguard нарушает ваши сборки, рассмотрите следующее.

В конце концов, библиотеки, которые вы и большинство людей используете, почти всегда имеют открытый исходный код. Запутывание открытого исходного кода не дает никаких преимуществ, поскольку любой потенциальный злоумышленник может просто найти исходный код в Интернете.

Вы можете сохранить классы (предотвратив их запутывание Proguard), добавив в файл proguard-rules.pro следующее:

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

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

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

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

person Jamie    schedule 12.06.2015
comment
тнннннннннннннннх ‹3 - person dashakhe.goli; 12.06.2015