我在 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 模式来防止这种行为。