相关疑难解决方法(0)

Smack 4.1推荐的ProGuard规则是什么?

在构建Android版本apk时,Smack 4.1有哪些适当的ProGuard规则?

目前,我正在使用来自aSmack github存储库上的README.asmack文件的aSmack 4.0.x中的规则,该存档过时(引用旧类名,用于4.0.x).我找不到任何适用于4.1.x的正确程序规则的参考,是否有人可以解释这一点?

proguard smack

10
推荐指数
1
解决办法
1404
查看次数

Field.getGenericType()返回java.lang.Class的实例而不是Type

我遇到了关于proguard和一些反思的问题.

Myclass.java

package not.obfuscated
class MyClass {
    public List<InnerClass> childs;
}
Run Code Online (Sandbox Code Playgroud)

InnerClass.java

package not.obfuscated
class InnerClass {
    //.somestuff
}
Run Code Online (Sandbox Code Playgroud)

在proguard.cfg里面我有:

-keep class not.obfuscated.** {*;}
Run Code Online (Sandbox Code Playgroud)

在另一个类中,我设法获取MyClass.childs字段的"Field"实例,然后尝试获取getGenericType以确定列表括号内的哪个类(<InnerClass>)

出于日志记录的目的,我做了以下Log.d代码(字段是表示MyClass.childs的Field实例):

Log.d("FIELD", field.getName()+" generic type: "+ field.getGenericType()+ " class: "+ field.getGenericType().getClass().getName());
Run Code Online (Sandbox Code Playgroud)

输出如下(第2行):

LogCat输出

如您所见,field.getGenericType.toString()可能是正确的,但是当我要求该类时,它返回java.lang.Class.事实上,当我这样做时,事后几行:

ParameterizedType listType = (ParameterizedType) field.getGenericType();
Run Code Online (Sandbox Code Playgroud)

我收到一个ClassCastException:

java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
Run Code Online (Sandbox Code Playgroud)

我坚信这是由于proguard,但据我所知,我已经排除了not.obfuscated包中的所有类.最后一次尝试我也插入了行-keep类java.lang.List(显然没有发生).

java generics reflection android proguard

3
推荐指数
1
解决办法
1227
查看次数

标签 统计

proguard ×2

android ×1

generics ×1

java ×1

reflection ×1

smack ×1