2013-11-21 19 views
5

私は既存のAndroidプロジェクトをgradleとIntelliJ 12で扱おうとしています。 これまでは私はそれをmavenと一緒に使っていましたが、それはgradleとか、私は、サブフォルダが少なくて済むことを知っておく必要があります。IntelliJ、Android and Gradle

私のAndroidプロジェクトは、クリーンなJavaライブラリ(:コア)と実際のアプリケーション(:アンドロイド)に分かれています。これら2つのプロジェクトはどちらも私のメインプロジェクトフォルダにあります。

私はこれでGradleの仕事を得るために理想的なソリューションを処理することだと思います
~-+MainProject 
    |--+core 
    | L--build.gradle 
    |--+android 
    | L--build.gradle 
    |--build.gradle 
    L--settings.gradle 

:及び(コア)(:アンドロイド)プロジェクトネストされたプロジェクトとして、私は単純に開始するMainProjectソースフォルダ内の私のCMDとなることができることを意味しグラベルの仕事。

は、しかし、私はさまざまな問題を思い付いた:

  • のGradleの依存関係のみをコアプロジェクトinstrumentatetionTest中にも、メインプロジェクトファイルでもない意味
    • に含まれている
        が正しくとして設定されているすべての ディレクトリです

        ソース/テストディレクトリ
      1. IntelliJはgradle(AndroidSDK、junit、mockito、コアプロジェクトのもの)の依存関係として追加したクラスを解決しません。
        • は、プラグインのアイデア 'を使用しようとしたが、どちらか私は間違ってそれを使用するか、それが
  • は、私が何かをしている必要がありAPK
    • を構築するため、重複する依存関係のエラーが出る問題を解決していません4.11とmockito-コア:1.9.5私は、私が試したものを
    • を追加しました:JUnitのをどう
      • はdependencysを削除 - >ビルドはコースcould'ntのいくつかのクラスが
      • を解決することが原因となる障害が発生しましたJUnitのに変え
      • : - : - 設定 4.5+他のいくつかのスレッドでsuggesedとしてここでは、すべての
  • で>変化なし* .gradle configuartions

    MainProjectです。 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" } 
        } 
    } 
    

    :コア - ビルド。Gradleの

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

    :アンドロイド

    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 
    

    私はあなたが正しい考えを持っているので、誰かが、その

    MFG Dornathal

    答えて

    6

    よしで私を助けることができる願っていますが、そこにありますまだ必要な変更はほとんどありません。次のように

    あなたのルートbuild.gradleファイルは次のようになります。

    subprojects { 
        repositories { 
         mavenCentral() 
        } 
    } 
    
    • は、あなただけがローカルにインストールレポを使用している場合はmavenLocal()を含める必要があります。ほとんどの人はそうではなく、あなたのプロジェクトの中にあなたが必要とするものは何もないことを示しています。
    • mavenCentral()は、使用していたmaven URLを置き換えるために使用できます。
    • アンドロイドプロジェクトのbuildscriptを変更するだけで、アンドロイドプロジェクトのbuild.gradleにローカライズする必要があります。

    コアプロジェクトのsettings.gradlebuild.gradleが良好です。しかし、Androidのプロジェクトのためのあなたのbuild.gradle

    は、いくつかの変更を必要とします:

    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' 
    } 
    
    • アンドロイドプラグインを含めることで、私たちは、インストールされているSDKに直接リンクしています。これは、もはやアンドロイド依存性を含める必要がなくなったことを意味します:compile 'com.google.android:android:4.1.1.4'
    • junitを含める必要はありません。 SDKによって提供されているので、これを使用します。注意すべき点は、SDKにはJUnit 3のみが含まれていることです。
    • 実際にアンドロイドテストに使用しない限り、mockitodexmakerを含める必要はありません。 Javaライブラリのテストにのみ使用されている場合は、ここでは必要ありません。

    は、あなたの質問に答えるために:

    1. 私はあなたがここに求めているのかわからないんだけど。あなたがファイルなどを持っているディレクトリを含むあなたのプロジェクト構造にすべきなら、それは助けになるかもしれません。
    2. あなたの勘違いは正しいです。テスト用のマッチャーを提供するHamcrestは、バージョン1.1と1.3の間でAPIに大きな変更を加えました。 JUnit 4.11はHamcrest 1.3に依存しています。しかし、Mockito 1.9.5はHamcrest 1.1に依存します。したがって、両方が含まれている場合、1.3は1.1 & Mockitoを上書きします。 JUnit 4.5に戻すことも問題です。 Junit 4.5には、POMの依存関係ではなく、ファイルとしてのHamcrest 1.1 jarが含まれています。このため、同じファイルの2つのバージョンがある場合に問題が発生します。 JUnit 4.10はあなたがここに行きたい方法です。これはHamcrest 1.1に依存しており、ファイルとしてではなくPOMに含まれています。勝つ!私もこの問題を抱えていました。私がそれを理解する最良の方法は、Maven Central上のPOMファイルを見て、彼らが私に教えてくれるものを見ることでした。

    最終的なメモ。Intellij 12は、Gradleマルチプロジェクトビルドを処理できません。そのためには、Android StudioまたはIntellij 13に切り替える必要があります。

    +0

    超nice答えMarius。ポイント1の彼の質問は、アンドロイドのbuild.gradleファイルからテストソースディレクトリを指定する方法に関するものだと思います。しかし、それは私にとっても全く明らかではありません。私はAndroidStudioを使用していますので、ここで私の答えが役立つかどうか分かりません。 JUnitのヒントありがとうございます;) – khose

    +0

    Androidスタジオは既にADTがバンドルされているIntelliJなので、違いはありません。 – Dornathal

    +0

    確かにjUnit 4.11ではSDKにJUnit 3のみが含まれていた場合、依存関係が必要でした – RichieHH