Дублирующие ресурсы при использовании ProGuard и приложения Android - PullRequest
2 голосов
/ 05 января 2012

Я пытаюсь использовать ProGuard с одним из моих приложений, скажем, A. Это приложение включает другое приложение в качестве библиотеки (скажем, B). Это мой файл proguard.

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

-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

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

-injars      bin/classes
-libraryjars lib 

Когда я впервые выполнил это, я получил следующую ошибку:

 Proguard returned with error code 1. See console
[2012-01-05 12:18:55 - BSabadellHC-Entrega] Note: there were 1059 duplicate class     definitions.
[2012-01-05 12:18:55 - BSabadellHC-Entrega] java.io.IOException: Can't write     [/private/var/folders/19/321lw_654pzdqr8y34ysvsx80000gn/T/android_7971378611269030364.jar]     (Can't read     [/private/var/folders/19/321lw_654pzdqr8y34ysvsx80000gn/T/android_1457478862713006376.jar]     (Duplicate zip entry [com/ideaknowing/labs/android/ikarengine/e.class ==     android_1457478862713006376.jar:com/ideaknowing/labs/android/ikarengine/R$anim.class]))

Соответствующие части для меня:

  • Есть повторяющиеся объекты
  • Они должны из-за файлов R. Консоль сообщает, что в R $ anim есть повторяющиеся ресурсы (конечно, поскольку и приложение A, и библиотека B включают анимации, макеты и т. Д.).

Итак, моя идея заключалась в том, чтобы исключить из ProGuard файлы R, и для этого я включил следующие строки кода:

-keep public class net.firsrproject.android.R
-keep public class com.ideaknowing.labs.android.ikarengine.R 

Тем не менее, я все еще получаю ту же ошибку (поэтому я думаю, что файлы все еще включены в Proguard). У кого-нибудь есть опыт удаления R-файлов из ProGuard? Есть какой-нибудь совет или предложение, как я могу избавиться от этой ошибки?

Спасибо и всего наилучшего

1 Ответ

5 голосов
/ 14 февраля 2012

Удалите -injars bin/classes, если вы используете проект библиотеки Android, так как файлы классов из библиотеки обрабатываются дважды с помощью этой опции (у меня это работало в сочетании с this ).

Если вышеперечисленное не работает, попробуйте вариант -dontnote.

...