Proguard和HashMap <string,myobject =“”> </string,>

时间:2013-04-09 08:21:57

标签: android jar hashmap obfuscation proguard

我正在开发一些api for android作为一个库项目,我想将它们导出为混淆的jar。

我有各种类,但唯一的公共实体是:

  • MyInterface:列出用户必须实施的一些方法的界面;

  • MyUtilities:包含一些静态方法的类;

  • MySingleton:一个Singleton(实现为具有单个INSTANCE的枚举);

  • MyObject:实现我需要处理的特定对象的类;

我是Obfuscation的新手,所以我按照一些教程阅读了android / proguard文档。

我从项目中成功创建了一个jar并在外部应用程序中使用它。 我也成功地模糊了所有非公开课(所以除了上面提到的每个课程),它仍然继续工作。


现在我的问题:

MyInterface中指定的方法之一是

public void getObject(HashMap<String, MyObject>);

在混淆之前,用户可以将implements MyInterface添加到他的activity / class中,并且(auto)生成接口方法的实现,特别是:

@Override
public void getObject(HashMap<String, MyObject> hashmap){
  // User implementation
}

在对jar进行模糊处理后,当我将implements MyInterface添加到用户活动并自动生成方法实现时,我得到:

@Override
public void getObject(HashMap hashmap){
  // User implementation
}

所以没有HashMap类型。老实说,我不知道为什么会这样。 我希望也能看到HashMap类型,因为保留了StringMyObject

它仍然可以在没有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>;
}

1 个答案:

答案 0 :(得分:4)

根据Proguard docs,您可能需要添加以下选项:

-keepattributes Signature

引用他们的文档:

  

“签名”属性需要能够访问通用   在JDK 5.0及更高版本中进行编译时的类型。