在Mac OS X上启用Proguard时,Android导出向导无法创建已签名的apk,导致重复条目。ds_存储

在Mac OS X上启用Proguard时,Android导出向导无法创建已签名的apk,导致重复条目。ds_存储,android,macos,apk,proguard,Android,Macos,Apk,Proguard,Android导出向导抛出一个ZipException,该异常由重复的entry.DS_STORE引起。 有没有办法告诉Proguard和/或Android导出向导忽略.DS_存储文件并解决此问题 这是一个详细的长话短说: 我想为我的Android项目启用Proguard。我从Android项目的project.properties中取消了以下行的注释 proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-

Android导出向导抛出一个ZipException,该异常由重复的entry.DS_STORE引起。 有没有办法告诉Proguard和/或Android导出向导忽略.DS_存储文件并解决此问题

这是一个详细的长话短说:

我想为我的Android项目启用Proguard。我从Android项目的project.properties中取消了以下行的注释

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
现在,当我尝试从Eclipse导出签名的apk时(右键单击项目->Android工具->导出签名的应用程序包),导出向导无法返回导出失败的应用程序

从Eclipse的错误日志视图中,确实出现了一个错误。双击它,这就是stacktrace:

org.eclipse.core.runtime.CoreException: Failed to export application
    at com.android.ide.eclipse.adt.internal.project.ExportHelper.exportReleaseApk(ExportHelper.java:318)
    at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.doExport(ExportWizard.java:296)
    at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.access$0(ExportWizard.java:233)
    at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard$1.run(ExportWizard.java:218)
    at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Caused by: java.util.zip.ZipException: duplicate entry: .DS_Store
    at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:215)
    at java.util.jar.JarOutputStream.putNextEntry(JarOutputStream.java:109)
    at com.android.ide.eclipse.adt.internal.project.ExportHelper.addFileToJar(ExportHelper.java:407)
    at com.android.ide.eclipse.adt.internal.project.ExportHelper.addFileToJar(ExportHelper.java:394)
    at com.android.ide.eclipse.adt.internal.project.ExportHelper.exportReleaseApk(ExportHelper.java:242)
    ... 4 more
因此,由于存在多个.DS_存储文件(它们是MAC OS X的隐藏系统文件),看起来ZipException被抛出了。

使用Ant,您可以在
/tools/Ant/build.xml
中的
-injars
任务中添加
-injars
选项。例如:

-injars ${project.all.classes.value}(!**.DS_STORE)
这告诉ProGuard在读取输入时忽略任何.DS_存储文件

在Eclipse中,配置是硬编码的,所以这是不可能的

MacOS X上的其他开发人员可能知道更多…

解决方案:

  • 递归删除终端中的所有.DS_存储。 请参阅此链接

  • 在Eclipse中导出项目