2012-06-28 3 views
21

У меня проблемы с ProGuard и Android.Использование ProGuard с Android

Я искал в Интернете часами и нашел несколько способов обмануть приложение для Android. Сейчас я пытаюсь тот, который выглядит самым простым, так:

  • Я создал config.cfg файл в корневом каталоге моего проекта
  • я добавил proguard.config=config.cfg в моем project.properties
  • двутавровых используется мастер экспорта Eclipse, экспортировать & подписать .apk файл

Я получил сообщение о том, Proguard returned with error code 1. See console и в консоли:

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. 

Даже если я использую конфиг, представленный на официальном сайте Proguard, или по умолчанию один на меня есть ошибки.
Вот мой заказ конфигурации (MyProject/config.cfg):

-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>; 
} 

Я не могу заставить его работать ... любая идея, было бы весьма признателен!

Примечание: Я использую librairies Джексон JSON, которые хранятся в папке libs моего проекта

ответ

33

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

Андроида Ant/Eclipse, билды уже указать -injars/-libraryjars для вас. Если вы укажете их еще раз в своей конфигурации, ProGuard отмечает, что они дублируются. Поэтому не указывайте -injars/-libraryjars.

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

org.w3c.dom.bootstrap.DOMImplementationRegistry нет во входном коде, но com.fasterxml.jackson.databind.ext.DOMSerializer использует его. Если приложение работает в любом случае, вы можете позволить ProGuard принять его:

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

Thx для оказания помощи. Компиляция/обфускация работает без ошибок, но затем, когда я нажимаю кнопку, которая перенаправляет меня на Activity, у которого есть объект, который использует библиотеку JSON, приложение сбой ... – Flawyte

+0

Все еще не может заставить его работать, никаких идей вообще ?? – Flawyte

+0

да для меня тоже ...это не ошибка, но мой flexJson перестает работать – sheetal

1

я просто застрял с той же проблемой, и я решил его с помощью ссылки на файл rt.jar JRE:

-libraryjars/Библиотека/rt.jar

Я надеюсь, что это помогает

Смежные вопросы