У меня есть следующая структура каталогов в 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, чтобы предотвратить такое поведение.