ライブラリ プロジェクトとして Android 用の API を開発していますが、それらを難読化された jar としてエクスポートしたいと考えています。
私はさまざまなクラスを持っていますが、唯一のパブリックエンティティは次のとおりです。
MyInterface
: ユーザーが実装する必要があるいくつかのメソッドをリストするインターフェイス。MyUtilities
: いくつかの静的メソッドを持つクラス。MySingleton
: シングルトン (単一のインスタンスを持つ列挙型として実装);MyObject
: 処理する必要がある特定のオブジェクトを実装するクラス。
私は難読化を初めて使用するので、いくつかのチュートリアルに従い、android/proguard ドキュメントを読みました。
プロジェクトから jar を正常に作成し、それを外部アプリケーションで使用しました。また、すべての非公開クラス (上記以外のすべてのクラス) を難読化することに成功しましたが、引き続き動作します。
今私の問題:
で指定された方法の 1 つはMyInterface
、
public void getObject(HashMap<String, MyObject>);
難読化の前に、ユーザーは自分のアクティビティ/クラスに追加implements MyInterface
し、(自動) インターフェイス メソッドの実装を生成できます。特に:
@Override
public void getObject(HashMap<String, MyObject> hashmap){
// User implementation
}
jar を難読化した後implements MyInterface
、ユーザー アクティビティに追加してメソッドの実装を自動生成すると、次のようになります。
@Override
public void getObject(HashMap hashmap){
// User implementation
}
したがって、HashMap タイプはありません。正直なところ、なぜこれが起こるのかわかりません.. と の両方が保持されているため、 HashMap タイプも表示されると予想しString
てMyObject
いました。
HashMap タイプがなくても機能しますが、キャストする必要がありますHasmap<String, MyObject>
これは私のproguard confファイルです(proguard guiツールによって生成されます):
-injars inAPIs.jar
-outjars 'obfAPIs.jar'
-libraryjars /My/android/SDK/Path/platforms/android-15/android.jar
-libraryjars /My/android/SDK/Path/tools/support/annotations.jar
-libraryjars /My/android/SDK/Path/add-ons/addon-google_apis-google-15/libs/effects.jar
-libraryjars /My/android/SDK/Path/add-ons/addon-google_apis-google-15/libs/maps.jar
-libraryjars /My/android/SDK/Path/add-ons/addon-google_apis-google-15/libs/usb.jar
-overloadaggressively
-keep class my.package.MyObject {
public <fields>;
public <methods>;
}
-keep public class my.package.MyUtilities {
public <fields>;
public <methods>;
}
-keep interface my.package.MyInteface {
public <fields>;
public <methods>;
}
-keep public class my.package.MySingleton {
public <fields>;
public <methods>;
}
-keep,allowshrinking public class my.package.MyInterface {
public <fields>;
public <methods>;
}
-keep,allowshrinking public class my.package.MyObject
-keep,allowshrinking public class my.package.MyUtils
-keep,allowshrinking public enum my.package.MySingleton {
public <fields>;
public <methods>;
}