2012-06-28 20 views
21

ProGuard ve Android ile ilgili sorunlarım var.Android ile ProGuard'ı Kullanma

Web'de saatlerce arandım ve bir Android uygulamasını karartmak için çeşitli yollar buldum. Şimdilik bu kadar kolay gibi gözüküyor birini çalışıyorum:

  • benim project.properties
  • I proguard.config=config.cfg eklendi
  • Projemin kök dizininde bir config.cfg dosyası oluşturduk & işareti Benbelirten bir mesaj aldım

.apk dosyası ihracat Eclipse ihracat sihirbazı kullanılır 10 ve konsolda:

Proguard returned with error code 1. See console 
Note: there were 3847 duplicate class definitions. 
Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry 
Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry 
Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry 
Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry 
     You should check if you need to specify additional program jars. 
Warning: there were 4 unresolved references to classes or interfaces. 
     You may need to specify additional library jars (using '-libraryjars'). 
Error: Please correct the above warnings first. 

Ben resmi Proguard web sitesi tarafından sağlanan yapılandırma, yoksa hatalar var varsayılan birini kullanmak bile.

-injars  bin/classes 
-injars  libs 
-libraryjars "C:\Program Files\Android\android-sdk\platforms\android-13\android.jar" 

-dontskipnonpubliclibraryclasses 
-optimizationpasses 5 
-printmapping map.txt 
-flattenpackagehierarchy 
-dontpreverify 
-repackageclasses '' 
-allowaccessmodification 
-optimizations !code/simplification/arithmetic 
-keepattributes *Annotation* 

-keep public class * extends android.app.Application 
-keep public class * extends android.app.Activity 
-keep public class * extends android.app.PreferenceActivity 
-keep public class * extends android.view.View 
-keep public class * extends android.widget.BaseAdapter 
-keep public class * implements android.view.View.OnTouchListener 

-keep public class * extends android.view.View { 
    public <init>(android.content.Context); 
    public <init>(android.content.Context, android.util.AttributeSet); 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
    public void set*(...); 
} 

-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.content.Context { 
    public void *(android.view.View); 
    public void *(android.view.MenuItem); 
} 

-keepclassmembers class * implements android.os.Parcelable { 
    static android.os.Parcelable$Creator CREATOR; 
} 

-keepclassmembers class **.R$* { 
    public static <fields>; 
} 

Ben çalışmak için alınamıyor ... bir fikrin büyük takdir:
İşte benim özel yapılandırma (MyProject/Config.cfg) 'dir!

NOT: Ben zaten sizin için -injars/-libraryjars belirtmek yapýlar projemde

cevap

33

1) ProGuard manual > Troubleshooting > Note: duplicate definition of program/library class

Android Ant/Eclipse içinde libs klasöründe saklanır Jackson JSON Librairies kullanın. Yapılandırmanızda bunları yeniden belirtirseniz, ProGuard bunların kopyalandığını not eder. Yani -injars/-libraryjars belirtmeyin.

2) ProGuard manual > Troubleshooting > Warning: can't find referenced class

org.w3c.dom.bootstrap.DOMImplementationRegistry giriş kodu mevcut değildir, ancak com.fasterxml.jackson.databind.ext.DOMSerializer kullanıyor. Zaten Başvurunuz işleri varsa, ProGuard ile kabul sağlayabilirsiniz:

-dontwarn org.w3c.dom.bootstrap.DOMImplementationRegistry 
+0

Yardım için teşekkürler. Derleme/gizleme hatasız çalışır, ancak beni JSON kitaplığını kullanan bir nesneye sahip olan bir eyleme yönlendiren düğmeyi tıklattığımda uygulama çöküyor ... – Flawyte

+0

Yine de işe yaramayacaksınız, hiçbir fikir yok ?? – Flawyte

+0

evet benim için de ...hata atmıyor ama flexJson çalışmayı durdurdu – sheetal

1

Ben de aynı sorun ile sıkışmış ve ben JRE rt.jar dosyasını başvurarak bunu çözüldü:

-libraryjars/lib/rt.jar

Ben