2012-01-05 74 views
2

我正在尝试将ProGuard与我的一个应用程序一起使用,让我们假设A.此应用程序包含另一个应用程序作为库(比方说B)。这是我的proguard文件。使用ProGuard和Android应用程序时重复资源

-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中)。有没有人从ProGuard中删除R文件?有没有关于如何摆脱这个错误的提示或建议?

感谢,并问候

+0

这是什么运气?我收到类似的错误。 – Steve 2012-01-10 15:05:38

+0

即使我收到同样的错误。还有什么运气? – 500865 2012-02-14 14:53:17

回答

5

如果您正在使用从库中的类文件使用此选项(这为我工作结合this)处理两次的Android库项目中删除-injars bin/classes

如果上述不起作用,请尝试-dontnote选项。

相关问题