2013-11-21 40 views
5

Varolan Android Projemi gradle ve IntelliJ 12 ile çalışmaya çalışıyorum. Daha önce maven ile çalışmıştım ama bu yüzden bu kadar esnek görünmüyordu. Bilmem gereken daha az alt klasöre ihtiyacım var.IntelliJ, Android ve Gradle

Android projem temiz bir java kitaplığına (çekirdek) ve asıl Uygulamaya (: android) bölünmüştür. Bu iki proje hem ana proje klasörümde. (: Çekirdek) ve (: android) iç içe projelerde proje ben sadece başlatmak için MainProject kaynak klasöründe benim cmd ile olabilir, yani

~-+MainProject 
    |--+core 
    | L--build.gradle 
    |--+android 
    | L--build.gradle 
    |--build.gradle 
    L--settings.gradle 

Ben bu tedavi etmektir ile ideal çözüm gradle iş bulmak için düşünmek gradle görevleri.

Ancak farklı problemler ile geldi:

  • Gradle bağımlılıkları sadece çekirdek projesi instrumentatetionTest ne de ana proje dosyalarında ne demektir
    • dahildir
        doğru olarak ayarlanmış herhangi dizinleri vardır

          : kaynak/test dizinleri
        • IntelliJ I gradle bağımlılık olarak (çekirdek projesi AndroidSDK, jUnit, mockito alınanlarla) ilave bir sınıfları gidermez
        • eklentisi ide kullanmaya çalıştı ama her iki yanlış kullanılmış veya
  • şey için gereken APK
    • oluşturmak için yinelenen bağımlılık Hata almak sorunu çözmedi JUnit ile yapın: 4.11 ve Mockito-çekirdek: 1.9.5 Ben ne denedim
    • ekledi:
      • dependencys silme -> build
      • çözülecek ders can'ti bazı sınıfları neden başarısız
      • JUnit değişen: Ayarlar -: - diğer bazı dizisindeki suggesed olarak 4.5+> değişiklik
    • tüm

  • de burada * .gradle configuartions

    MainProject vardır. gradle

    include ':core', ':android' 
    

    -

    build.gradle
    buildscript { 
        repositories { 
         mavenCentral() 
        } 
        dependencies { 
         classpath 'com.android.tools.build:gradle:0.6.+' 
        } 
    } 
    
    subprojects { 
        repositories { 
         mavenLocal() 
         maven { url "http://repo.maven.apache.org/maven2" } 
        } 
    } 
    

    : Yapı - yapı.gradle

    apply plugin: 'java' 
    
    dependencies { 
        testCompile 'junit:junit:4.11' 
        testCompile 'org.mockito:mockito-core:1.9.5' 
    } 
    

    : android

    apply plugin: 'android' 
    
    repositories { 
        mavenCentral() 
    } 
    
    dependencies { 
        compile project(":core") 
    
        compile 'com.google.android:android:4.1.1.4' 
    
        instrumentTestCompile 'junit:junit:4.11' 
        instrumentTestCompile 'org.mockito:mockito-core:1.9.5' 
        instrumentTestCompile 'com.google.dexmaker:dexmaker:1.0' 
        instrumentTestCompile 'com.google.dexmaker:dexmaker-mockito:1.0' 
    
        instrumentTestCompile 'com.jayway.android.robotium:robotium-solo:3.6' 
    } 
    
    /* ... androidSettings 
    

    Sana doğru bir fikri var bu yüzden birisi, bu

    MFG Dornathal

    cevap

    6

    Alright bana yardımcı olabilir umuyoruz, ama orada bir Hala ihtiyacınız olan birkaç değişiklik. aşağıdaki gibi

    Kök build.gradle dosyası olmalıdır:

    subprojects { 
        repositories { 
         mavenCentral() 
        } 
    } 
    
    • Yalnızca yerel olarak yüklü repo kullanıyorsanız mavenLocal() eklemeniz gerekir. Çoğu insan yapmaz ve projenizdeki hiçbir şeye ihtiyacınız olmadığını gösterir. Kullandığınız maven URL'sini değiştirmek için
    • mavenCentral() kullanılabilir.
    • Sadece android proje için buildscript'i değiştirmemiz gerekiyor, bu yüzden bunu android projesinin build.gradle numaralı telefonuna yerleştirmeliyiz.

    Sizin settings.gradle ve çekirdek proje için build.gradle iyidir. Ancak android proje için Sizin build.gradle

    , bazı değişiklikler gerekir:

    buildscript { 
        repositories { 
         mavenCentral() 
        } 
        dependencies { 
         classpath 'com.android.tools.build:gradle:0.6.+' 
        } 
    } 
    
    apply plugin: 'android' 
    
    dependencies { 
        compile project(":core") 
    
        instrumentTestCompile 'com.jayway.android.robotium:robotium-solo:3.6' 
    } 
    
    • android eklentisi dahil ederek, yüklü SDK doğrudan bağlantı. Bu, artık android bağımlılığını içermememiz gerektiği anlamına geliyor: compile 'com.google.android:android:4.1.1.4'.
    • junit'u eklememiz gerekmez. SDK tarafından sağlandı, biz de bunu kullanacağız. Unutulmaması gereken bir şey, SDK'nın sadece JUnit 3'ü içermesidir.
    • Aslında android testleri için kullanmıyorsak, mockito ve dexmaker'u eklememiz gerekmez. Sadece java kütüphanesindeki testler için kullanılıyorsa, buna ihtiyacımız yok.

    sorularınıza cevap için:

    1. Burada soruyorsun emin değilim. Proje yapınızın dosyalarınızın bulunduğu dizinler de dahil olmak üzere size yardımcı olabilir.
    2. Önseziniz doğru. Testcilere eşleştiriciler sağlayan Hamcrest, 1.1 ve 1.3 sürümleri arasında API'larında bir değişiklik yaptı. JUnit 4.11'in Hamcrest 1.3'e bir bağımlılığı var. Ancak Mockito 1.9.5, Hamcrest 1.1'e bağlıdır. Yani her ikisi de dahil edildiğinde, 1.3 artık çalışmıyor 1.1 & Mockito geçersiz kılar. JUnit 4.5'e geri dönmek de bir problemdir. Junit 4.5, Hamcrest 1.1 kavanozunu POM'de bağımlılık yerine bir dosya olarak içerir. Bu, aynı dosyanın 2 sürümüne sahip olduğumuzda sorunlara neden olacaktır. JUnit 4.10, buraya gitmek istediğiniz yoldur. Bu Hamcrest 1.1'e bağımlıdır ve dosyayı bir dosya yerine POM'a dahil eder. Kazan kazan! Bununla da sorunlarım vardı ve bunu anlamanın en iyi yolu sadece Maven Central'daki POM dosyalarını incelemek ve bana ne söylediklerini görmek oldu.

    Son bir not.Intellij 12, Gradle Multi-project yapılarını işleyemiyor. Bunun için Android Studio'ya veya Intellij 13'e geçmelisiniz.

    +0

    Çok güzel cevap Marius. Bence soru 1 noktası android build.gradle dosyasından test kaynak dizinleri belirtmekle ilgili olduğunu düşünüyorum. Ama benim için de tamamen açık değil. AndroidStudio kullanıyorum, bu yüzden cevabın burada yardımcı olup olmayacağından emin değilim. JUnit ipucu için teşekkürler;) – khose

    +0

    Android Studio'nun zaten ADT ile birlikte IntelliJ olduğu gibi, herhangi bir fark olmaması gerektiğini düşünüyorum. – Dornathal

    +0

    Şüphesiz jUnit 4.11 için eğer SDK sadece JUnit 3 içeriyorsa bağımlılığa ihtiyaç duydu – RichieHH