Proguard causing NoSuchMethodException


Class<?> c = Class.forName("co.uk.MyApp.dir.TargetClass");
Method main = c.getDeclaredMethod("main", Report_Holder.class);

抛出一个'java.lang.NoSuchMethodException '。主要co.uk.MyApp.classes[类。当我使用Proguard准备发布应用程序时,会出现错误。

我花了几个小时认为问题出在"co.uk.MyApp.dir"。TargetClass’,注释掉一些东西,重新发布应用,重新测试。但结果是错误就在根,在:

Method main = c.getDeclaredMethod("main", Report_Holder.class);

然后我更新了proguard-project.txt,包括:

-dontobfuscate
-keeppackagenames

(我使用Lint建议的方法,建议将代码放入项目中。属性和将配置放在文本文件中),例如:

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

但是增加这两行没有任何效果。

所以现在我想知道是否;

a)我应该在'-keeppackagenames'等上面添加任何内容。

b)是防护。正确配置设置;$ {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) {
....
}

一旦您知道如何使用proguard,您应该添加选项-keepattributes Signature 。当使用泛型(集合)时,这是必要的。

对于所有通过反射调用的方法,必须显式地将它们排除在湮没之外。使用该选项输出混淆映射文件,看看您的规则是否达到了预期效果。

相关内容

  • 没有找到相关文章

最新更新