未捕获的翻译SimException:dx.rop.cst.CstInterfaceMethodRef无法强制转换为com.android.dx.rop.cst.CstMethodRef(Proguard)

时间:2016-05-05 14:31:46

标签: android proguard

我的团队和我一直在努力解决我们在尝试使用Proguard我们的Android应用程序之前获得的这个异常。

我们得到的例外是:

Error:Uncaught translation error: com.android.dx.cf.code.SimException: com.android.dx.rop.cst.CstInterfaceMethodRef cannot be cast to com.android.dx.rop.cst.CstMethodRef
Possible causes for this unexpected error include:<ul><li>Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
<a href="syncProject">Re-download dependencies and sync project (requires network)</a></li><li>The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
<a href="stopGradleDaemons">Stop Gradle build processes (requires restart)</a></li><li>Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.</li></ul>In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.

我们正试图追踪在Proguarding期间发生此错误的位置,但不是非常熟悉Proguard以了解如何找到失败发生的位置。

有没有办法查看这种翻译错误发生的位置?如果我知道代码中的转换异常是什么/哪里,也许我可以解决它。有在线参考说明Google Play服务可能会导致其他sdks出现问题,但我们已经使用了依赖工具,并发现它在所有sdks中正确链接到8.4.0。

我们的应用程序也使用multiDexEnabled true flag。

这是我们的proguard文件:

# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /development/adt-bundle-mac/sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

# (1)Annotations and signatures
-keepattributes *Annotation*,EnclosingMethod,Signature,InnerClasses

-keepnames class com.fasterxml.jackson.** { *; }

# (2)Simple XML
-keep public class org.simpleframework.**{ *; }
-keepclasseswithmembernames class javax.xml.stream.** { *; }
### Simple XML SERIALIZER SETTINGS
-keepclassmembers,allowobfuscation class * {
    @org.simpleframework.xml.* <fields>;
    @org.simpleframework.xml.* <init>(...);
}
-keep class javax.xml.stream.**{ *; }
-keep class org.simpleframework.xml.**{ *; }

# Ignore warnings: We are not using DOM model
#-dontwarn com.fasterxml.jackson.databind.ext.DOMSerializer
-dontwarn com.fasterxml.jackson.databind.ext.*
-dontwarn org.apache.http.**

# Keep the pojos used by GSON or Jackson
-keep class com.futurice.project.models.pojo.** { *; }

# Keep Jackson stuff
-dontwarn org.codehaus.**
-dontwarn com.bea.xml.stream.**
-dontwarn com.google.android.gms.*
-dontwarn javax.xml.stream.*
-dontwarn javax.annotation.**
-dontwarn sun.misc.Unsafe
-dontwarn com.google.j2objc.annotations.Weak
-dontwarn java.lang.ClassValue
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn okio.*
-dontwarn org.apache.**
-dontwarn org.simpleframework.xml.stream.*
-dontwarn rx.internal.util.unsafe.*

# Keep leakcanary stuff
-dontwarn com.squareup.haha.**
-dontwarn com.squareup.leakcanary.**

# Marshmallow removed Notification.setLatestEventInfo()
-dontwarn android.app.Notification

# warnings
-dontwarn butterknife.internal.*
-dontwarn com.conviva.streamerProxies.*
-dontwarn com.anvato.**
-dontwarn com.apptentive.android.sdk.**
-dontwarn com.comscore.instrumentation.**
-dontwarn com.squareup.okhttp.**
-dontwarn com.urbanairship.json.**
-dontwarn tv.freewheel.renderers.html.*

# notes
-dontnote com.android.vending.**
-dontnote com.anvato.**
-dontnote com.conviva.**
-dontnote com.facebook.stetho.inspector.**
-dontnote com.google.android.gms.**
-dontnote com.google.gson.internal.**
-dontnote com.google.vending.**
-dontnote com.squareup.okhttp.**
-dontnote com.urbanairship.**
-dontnote tv.freewheel.extension.medialets.**
-dontnote org.apache.**
-dontnote org.json.**

#Note: duplicate definition of library class
-dontnote android.net.http.**


# For RxJava:
-dontwarn org.mockito.**
-dontwarn org.junit.**
-dontwarn org.robolectric.**
-dontwarn rx.md.internal.schedulers.NewThreadWorker

#-ignorewarnings

-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
#-keep public class * extends android.content.ContentProvider
#-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
##-keep public class com.android.vending.licensing.ILicensingService
#-keep public class com.fasterxml.jackson.databind.ObjectMapper

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

#-keepclasseswithmembernames class * {
#   public onStart();
#}

-keep public class com.fasterxml.jackson.** {
  public void set*(***);
  public *** get*();
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
    public void set*(***);
    public *** get*();
}

-keep class * {
    public void *(android.view.View);
}

如果您需要更多信息,请告诉我,我很乐意提供,这目前阻止我们发布测试版的能力。

2 个答案:

答案 0 :(得分:3)

所以对我们来说,解决方案似乎是删除:

-keep class * {
    public void *(android.view.View);
}
来自Proguard的

,因为与各种库一起使用时必定会有一些冲突。我希望这可以帮助其他遇到这个问题的人因为我们被困6天了。

应该注意的是,您应该明确地将您的引用添加到点击处理程序或至少缩小范围,请在此处查看此规则的来源:Android Proguard - how to keep onClick handlers only referenced from XML layouts

答案 1 :(得分:0)

添加CreativeSDK后,我一直在努力解决此错误。 在这里添加,以防将来帮助某人。 确切的错误是:

未捕获的翻译错误:com.android.dx.cf.code.SimException:com.android.dx.rop.cst.CstMethodRef无法强制转换为com.android.dx.rop.cst.CstInterfaceMethodRef

在我的情况下解决方案是删除

-keep class retrofit.** { *; } 
来自Proguard的