web-dev-qa-db-ja.com

プロガードでは、クラスのメソッド名のセットを保持する方法は?

Androidアプリケーションを難読化するためにproguardを使用しています。 Androidアプリケーションには、完全修飾Javaメソッドへのコールバックを行うネイティブコードが含まれています。これらのクラスとそのメソッドの名前を難読化しないようにする必要があります。以下はクラス名を適切に保持しますが、メソッド名は保持しません。

-keep public class com.me.dontobf.*
-keepnames public class com.me.dontobf.*
24
ab11

ネイティブメソッドの場合: ProGuardマニュアル>例>ネイティブメソッドの処理

# note that <methods> means any method
-keepclasseswithmembernames,includedescriptorclasses class * {
    native <methods>;
}

この場合、コールバックメソッドの場合: ProGuardマニュアル>例>コールバックメソッドの処理

-keep class mypackage.MyCallbackClass {
    void myCallbackMethod(Java.lang.String);
}

または、たとえば、すべてのパブリックメソッドがコールバックメソッドである可能性がある場合:

-keep class mypackage.MyCallbackClass {
    public <methods>;
}

また、メソッド記述子で発生するすべてのプログラムクラスを保持する必要もあります。

56
Eric Lafortune

試してください:

-keepclasseswithmembernames class * {
    native <methods>;
}

ProGuardマニュアルから: http://proguard.sourceforge.net/manual/examples.html#native

2
Marc Bernstein