Android 如何防止IntelliJ将资源复制到项目编译器输出目录中?

Android 如何防止IntelliJ将资源复制到项目编译器输出目录中?,android,intellij-idea,Android,Intellij Idea,我在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

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

我的假设是,我的Android资源被视为“普通”Java资源(使用
Class.getResource()
加载的类型),这就是为什么它们被复制到
out/production
,这反过来又导致我看到的
重复条目
异常


你知道情况是否如此吗?如果是,如何防止这些文件被复制?在Eclipse中,
.classpath
文件中的
元素有一个
排除
属性,该属性采用全局模式来防止这种行为。

您应该有一个类似以下的项目结构:

  • 项目/src/main/res
  • 项目/src/main/资产
  • project/src/main/java
  • project/src/main/AndroidManifest.xml
无论如何,对于res文件夹,您应该有如下条目:

    <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />

我遇到了类似的问题,因为
main
dir被标记为“Sources”

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


...
资源目录:…/src/main/res
...

在模块的正常“源”选项卡下,
src
下的
main
dir被标记为“源”

我通过使“源”选项卡如下所示来修复它:


-src(未标记)
-主(未标记)
-java(源代码)
-秘书(资源)


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

我应该补充一点,我在黑暗中尝试了
的东西。任何需要它的解决方案都有点不可取,因为这会从IntelliJ的UI中的源代码树中隐藏我的
res
文件夹。我想将文件夹排除在编译考虑之外,而不是不可见。问题可能在于您的Android方面设置中,可能是将错误的目录配置为
res
。没有你的
.iml
文件,我就说不出更多了。我相信我的facet有标准的样板文件:所以似乎不允许我粘贴整个东西。我很好奇,这种与packagePrefix和Android库项目的交互是否已经过测试?@CrazyCoder这里有一个识别错误的最简单的例子:我相信这是IntelliJ中的一个错误——有解决方法吗?通常是
AndroidManifest.xml
(和
res
,以及其他文件夹)位于源根目录之外,在您的项目中,模块的根目录被配置为源目录,因此该文件将根据
设置
|
编译器
|
资源模式处理。作为一种解决方法,您可以(对于您不希望以这种方式处理的其他文件和目录也是如此)。
    <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />