android - 为什么 "Duplicate zip entry [classes.jar:android/support/v7/appcompat/R$styleable.class]"是 android-sdk-plugin?

标签 android scala sbt

我正在使用 pfn/android-sdk-plugin在具有以下 build.sbt 的项目中:

import android.Keys._

android.Plugin.androidBuild

platformTarget in Android := "android-19"

name := "LDApp"

organization := "com.myapps.app.android.ldapp"

version := "1.0"

scalaVersion := "2.10.4"

useProguard in Android := true

libraryDependencies ++= Seq (
  "com.myapps.libraries.android" %% "androidlibs" % "0.1-SNAPSHOT"
)

proguardCache in Android ++= Seq (
  ProguardCache("androidlibs") % "com.myapps.libraries.android" %% "androidlibs",
  ProguardCache("appcompat-v7") % "com.android.support" % "appcompat-v7"
)

每当我尝试 sbt android:run 时,我都会收到错误,因为 Duplicate entry,appcompact-v7 已被包含 myapps.libraries.android,这就是为什么我没有明确包含在这个应用程序中。以下是错误日志

Copying resources from program jar [/Users/android/tmp/tmp/projects/LDApp/bin/classes.jar] (filtered)
java.io.IOException: Can't write [/Users/android/tmp/tmp/projects/LDApp/bin/classes.proguard.jar] (Can't read [/Users/android/tmp/tmp/projects/LDApp/bin/classes.jar(;;;;;;!META-INF/**,!rootdoc.txt)] (Duplicate zip entry [classes.jar:android/support/v7/appcompat/R$styleable.class]))
    at proguard.OutputWriter.writeOutput(OutputWriter.java:264)
    at proguard.OutputWriter.execute(OutputWriter.java:160)
    at proguard.ProGuard.writeOutput(ProGuard.java:372)
    at proguard.ProGuard.execute(ProGuard.java:153)
    at android.Tasks$$anonfun$77.apply(tasks.scala:1197)
    at android.Tasks$$anonfun$77.apply(tasks.scala:1171)
    at scala.Function10$$anonfun$tupled$1.apply(Function10.scala:35)
    at scala.Function10$$anonfun$tupled$1.apply(Function10.scala:34)
    at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
    at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:42)
    at sbt.std.Transform$$anon$4.work(System.scala:64)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
    at sbt.Execute.work(Execute.scala:244)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
    at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160)
    at sbt.CompletionService$$anon$2.call(CompletionService.scala:30)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)
Caused by: java.io.IOException: Can't read [/Users/android/tmp/tmp/projects/LDApp/bin/classes.jar(;;;;;;!META-INF/**,!rootdoc.txt)] (Duplicate zip entry [classes.jar:android/support/v7/appcompat/R$styleable.class])
    at proguard.InputReader.readInput(InputReader.java:232)
    at proguard.InputReader.readInput(InputReader.java:202)
    at proguard.OutputWriter.writeOutput(OutputWriter.java:253)
    at proguard.OutputWriter.execute(OutputWriter.java:160)
    at proguard.ProGuard.writeOutput(ProGuard.java:372)
    at proguard.ProGuard.execute(ProGuard.java:153)
    at android.Tasks$$anonfun$77.apply(tasks.scala:1197)
    at android.Tasks$$anonfun$77.apply(tasks.scala:1171)
    at scala.Function10$$anonfun$tupled$1.apply(Function10.scala:35)
    at scala.Function10$$anonfun$tupled$1.apply(Function10.scala:34)
    at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
    at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:42)
    at sbt.std.Transform$$anon$4.work(System.scala:64)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
    at sbt.Execute.work(Execute.scala:244)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
    at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160)
    at sbt.CompletionService$$anon$2.call(CompletionService.scala:30)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)
Caused by: java.io.IOException: Duplicate zip entry [classes.jar:android/support/v7/appcompat/R$styleable.class]
    at proguard.io.JarWriter.getOutputStream(JarWriter.java:139)
    at proguard.io.FilteredDataEntryWriter.getOutputStream(FilteredDataEntryWriter.java:105)
    at proguard.io.FilteredDataEntryWriter.getOutputStream(FilteredDataEntryWriter.java:105)
    at proguard.io.FilteredDataEntryWriter.getOutputStream(FilteredDataEntryWriter.java:92)
    at proguard.io.ClassRewriter.read(ClassRewriter.java:68)
    at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
    at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
    at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
    at proguard.io.JarReader.read(JarReader.java:65)
    at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:65)
    at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53)
    at proguard.InputReader.readInput(InputReader.java:228)
    at proguard.InputReader.readInput(InputReader.java:202)
    at proguard.OutputWriter.writeOutput(OutputWriter.java:253)
    at proguard.OutputWriter.execute(OutputWriter.java:160)
    at proguard.ProGuard.writeOutput(ProGuard.java:372)
    at proguard.ProGuard.execute(ProGuard.java:153)
    at android.Tasks$$anonfun$77.apply(tasks.scala:1197)
    at android.Tasks$$anonfun$77.apply(tasks.scala:1171)
    at scala.Function10$$anonfun$tupled$1.apply(Function10.scala:35)
    at scala.Function10$$anonfun$tupled$1.apply(Function10.scala:34)
    at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
    at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:42)
    at sbt.std.Transform$$anon$4.work(System.scala:64)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
    at sbt.Execute.work(Execute.scala:244)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
    at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160)
    at sbt.CompletionService$$anon$2.call(CompletionService.scala:30)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)
[error] (android:proguard) java.io.IOException: Can't write [/Users/android/tmp/tmp/projects/LDApp/bin/classes.proguard.jar] (Can't read [/Users/android/tmp/tmp/projects/LDApp/bin/classes.jar(;;;;;;!META-INF/**,!rootdoc.txt)] (Duplicate zip entry [classes.jar:android/support/v7/appcompat/R$styleable.class]))
[error] Total time: 34 s, completed 5 Sep, 2014 6:15:10 PM

R$styleable.class 也是作为应用程序的一部分生成的,也是 compact-v7 库的一部分,如何解决这个问题,即使围绕这些解决方案出现的类似问题还没有有帮助。

最佳答案

我从 google group 得到了解决方案“scala-on-android”的。 pfn/android-sdk-plugin的作者提供了解决方案。这是解决方案

由于 androidlibs 是库项目,它的 build.sbt 必须有 libraryProject in Android := true,这使得插件不包含资源(R.java & TR.scala) 库文件。如果“紧凑”库资源被应用程序引用,则库必须明确包含在应用程序的“libraryDependencies”中。 Android 中的 typedResources := false 必须包含在本地库中,以防您的库不应生成资源文件

关于android - 为什么 "Duplicate zip entry [classes.jar:android/support/v7/appcompat/R$styleable.class]"是 android-sdk-plugin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25689448/

相关文章:

scala - 为什么 Scalaz 会出现在我项目的 API 文档中?

Android Studio 1.0.2 "minifyEnabled true"使签名版本 apk 崩溃

java - 使用 Intent 将对象传递给多个类

java - 试图关闭 OkHttp 的响应但缺少 AutoCloseable 接口(interface)

android - IME 键盘不会自动出现在对话框中?

r - Scala 相当于 R 的 Mapply?

scala - Spark - ElasticSearch 索引创建性能太慢

email - 如何在 Play 框架 2.0 中使用电子邮件中的模板?

scala - 在 sbt 中添加仅编译时依赖项

sbt - 如何获取sbt来获取以Groovy编写的测试?