[英]java.lang.NoSuchMethodException: <init>
I checked everything on my debug build and everything works fine, but when I generate Signed Apk I get this error: 我检查了调试版本中的所有内容,一切正常,但是当我生成Signed Apk时,出现此错误:
java.lang.NoSuchMethodException: <init> [interface org.simpleframework.xml.core.Contact, interface org.simpleframework.xml.Attribute, class org.simpleframework.xml.stream.Format]
java.lang.RuntimeException: java.lang.NoSuchMethodException: <init> [interface org.simpleframework.xml.core.Contact, interface org.simpleframework.xml.Attribute, class org.simpleframework.xml.stream.Format]
at retrofit2.converter.simplexml.SimpleXmlRequestBodyConverter.convert(SimpleXmlRequestBodyConverter.java:43)
at retrofit2.converter.simplexml.SimpleXmlRequestBodyConverter.convert(SimpleXmlRequestBodyConverter.java:26)
at retrofit2.ParameterHandler$Body.apply(ParameterHandler.java:297)
at retrofit2.ServiceMethod.toRequest(ServiceMethod.java:109)
at retrofit2.OkHttpCall.createRawCall(OkHttpCall.java:178)
at retrofit2.OkHttpCall.execute(OkHttpCall.java:162)
at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$RequestArbiter.request(RxJavaCallAdapterFactory.java:171)
at rx.internal.operators.OperatorSubscribeOn$SubscribeOnSubscriber$1.request(OperatorSubscribeOn.java:109)
at rx.Subscriber.setProducer(Subscriber.java:211)
at rx.internal.operators.OperatorSubscribeOn$SubscribeOnSubscriber.setProducer(OperatorSubscribeOn.java:105)
at rx.Subscriber.setProducer(Subscriber.java:205)
at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:152)
at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:138)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.Observable.unsafeSubscribe(Observable.java:10256)
at rx.internal.operators.OperatorSubscribeOn$SubscribeOnSubscriber.call(OperatorSubscribeOn.java:100)
at rx.internal.schedulers.CachedThreadScheduler$EventLoopWorker$1.call(CachedThreadScheduler.java:230)
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.NoSuchMethodException: <init> [interface org.simpleframework.xml.core.Contact, interface org.simpleframework.xml.Attribute, class org.simpleframework.xml.stream.Format]
at java.lang.Class.getConstructor(Class.java:531)
at java.lang.Class.getConstructor(Class.java:495)
at org.simpleframework.xml.core.LabelExtractor$LabelBuilder.getConstructor(LabelExtractor.java:426)
If I get it right this is the ProGuard problem, but I don't know how to fix it. 如果我做对了,这就是ProGuard问题,但是我不知道如何解决。 Any advices please?
有什么建议吗?
Okay, I found the solution, this code in the Proguard.rules: 好的,我在Proguard.rules中找到了解决方案,此代码:
-keep public class org.simpleframework.**{ *; }
-keep class org.simpleframework.xml.**{ *; }
-keep class org.simpleframework.xml.core.**{ *; }
-keep class org.simpleframework.xml.util.**{ *; }
As a point on Den's answer : 关于Den的回答 :
it may be enough to specify 可能足以指定
-keep class org.simpleframework.xml.**{ *; }
without the rest 3 lines from the original answer. 剩下的三行则不包含原始答案。
According to the ProGuard manual : 根据ProGuard手册 :
**
matches any part of a class name, possibly containing any number of package separators.**
匹配类名的任何部分,可能包含任意数量的包分隔符。 For example,**.Test
matches all Test classes in all packages except the root package.例如,
**.Test
匹配除根包以外的所有包中的所有Test类。 Or,com.example.**
matches all classes in "com.example" and in its subpackages.或者,
com.example.**
所有类匹配“com。示例”,并在其子包。
Proposed solution may not cover the same set of cases since it doesn't include public classes in the package (that is one level higher) covered by -keep public class org.simpleframework.**{ *; }
提议的解决方案可能不会涵盖同一组情况,因为它在
-keep public class org.simpleframework.**{ *; }
所涵盖的程序包中不包含公共类(高一级) -keep public class org.simpleframework.**{ *; }
-keep public class org.simpleframework.**{ *; }
(from the original answer). -keep public class org.simpleframework.**{ *; }
(来自原始答案)。
However, in the 1st line of the provided stack trace there are only classes from org.simpleframework.xml...
package, not from the higher-level package. 但是,在提供的堆栈跟踪的第一行中,只有
org.simpleframework.xml...
包中的类,而不是更高级别的包中的类。
Having similar problem: 有类似的问题:
java.lang.NoSuchMethodException: <init> [
interface org.simpleframework.xml.core.Contact,
interface org.simpleframework.xml.ElementMap,
class org.simpleframework.xml.stream.Format]
I solved it by adding just one line to ProGuard rules. 我只需添加一行 ProGuard的规则解决了这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.