2011-08-09 7 views
0

코드를 난독 화하기 위해 Proguard를 사용하려고합니다. 내가 광고에 대한 몹 클릭스를 사용하고, 내 APK를 만들 때 오류 뱉어 것 :Mobclix and Proguard

-keep public class com.mobclix.android.sdk.* 
-keep class com.mobclix.android.sdk.MobclixJavascriptInterface 

-keepclassmembers class com.mobclix.android.sdk.MobclixJavascriptInterface 
{ 
    public void *(...); 
    <methods>; 
} 

-keepclassmembernames class 
com.mobclix.android.sdk.MobclixJavascriptInterface { 
    public void *(...); 
    <methods>; 
} 

: 이제

org.eclipse.core.runtime.CoreException: Proguard returned with error code 1. See console 
    at com.android.ide.eclipse.adt.internal.project.ExportHelper.exportReleaseApk(ExportHelper.java:228) 
    at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.doExport(ExportWizard.java:290) 
    at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.access$0(ExportWizard.java:229) 
    at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard$1.run(ExportWizard.java:214) 
    at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121) 
Caused by: Proguard Error 1 
Output: 
Warning: com.mobclix.android.sdk.MobclixContactsCursorEntityIterator: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsCursorEntityIterator: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5$EntityIteratorImpl: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5$EntityIteratorImpl: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5$EntityIteratorImpl: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5$EntityIteratorImpl: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5$EntityIteratorImpl: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsEntityIterator: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5: can't find referenced class android.content.Entity$NamedContentValues 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5: can't find referenced class android.content.Entity$NamedContentValues 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5: can't find referenced class android.content.Entity 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5: can't find referenced class android.content.Entity$NamedContentValues 
Warning: com.mobclix.android.sdk.MobclixContactsSdk5: can't find referenced class android.content.Entity 
     You should check if you need to specify additional program jars. 
Warning: there were 17 unresolved references to classes or interfaces. 
     You may need to specify additional library jars (using '-libraryjars'), 
     or perhaps the '-dontskipnonpubliclibraryclasses' option. 
java.io.IOException: Please correct the above warnings first. 
    at proguard.Initializer.execute(Initializer.java:308) 
    at proguard.ProGuard.initialize(ProGuard.java:210) 
    at proguard.ProGuard.execute(ProGuard.java:85) 
    at proguard.ProGuard.main(ProGuard.java:499) 
    at com.android.ide.eclipse.adt.internal.build.BuildHelper.runProguard(BuildHelper.java:527) 
    at com.android.ide.eclipse.adt.internal.project.ExportHelper.exportReleaseApk(ExportHelper.java:187) 
    ... 4 more 

을, 나는 몹 클릭스 내 proguard.cfg에 자신의 문서에서 비트를 권장 뒀다 내가해야 할 일은 뭐니? 만

답변

0

메시지를 변경 덕분에 어떤 몹 클릭스 클래스 (com.mobclix.android.sdk.MobclixContactsCursorEntityIterator을 같은) 안드로이드 런타임 클래스에 의존한다는 설명 (android.content.Entity을 같은)에 존재하지 않는 당신의 입력 항아리 또는 라이브러리 항아리. 일반적으로 이것은 심각한 문제의 징후 일 수 있습니다. 코드의 일부가 실행되면 NoClassDefFoundError (심지어 난독 화가 없어도)로 실패합니다.

Entity 클래스가 Android SDK 7에 도입 된 것처럼 보입니다. 따라서 이전 SDK와 비교하여 구축하고 있다고 가정합니다. 다시 코드이 누락 된 클래스에도 불구하고 잘 실행 가정, 당신은 ProGuard에서이 -keep 옵션은 여기에서 활동하기 시작하지 않는 것이

-dontwarn android.content.Entity* 

주와 다소 일치하지 않는 입력을 허용하도록 할 수 있습니다. ProGuard는 -keep 옵션을 고려하기 전에 일관성 검사를 수행합니다.

또한 ProGuard manual> 문제 해결> 경고를 참조하십시오 클래스를

+0

우수 답변. 나는 실제로 SDK 4에 맞서서 구축하고 있지만 7을 목표로 삼고 있습니다. 15 버전에서는 문제없이 작동했지만 NoClassDefFoundError를 실행하면 무엇을 조사해야하는지 알 수 있습니다. 도와 주셔서 정말 감사합니다! – Nick

0

어쩌면

-keep public class com.mobclix.android.sdk.* 

-keep public class com.mobclix.android.sdk.** 
+0

아니 주사위를 참조 찾을 수 없습니다, 감사 – Nick

+0

하지만 어쩌면'추가 -keep 공용 클래스 android.content.Entity'와의 기본 재료를 삭제 결코' proguard.cfg'이 새 이클립스 프로젝트에서 생성되었으므로 삭제 한 다음 새 프로젝트를 만들고 그'proguard.cfg' 코드를 복사하십시오 – pqn

+0

같은 오류가 발생했습니다. 아니요, 기본 항목을 삭제하지 않았습니다. – Nick