1

ProGuard で難読化しようとしているかなり大きなアプリケーションがあります。Android サポート ライブラリ FragmentActivities を使用し、View、RelativeLayout、FrameLayout のいずれかを拡張する多数の複合ビューを備えています。

問題は、ProGuard が一部のビューを保持できないことです (その後ClassNotFoundException、それらが XML で参照されていることが分かります) 興味深いことに、欠落しているビューは 1 つの特定のパッケージに属しています (私のビューは 3 つまたは 4 つの異なるパッケージに分散しています)。明示的なルールを作成しても、これらのビューを保持することはできません。

アップデート

プロジェクトのクリーンアップ/再構築などに非常に関連していることが判明しました。

これまでの私の経験では、すべてのクラスを含む署名済みの apk を正しく取得する唯一の方法は次のとおりです。

  1. 自動プロジェクト構築を無効にする
  2. すべてのプロジェクトを消去 (手動)
  3. プロジェクトを手動でビルドし、
  4. 署名済み APK を生成する

自動ビルドを有効にするか、ビルド間でプロジェクトをクリーンアップしないと、結果の APK にランダムに不足しているクラスが含まれます。

私は何か間違ったことをしているのだろうか、それともあなたたちはこの問題や解決策を持っているのだろうか. また、プロガードのクリーニングなどに関するトリックも大歓迎です! 前もって感謝します。

古い質問

私のパッケージ階層:

Application: tv.nebular.funq
Views 1:  tv.nebular.funq.gui.*
Views 2:  tv.nebular.funq.apps.*
Views 3:  com.regaliz.gui.views.*
Views 4:  com.regaliz.custom.*

パッケージ (3) と (4) のビューは、私が問題を抱えているビューです。パッケージは異なりますが、異なるプロジェクトではありません。それは単一のプロジェクトです。

ビューに関する私のルール:

    -keep public class * extends android.view.View {
        public <init>(android.content.Context);
        public <init>(android.content.Context, android.util.AttributeSet);
        public <init>(android.content.Context, android.util.AttributeSet, int);
        public void set*(...);
    }

    -keepclasseswithmembers class * {
        public <init>(android.content.Context, android.util.AttributeSet);
    }

    -keepclasseswithmembers class * {
        public <init>(android.content.Context, android.util.AttributeSet, int);
    }

そして、欠落しているビューの特定のルール:

    # regaliz views

    -keep public class com.regaliz.gui.views.*

    -keepclassmembers class com.regaliz.gui.views.** { 
        public <init>(android.content.Context, android.util.AttributeSet);
    }

    # regaliz custom

    -keep public class com.regaliz.custom.FunqViewPager

    -keepclassmembers class com.regaliz.custom.FunqViewPager { 
        public <init>(android.content.Context, android.util.AttributeSet);
    }

しかし、これは無視されているようです。これらのパッケージのビューは常に欠落しています。明示的に宣言されたものでさえ。

更新: proguard-mapping.txt 出力ファイルを見ると、ビューが正しく保持されているはずですが、実際にはビューが欠落しています!

どんな助けでも大歓迎です!

4

0 に答える 0