2012-10-22 13 views
11

Ho la seguente struttura di directory all'interno di IntelliJ, che contiene un progetto di libreria Android:Come si impedisce a IntelliJ di copiare le risorse nella directory di output del compilatore del progetto?

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 

Il base.iml contiene quanto segue:

<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> 

Quando costruisco un progetto di applicazione Android che dipende dalla mia biblioteca progetto, ottengo un errore:

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

Nel progetto Stru finestra di dialogo, ho configurato l'output del compilatore di progetto come directory out nella radice del mio progetto. Quando provo a creare il mio progetto Android, ho notato che le copie delle mie risorse Android finiscono nella cartella out/production/base/com/example/base/res/.

mia ipotesi è che le mie risorse Android vengono trattati come "normali" le risorse Java (il tipo che si caricherebbe utilizzando Class.getResource()), motivo per cui essi vengono copiati out/production, che a sua volta causa l'eccezione duplicate entry che io sono vedendo.

Qualche idea se questo è il caso? In tal caso, come posso impedire che questi file vengano copiati? In Eclipse, l'elemento <classpathentry> nel file .classpath ha un attributo excluding che accetta un modello glob per impedire questo tipo di comportamento.

+0

Devo aggiungere che ho provato la cosa '' come uno sparo al buio.Qualsiasi soluzione che lo richiede è in qualche modo indesiderabile perché nasconde la mia cartella 'res' dall'albero dei sorgenti nell'interfaccia utente di IntelliJ. Voglio escludere la cartella dalla considerazione per la compilazione, non dall'essere visibile. – bolinfest

+0

Il problema potrebbe essere nelle impostazioni della sfaccetta Android, probabilmente la directory errata è configurata lì come 'res'. Non posso dire altro senza i file '.iml'. – CrazyCoder

+0

Credo che il mio aspetto ha il boilerplate di serie:

risposta

0

Si dovrebbe avere una struttura di progetto come:

  • progetto/src/main/res
  • progetto/src/main/attività
  • progetto/src/main/java
  • progetto/src/main/AndroidManifest.xml

in ogni caso, per la cartella res si dovrebbe avere una voce come questa:

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

Non ha funzionato per me :(Altri suggerimenti? – bentzy

1

Ho riscontrato un problema simile perché la directory main era contrassegnata come "Sorgenti".

Quindi, in struttura di progetto, per l'aspetto di Android, nella scheda "Struttura" Ho avuto:

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

E sotto la scheda normale "Sorgenti" per il modulo, il main dir sotto src avuto stato contrassegnato come "Fonti".

ho riparato facendo la scheda aspetto fonti come:

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

quindi credo che l'errore è perché la res le cose vengono confezionati nella zip sia come fonti e le risorse di conseguenza la duplicazione.

Problemi correlati