1

Android Studio の最新バージョンを使用しており、 ProGuardでプロジェクトを難読化しました。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.KXmlParser。以下に示すように、 SvgToPath.javaKXmlParserでのみ使用されます。

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);
            }
    }
    ...
}

これにより、失敗する2つの潜在的な理由のいずれかが生じると思います。

  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 に答える