Proguard和HashMap
我正在为android开发一些apis作为库项目,我想将它们导出为混淆jar。Proguard和HashMap <String,MyObject>
我有不同的类,但唯一的公共实体有:
MyInterface
:接口列出一些方法,用户将必须实现;MyUtilities
:有一些静态方法的类;一个单例(用一个INSTANCE实现为enum);MyObject
:实现我需要处理的特定对象的类;
我是新的混淆,所以我遵循一些教程和阅读android/proguard文档。
我成功地从我的项目创建了一个jar,并在外部应用程序中使用它。 我也成功地混淆了所有非公开课(所以除了上面提到的每个课程),它仍然继续工作。
现在我的问题:
一个在MyInterface
specifed方法是
public void getObject(HashMap<String, MyObject>);
混淆之前用户可以添加implements MyInterface
到他的活动/类(自动)生成的执行界面方法,特别是:
@Override
public void getObject(HashMap<String, MyObject> hashmap){
// User implementation
}
后已经模糊罐子,当我添加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>;
}
完美,谷歌搜索“proguard类型擦除”我在这里阅读它:http://sourceforge.net/p/proguard/bugs/406/ – 2013-04-09 08:40:09
是的,这是它。 – etienne 2013-04-09 08:41:11
这与Java中的类型擦除有关,我猜? http://en.wikipedia.org/wiki/Generics_in_Java#Problems_with_type_erasure – etienne 2013-04-09 08:25:04