gpt4 book ai didi

android - Proguard 和 HashMap

转载 作者:行者123 更新时间:2023-11-29 16:08:21 29 4
gpt4 key购买 nike

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

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

  • MyInterface : 一个接口(interface),列出了用户必须实现的一些方法;

  • MyUtilities : 一个带有一些静态方法的类;

  • MySingleton : 单例(作为具有单个实例的枚举实现);

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

我是混淆的新手,所以我遵循了一些教程并阅读了 android/proguard 文档。

我成功地从我的项目中创建了一个 jar,并在外部应用程序中使用了它。我还成功地混淆了所有非公共(public)类(因此除上述之外的每个类)并且它仍然继续工作。


现在我的问题:

MyInterface 中指定的方法之一是

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

在混淆之前,用户可以添加 implements MyInterface到他的 Activity/类并(自动)生成接口(interface)方法的实现,特别是:

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

混淆 jar 后,当我添加 implements MyInterface到用户 Activity 并自动生成方法实现,我得到:

@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>;
}

最佳答案

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

-keepattributes Signature

引用他们的文档:

The "Signature" attribute is required to be able to access generic types when compiling in JDK 5.0 and higher.

关于android - Proguard 和 HashMap<String, MyObject>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15896832/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com