2012-10-22 32 views
11

我内的IntelliJ以下目录结构,其中包含一个Android库项目:如何防止来自的IntelliJ复制的资源投入到项目的编译器输出目录?

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 

项目海虹之彩cture对话框,我配置了项目编译器输出是我项目根目录下的out目录。当我尝试建立我的Android项目,我发现我的Android资源的副本out/production/base/com/example/base/res/文件夹下结束。

我的假设是我的Android资源被当作“正常”的Java资源(类型,你将加载使用Class.getResource()),这就是为什么他们被复制到out/production,这反过来又导致duplicate entry例外,我看到。

任何想法,如果是这样的话?如果是这样,我怎么能防止被复制这些文件?在Eclipse中,在.classpath文件<classpathentry>元素具有excluding属性,需要一个glob模式,以防止这种行为。

+0

我应该补充一点,我试着在黑暗中拍摄''的东西。任何需要它的解决方案都是不合需要的,因为它会在IntelliJ的用户界面中隐藏源码树中的res文件夹。我想排除该文件夹被视为编译,而不是可见。 – bolinfest

+0

这个问题可能在你的Android方面设置,可能错误的目录配置为'res'。如果没有'.iml'文件,不能说更多。 – CrazyCoder

+0

我相信我的小面具有的标准样板: <组件名称= “FacetManager”> <面型= “机器人” 名称= “机器人”> <结构> <选项名= “RES_FOLDER_RELATIVE_PATH” 值=”/RES” /> SO似乎并没有让我贴了整个事情。 我很好奇这个与packagePrefix和Android库项目的交互是否已经过测试? – bolinfest

回答

0

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

  • 项目/ src目录/主/ RES
  • 项目/ src目录/主/资产
  • 项目/ src目录/主/ JAVA
  • 项目/的src/main/AndroidManifest.xml中

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

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

没有为我工作:(还有什么建议? – bentzy

1

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

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

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

而且该模块的正常的“源”选项卡下,srcmain DIR过被标记为“源”。

我固定它通过使源标签的样子:

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

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

相关问题