2016-05-05 22 views
6

il mio team e io abbiamo cercato di risolvere questa eccezione che stiamo ricevendo quando proviamo a Proguard la nostra app per Android prima di passare alla versione beta.Traduzione non pubblicata SimException: dx.rop.cst.CstInterfaceMethodRef non può essere lanciato su com.android.dx.rop.cst.CstMethodRef (Proguard)

L'eccezione che stiamo ottenendo è:

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. 

Stiamo cercando di rintracciare in cui questo errore si verifica durante Proguarding ma non essendo estremamente familiarità con Proguard per sapere come trovare dove i fallimenti si verificano.

C'è un modo per vedere dove si sta verificando questo errore di traduzione? Se sapessi cosa/dove l'eccezione cast è nel mio codice, forse potrei risolverlo. Ci sono dei riferimenti online che affermano che i servizi di Google Play potrebbero causare problemi in altri sdks ma abbiamo già utilizzato lo strumento di dipendenza e abbiamo scoperto che è correttamente collegato a 8.4.0 in tutti gli sdks.

Anche la nostra app utilizza il flag vero multiDexEnabled.

Ecco il nostro file 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); 
} 

Se non v'è più informazioni necessarie per favore fatemelo sapere e sarò felice di fornire, questo sta attualmente bloccando la nostra capacità di pubblicare una versione beta.

risposta

3

Quindi, per noi, sembra che la soluzione è rimuovere:

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

da Proguard, come ci deve essere qualche conflitto quando si utilizza questo con varie librerie. Spero che questo aiuti gli altri che si imbattono in questo problema perché siamo rimasti bloccati per 6 giorni.

Va notato che si dovrebbe quindi aggiungere esplicitamente i vostri riferimenti per fare clic gestori o almeno restringere il campo, vedere l'origine di questa regola qui: Android Proguard - how to keep onClick handlers only referenced from XML layouts

0

Ho anche alle prese con questo errore dopo l'aggiunta di CreativeSDK . Aggiungendo qui nel caso in cui aiuti qualcuno in futuro. L'errore esatto era:

Errore di traduzione non rilevato: com.android.dx.cf.code.SimException: non è possibile eseguire il cast di com.android.dx.rop.cst.CstMethodRef su com.android.dx.rop.cst .CstInterfaceMethodRef

e nel mio caso era la soluzione per rimuovere

-keep class retrofit.** { *; } 

da Proguard

Problemi correlati