2012-10-22 9 views
11

Ben bir Android kütüphane projesini içeren intellij Aşağıdaki dizin yapısı aşağıdaki gibi:IntelliJ'nin kaynakları kaynak derleyicinin çıktı dizinine kopyalamasını nasıl engellerim?

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 aşağıdakileri içerir:

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

Kitaplığıma bağlıdır bir Android uygulama projesi oluştururken Proje sTRU yılında

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

: Proje, bir hata alıyorum çağırma iletişim kutusu, proje derleyici çıktısı projemizin kökü altında bir out dizini olarak yapılandırıldı. Android projemi oluşturmaya çalışırken, Android kaynaklarının kopyalarının out/production/base/com/example/base/res/ klasörünün altında olduğunu fark ettim.

Varsayımım benim Android kaynaklar onlar da ben duplicate entry duruma neden olur out/production, kopyalanacak olan neden olan, (tip Class.getResource() kullanarak yük olurdu) "normal" Java kaynakları gibi muamele ediliyor olmasıdır görme.

Bu durumun bir fikri var mı? Öyleyse, bu dosyaların kopyalanmasını nasıl engelleyebilirim? Eclipse'de, .classpath dosyasındaki <classpathentry> öğesinde, bu tür davranışları önlemek için bir glob örüntüsü alan bir excluding özniteliği vardır.

+0

Karanlıkta bir çekim olarak ' öğesini denediğimi eklemeliyim.Bunu gerektiren herhangi bir çözüm, istenmeyen bir şeydir, çünkü bu 'res' klasörünü IntelliJ'ın UI'sindeki kaynak ağacından gizler. Klasörün görünürlüğünden değil, derleme için dikkate alınmasını engellemek istiyorum. – bolinfest

+0

Sorun Android Faset ayarlarınızda olabilir, muhtemelen yanlış dizin burada "res" olarak yapılandırılmıştır. '.iml' dosyaları olmadan daha fazla söyleyemem. "= CrazyCoder

+0

benim faset standart klişe sahip olduğuna inanıyorum/res "/> Bu yüzden tüm şeyi yapıştırmama izin vermiyor. PaketPrefix ve Android kütüphane projeleriyle bu etkileşimin daha önce test edilip edilmediğini merak ediyorum. – bolinfest

cevap

0

Sen gibi bir proje yapıya sahip olmalıdır:

  • proje/src/main/res
  • proje/src/main/aktifler
  • proje/src/main/java
  • proje/

Neyse src/main/AndroidManifest.xml, res klasörü için böyle bir girdi olmalıdır:

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

Benim için çalışmadı mı: (Daha fazla öneriniz var mı? – bentzy

1

Benzer bir sorunla karşılaştım çünkü main dir "Kaynaklar" olarak işaretlendi. Proje yapısında Yani

, Android yönü için, "Yapı" sekmesi altında vardı:

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

Ve modül için normal "Kaynakları" sekmesi altında, src altında main dir vardı "Kaynaklar" olarak işaretlendi.

ben gibi kaynaklar sekmesi göz yaparak bunu sabit:

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

yüzden res şeyler zip kaynakları ve kaynaklar gibi dolayısıyla çoğaltılması hem paketlenmiş ediliyor çünkü hata sanırım.

İlgili konular