2012-11-09 3 views
0

여기에서이 문제를 해결하기 위해 검색 한 결과 아무 것도 도움이되지 않았습니다. 나는 해결책이 here에 있었을 것이라고 생각했지만, 나는 틀렸다. 자세한 정보 표시가 활성화되어 있어도 콘솔에서 아무 것도 얻지 못하기 때문에 핀 고정하기가 어렵습니다. Proguard를 사용하여 다른 프로젝트를 내보낼 수는 있지만이 특정 프로젝트는 사용할 수 없습니다. 원래 나는 그것이 사용하고있는 opencsv jar와 관련이 있다고 생각했지만 그 jar 파일을 제거하고 코드에서이 파일에 대한 참조를 제거했지만 여전히 오류가 있습니다.무시 무시한 "Dalvik 형식으로의 변환이 오류 1로 실패했습니다"오류로 실패했습니다.

proguard없이 앱을 내보내고 앱 자체가 정상적으로 실행됩니다.

참고 : AlternateJavaBridgelib 항목은 대부분 내 프로젝트에서 사용한 라이브러리입니다. 다른 애플 리케이션에서 proguard를 사용하여 apk를 내보내는 데 문제가 없습니다. (이것이 내가 opencsv jar 일 수도 있지만, 다른 애플 리케이션에서는 사용하지 않는 유일한 다른 jar입니다.)

-optimizationpasses 5 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontpreverify 
-verbose 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 
-renamesourcefileattribute SourceFile 
-keepattributes SourceFile,LineNumberTable 


-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 
-keep public class com.android.vending.licensing.ILicensingService 
-keep public class au.com.bytecode.** 
-keep public class java.beans.** 

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

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

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

-keepclassmembers class * extends android.app.Activity { 
    public void *(android.view.View); 
} 

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

-keep class * implements android.os.Parcelable { 
    public static final android.os.Parcelable$Creator *; 
} 

-keep class * implements java.io.Serializable { 
    static final long serialVersionUID; 
    private void writeObject(java.io.ObjectOutputStream); 
    private void readObject(java.io.ObjectInputStream); 
    public boolean equals(java.lang.Object);  
} 


-dontwarn java.beans.**, android.support.v4.**, com.google.ads.**, android.provider.CalendarContract*, com.dropbox.client2.**, 
android.view.Display, com.xiledsystems.AlternateJavaBridgelib.components.altbridge.FormFragment, android.widget.Switch, au.com.bytecode.opencsv.** 

편집 :

여기 경우 내가 뭔가를 누락 내 proguard.cfg의 난독가 실제로 작동하는 것 같다. 프로 가드가 어떤 이유로 달려간 후에 실패하는 것 같습니다. 프로젝트에 대해 생성 된 덤프, 매핑, 시드 및 사용 txt 파일을 얻습니다.

답변

1

이것은 ProGuard의 버그 일 수 있으며 유효하지 않은 코드를 생성합니다. 그러면 dx가 애매한 오류를보고합니다. ProGuard의 최신 버전을 사용하고 있는지 확인하십시오. 문제가 지속되면 ProGuard 사이트에서 신고하거나 문제를 재현 할 수있는 프로젝트를 우편으로 보내주십시오.

(나는 ProGuard 개발자 임)

+0

감사합니다. Eric, 고칠 수 있습니다. 나는 이전 시점에서 업그레이드했다고 생각했지만, 분명히 그렇지 않았다. 이제 프로 가드를 활성화 한 상태로 앱을 내보낼 수 있습니다. – Ryan

+0

이 문제의 원인을 발견했습니다. 처리중인 수출을 취소했습니다. 일단 이렇게하면, 그것은 보크 가드에게 보인다. 이번에도 똑같은 일을했는데 프로젝트를 삭제하고 작업 영역으로 다시 가져 와서 작동시켜야했습니다. 바라기를이 정보는 당신이 문제를 발견 할 것을 도울 것이다. – Ryan

관련 문제