11

我在 IntelliJ 中有以下目录结构,其中包含一个 Android 库项目:

java/com/example/base/AndroidManifest.xml
java/com/example/base/assets # contains Android assets
java/com/example/base/res    # contains Android resources
java/com/example/base/Base.java
java/com/example/base/base.iml

base.iml包含以下内容:

<content url="file://$MODULE_DIR$">
  <sourceFolder url="file://$MODULE_DIR$"
                isTestSource="false"
                packagePrefix="com.example.base" />
  <sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" />
  <excludeFolder url="file://$MODULE_DIR$/res" />
</content>

当我构建依赖于我的库项目的 Android 应用程序项目时,出现错误:

[myapp] java.util.zip.ZipException: duplicate entry: res/drawable/image_shadow.9.png

在“项目结构”对话框中,我将项目编译器输出配置为项目out根目录下的目录。当我尝试构建我的 Android 项目时,我注意到我的 Android 资源的副本最终位于该out/production/base/com/example/base/res/文件夹下。

我的假设是,我的 Android 资源被视为“普通”Java 资源(您将使用 加载的类型Class.getResource()),这就是它们被复制到out/production的原因,这反过来又导致了duplicate entry我看到的异常。

知道是否是这种情况吗?如果是这样,我怎样才能防止这些文件被复制?在 Eclipse<classpathentry>中,文件中的元素.classpath有一个excluding属性,该属性采用 glob 模式来防止这种行为。

4

2 回答 2

1

我遇到了类似的问题,因为该main目录被标记为“来源”。

因此,在项目结构中,对于 Android 方面,在“结构”选项卡下,我有:

... Resources directory: .../src/main/res ...

在模块的正常“源”选项卡下,main目录下src已标记为“源”。

我通过使 Sources 选项卡看起来像这样来修复它:

- src (unmarked) - main (unmarked) - java (Sources) - res (Resources)

所以我猜这个错误是因为 res 东西被打包到 zip 中作为源和资源,因此重复。

于 2016-05-11T14:31:16.587 回答
0

您应该有一个项目结构,如:

  • 项目/src/main/res
  • 项目/src/main/assets
  • 项目/src/main/java
  • 项目/src/main/AndroidManifest.xml

无论如何,对于 res 文件夹,您应该有一个这样的条目:

    <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
于 2014-02-03T20:52:00.587 回答