Class<?> c = Class.forName("co.uk.MyApp.dir.TargetClass");
Method main = c.getDeclaredMethod("main", Report_Holder.class);
一旦我准备好使用 Proguard 发布应用程序,就会引发“java.lang.NoSuchMethodException.main[class co.uk.MyApp.classes.Report_Holder]”错误。
我花了几个小时认为问题出在“co.uk.MyApp.dir.TargetClass”,注释掉一些东西,重新发布应用程序,重新测试。但事实证明,错误就在根源上,在:
Method main = c.getDeclaredMethod("main", Report_Holder.class);
然后我更新了 proguard-project.txt 以包括:
-dontobfuscate
-keeppackagenames
(我正在使用 Lint 建议的方法,该方法建议将代码放入 project.properties 并将配置放入文本文件中),例如:
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
但是添加那 2 行没有任何效果。
所以现在我想知道是否;
a)我应该在'-keeppackagenames'等之上添加任何东西。
b) proguard.config 设置是否正确;${sdk.dir} 实际上应该是 sdk 的正确 uri
它所针对的类是这样的:
public static void main(Report_Holder args) {
....
}
编辑
还是因为我有 2 个此类事物的实例,都称为 'main' ?但是在不同的活动中调用。
Method main = c.getDeclaredMethod("main", Report_Holder.class);
Method main = c.getDeclaredMethod("main", OtherReport_Holder.class);
两个目标都是这样的:
public static void main(Report_Holder args) {
....
}
public static void main(OtherReport_Holder args) {
....
}