我混淆了Lite和一个引用库项目的完整项目。在运行时我得到“NoSuchMethodException myMethod”错误
根据http://proguard.sourceforge.net/index.html#/manual/troubleshooting.html,我必须将以下内容添加到proguard.cfg
-keep class mypackage.MyClass { void myMethod(); }
我的方法返回一个String并接受3个String参数,所以我将以下内容添加到proguard.cfg
-keep public class com.mycompany.appName.MyClass {
String myMethod(String, String, String);
}
但我仍然得到同样的错误。
假设我正在构建精简版com.mycompany.appName.lite,我假设我不必更改添加到proguard.cfg的行中的包名,因为它是一个引用的库。
有什么我想念的吗?感谢。
答案 0 :(得分:5)
我发现调试ProGuard是黑魔法,您可能需要验证保持参数实际上是否正在执行它们的目的。
我一直在使用我创建的探测方法:
http://code.google.com/p/android-beryl/source/browse/beryl-core/src/org/beryl/diagnostics/Log.java
Log.inspectClass(MyClass.class);
我接下来要监视转储到LogCat的类定义。您还可以查看proguard /目录中的文件以找出发生的情况。但我发现这很困难。
在你的情况下,我会先从一个非常松散开始,先把所有东西放在一边,然后努力收紧课堂。
-keep class com.mycompany.appName.MyClass {
*;
}
答案 1 :(得分:0)
添加Jeremy开始保持整个类的解决方案,对我来说,具体的解决方案是在String参数的前面添加“java.lang”。
-keep public class com.mycompany.appName.myClass {
java.lang.String myMethod(java.lang.String, java.lang.String, java.lang.String);
}