2013-01-15 3 views
2
내 안드로이드 인텔리에 Proguard와를 사용하고 Scoreloop가에 동일한 런타임 오류가 유지하기 위해 노력하고있어

(버전 3.0.3) 라이브러리 ... Proguard와 및 Scoreloop가

나는 다음과 같은 난독 설정 파일을 정의 project.properties 파일 : 난

# ####### # 
# Project # 
# ####### # 
-keep public class * extends android.app.Activity 
-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 


# ##### # 
# AdMob # 
# ##### # 
-keep public class com.google.ads.** {*;} 
-keep public class com.google.gson.** {*;} 


# #### # 
# ACRA # 
# #### # 
# we need line numbers in our stack traces otherwise they are pretty useless 
-renamesourcefileattribute SourceFile 
-keepattributes SourceFile,LineNumberTable 

# ACRA needs "annotations" so add this... 
-keepattributes *Annotation* 

# keep this class so that logging will show 'ACRA' and not a obfuscated name like 'a'. 
# Note: if you are removing log messages elsewhere in this file then this isn't necessary 
-keep class org.acra.ACRA {*;} 

# keep this around for some enums and classes that ACRA needs 
-keep class org.acra.ReportingInteractionMode {*;} 
#-keep class org.acra.ReportField {*;} 
-keepnames class org.acra.ReportField {*;} 

# keep this otherwise it is removed by ProGuard 
-keep public class org.acra.ErrorReporter { 
    public void addCustomData(java.lang.String,java.lang.String); 
} 
-keep public class org.acra.ErrorReporter { 
    public org.acra.ErrorReporter$ReportsSenderWorker handleSilentException(java.lang.Throwable); 
} 


# ######### # 
# Scoreloop # 
# ######### # 
-dontwarn com.scoreloop.client.android.core.paymentprovider.** 
-keep class com.scoreloop.client.android.core.paymentprovider.fortumo.FortumoPaymentProviderController {*;} 
-keep class com.scoreloop.client.android.core.paymentprovider.fortumo.FortumoPaymentProvider {*;} 
-keep class com.scoreloop.client.android.core.paymentprovider.paypalx.PayPalXPaymentProviderController {*;} 
-dontwarn com.scoreloop.client.android.core.ui.WebViewDialog 
-keep class com.scoreloop.client.android.core.ui.WebViewDialog {*;} 
-keep class com.facebook.android.** {*;} 


# ############## # 
# In-App Billing # 
# ############## # 
# -keep class com.android.vending.billing.** 


# ####### # 
# OrmLite # 
# ####### # 
# OrmLite uses reflection 
-keep class com.j256.** 
-keepclassmembers class com.j256.** { *; } 
-keep enum com.j256.** 
-keepclassmembers enum com.j256.** { *; } 
-keep interface com.j256.** 
-keepclassmembers interface com.j256.** { *; } 

: 여기

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

그리고 내 난독-project.txt 파일입니다 (모든 경우에 포함와 함께 어디 선가 뭔가 잘못 ...했다) 이걸 얻는거야. 런타임 오류 :

Caused by: java.lang.IllegalArgumentException: java.lang.NoSuchMethodException: <init> [class com.scoreloop.client.android.core.b.aw] 
    at com.scoreloop.client.android.core.b.j.a(SourceFile:692) 
    at com.scoreloop.client.android.core.b.j.<init>(SourceFile:368) 
    at com.sofresh.games.megaflux.MegaFluxApplication.onCreate(SourceFile:106) 
    at com.sofresh.games.megaflux.MegaFluxApplication_.onCreate(SourceFile:19) 
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1000) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4391) 
    ... 10 more 
Caused by: java.lang.NoSuchMethodException: <init> [class com.scoreloop.client.android.core.b.aw] 
    at java.lang.Class.getConstructorOrMethod(Class.java:460) 
    at java.lang.Class.getConstructor(Class.java:431) 
    at com.scoreloop.client.android.core.b.j.a(SourceFile:684) 

파일 mapping.txt에서, 나는이 문제가있는 클래스와 통화에 대한 발견 : 그래서 오류가 그것의 생성자를 찾을 수 있다고 생각

com.scoreloop.client.android.core.model.Client -> com.scoreloop.client.android.core.b.j: 
    java.util.Map a -> a 
    com.scoreloop.client.android.core.model.ClientObserver b -> b 
    com.scoreloop.client.android.core.model.Session c -> c 
    103:104:boolean a(java.util.Properties,java.lang.String,boolean) -> a 
    155:178:java.util.Properties a(android.content.Context) -> a 
    182:185:void a(java.util.Properties,java.lang.String) -> a 
    188:194:void a(java.util.Properties,java.lang.String,java.lang.String) -> a 
    198:232:void a(android.content.Context,java.lang.String) -> a 
    380:387:void a(java.util.Properties) -> a 
    638:640:int b(java.util.Properties,java.lang.String) -> b 
    684:692:void a(java.lang.Class) -> a 
    708:711:void a$2a1b557e(com.scoreloop.client.android.core.model.Session) -> a 
    715:718:boolean a(com.scoreloop.client.android.core.model.Session) -> b 
    722:723:void b(android.content.Context) -> b 
[...] 
com.scoreloop.client.android.core.model.Session -> com.scoreloop.client.android.core.b.aw: 
[...] 

클라이언트 세션을 복용. 지금은이 오류 받고 있어요, 아니 운이

-keep class com.scoreloop.client.android.core.model.** {*;} 
-keepclassmembers class com.scoreloop.client.android.core.model.** 

을 :

Caused by: java.lang.IllegalArgumentException: java.lang.NoSuchMethodException: <init> [class com.scoreloop.client.android.core.model.Session] 
    at com.scoreloop.client.android.core.model.Client.a(SourceFile:692) 
    at com.scoreloop.client.android.core.model.Client.a(SourceFile:605) 
    at com.scoreloop.client.android.core.model.Client.<init>(SourceFile:368) 
    at com.blabla.MyApplication.onCreate(SourceFile:106) 
    at com.blabla.MyApplication_.onCreate(SourceFile:19) 
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1000) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4391) 
    ... 10 more 
Caused by: java.lang.NoSuchMethodException: <init> [class com.scoreloop.client.android.core.model.Session] 
    at java.lang.Class.getConstructorOrMethod(Class.java:460) 
    at java.lang.Class.getConstructor(Class.java:431) 
    at com.scoreloop.client.android.core.model.Client.a(SourceFile:684) 

을 그리고 지금은 조금 다음에 시도하는 무엇을 잃었어요 나는 내 난독의 conf에 다음을 추가했습니다. 이 오류에 대한 아이디어와 깨달음은 무엇입니까?

답변

3

, 여기 Scoreloop가에 대한 ProGuard를 구성입니다. 출처가 없으면 무엇을 바꾸어야할지 정말 말하기가 어려웠습니다 ... 다행스럽게도 Scoreloop 지원에 대한 답변이 있었고 솔루션을 찾을 수있었습니다!
+0

공유 해 주셔서 감사합니다 – kgiannakakis

+0

NoClassDefError on com.zong.android.engine.provider.ZongPersistanceProvider – Guy

2

코드가 리플렉션을 수행하고 생성자를 찾을 수 없으므로 실제로 코드가 유지되는지 확인해야합니다. 귀하의 -keep 옵션은 모든 클래스에 지정된 패키지/필드/메소드와 그 서브 패키지 유지한다 : - 불행하게도 스택 트레이스 그러나

-keep class com.scoreloop.client.android.core.model.** {*;} 

를 코드는 아마도이 패키지 외부 클래스의 생성자를 찾기 위해 노력하고있다 말하지 않는다. 어떤 클래스 (또는 클래스 집합)인지 파악한 다음 생성자를 유지해야합니다.

-keepclassmembers 옵션은 (클래스 멤버를 지정하지 않았기 때문에) 아무 것도하지 않지만 반드시 필요하지는 않습니다. 답변에 대한

# ######### # 
# Scoreloop # 
# ######### # 
-dontwarn com.scoreloop.client.android.core.paymentprovider.** 
-keep class com.scoreloop.client.android.core.paymentprovider.fortumo.FortumoPaymentProviderController {*;} 
-keep class com.scoreloop.client.android.core.paymentprovider.fortumo.FortumoPaymentProvider {*;} 
-keep class com.scoreloop.client.android.core.paymentprovider.paypalx.PayPalXPaymentProviderController {*;} 
-dontwarn com.scoreloop.client.android.core.ui.WebViewDialog 
-keep class com.scoreloop.client.android.core.ui.WebViewDialog {*;} 
-keep class com.facebook.android.** {*;} 
-keep class com.scoreloop.client.android.core.** { *; } 
+0

안녕하세요, 감사 : Scoreloop가 지원의 응답 내 측면에서 테스트 후 – Florian

관련 문제