Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以使用ProGuard模糊类的反射吗?_Java_Android_Reflection_Proguard - Fatal编程技术网

Java 我可以使用ProGuard模糊类的反射吗?

Java 我可以使用ProGuard模糊类的反射吗?,java,android,reflection,proguard,Java,Android,Reflection,Proguard,我有一个特定的类方法,我想使用反射调用该类方法 以下是我的活动onCreate中的代码示例: try { aMethod = getClass().getDeclaredMethod("myMethodName", SomeParameter.class); } catch (NoSuchMethodException e) { e.printStackTrace(); } 当我直接从androidstudio运行它时,它可以工作,但是当我创建发布版本时,ProGuard不会自

我有一个特定的类方法,我想使用
反射
调用该类方法
以下是我的
活动onCreate中的代码示例:

try {
    aMethod = getClass().getDeclaredMethod("myMethodName", SomeParameter.class);
} catch (NoSuchMethodException e) {
    e.printStackTrace();
}
当我直接从androidstudio运行它时,它可以工作,但是当我创建发布版本时,ProGuard不会自动更改方法名称。我能做什么?

提到了以下几点:

通常不可能计算出哪些类必须是 保留(使用其原始名称),因为类名可能是 例如,从配置文件读取。因此,你必须 在ProGuard配置中使用相同的简单方法指定它们 -保留选项

但是,在某些情况下,ProGuard会自动处理反射。具体如下:(请参阅文件以获取最新列表)

  • Class.forName(“SomeClass”)SomeClass.Class
  • SomeClass.class.getField(“someField”)
  • SomeClass.class.getDeclaredField(“someField”)
  • SomeClass.class.getMethod(“someMethod”,新类[]{})
  • SomeClass.class.getMethod(“someMethod”,新类[]{A.class})
  • SomeClass.class.getMethod(“someMethod”,新类[]{A.class,B.class})
  • SomeClass.class.getDeclaredMethod(“someMethod”,新类[]{})
  • SomeClass.class.getDeclaredMethod(“someMethod”,新类[]{A.class})
  • SomeClass.class.getDeclaredMethod(“someMethod”,新类[]{A.class,B.class})
  • AtomicIntegerFieldDupdater.newUpdater(SomeClass.class,“someField”)
  • AtomicLongFieldUpdater.newUpdater(SomeClass.class,“someField”)
  • atomicReferenceFieldDupdater.newUpdater(SomeClass.class,SomeType.class,“someField”)
因此,在我的例子中,我的错误是我使用
getClass()

获取类,下面的一行非常有效

aMethod = MainActivity.class.getDeclaredMethod("myMethodName", SomeParameter.class);