web-dev-qa-db-ja.com

Gradleを使用してAndroidプロジェクトのEclipseおよびIntellijプロジェクトファイルを生成する方法

Gradleを使用してAndroidプロジェクトのEclipseおよびIntellijプロジェクトファイルを生成することは可能ですか?

Mavenでは、mvn Eclipse:eclipseそしてPlayFrameworkではplay eclipsify。 GradleにはAndroidプロジェクトのこの機能がありますか?

Gradle(1.6)をインストールし、Android SDK Manager(22.0.1)の説明 here

これは私のbuild.gradleファイルです:

buildscript {
    repositories {
      mavenCentral()
    }
    dependencies {
      classpath 'com.Android.tools.build:gradle:0.5.0'
    }
}

apply plugin: 'Android'
apply plugin: 'Eclipse'

sourceCompatibility = 1.7
version = '1.0.2'

repositories {
    mavenCentral()
}

dependencies {
  compile fileTree(dir: 'libs', include: '*.jar')
}

Android {
    buildToolsVersion "17" 
    compileSdkVersion 8
    defaultConfig {
        versionCode 1
        versionName "1.0"
        minSdkVersion 7
        targetSdkVersion 8
    }
    sourceSets {
        main {
              manifest.srcFile 'AndroidManifest.xml'
              Java.srcDirs = ['src']
              resources.srcDirs = ['src']
              aidl.srcDirs = ['src']
              renderscript.srcDirs = ['src']
              res.srcDirs = ['res']
              assets.srcDirs = ['assets']
        }
        instrumentTest.setRoot('tests')
    }
}

そして、次のコマンドを実行します。

gradle clean build cleanEclipse Eclipse

うまくビルドされますが、プロジェクトをEclipseにインポートすると、通常のJavaプロジェクトのように見えます。

誰でもGradleを取得してAndroid特定Eclipseプロジェクトファイル?

これはGradleによる優先機能ですか?

-UPDATE-

これは問題だと思います。だから私はAndroidツールチーム issue#57668 に投稿しました。問題に優先順位を付けるためにスターを付けてください:)

-UPDATE-

Androidツールチームはこの問題を調査中です。だから今のところ Android Studio gradleプロジェクトをインポートできる場所に変換しましたIDEを介した依存関係。

35

Gradle自体は汎用のビルドツールであり、Android用に特別に作成されたものではありません。

すべての機能はプラグインを使用して有効化されます。従来、ビルドプラグインはプロジェクト構造を生成しません。それがプロジェクト固有のツールの仕事です。 GradleのAndroidプラグインはこれに続きます。

問題は、SDKの現在のAndroidツールが古いタイプのプロジェクト構造(antビルド)を生成することです。新しいプロジェクト構造は、Android Studio。

Mavenのようなツールにはarchetypesという概念があり、プロジェクトテンプレートを使用できます。 Gradleはまだサポートしていません(この機能についてはリクエストが行われています)。

このスレッドを参照してください: http://issues.gradle.org/browse/GRADLE-1289 、一部のユーザーは、構造を生成するスクリプトを提供しています。

ビルドの初期化機能が進行中です: https://github.com/gradle/gradle/blob/master/design-docs/build-initialisation.md

それを行うスクリプトを作成できる人がいることを願っています。新しいプロジェクト構造については、このガイドを参照してください。 http://tools.Android.com/tech-docs/new-build-system/user-guide

更新

公式のAndroid=IDE: Android Studio があります。Intellijに基づいており、新しいビルドシステムはGradleベースです。

9
S.D.

Gradleプラグイン「com.Android.application」と「Eclipse」の組み合わせには4つの問題があります。最初に、構成クラスパスはEclipseのクラスパスに追加されませんが、これは簡単に修正できます。第二に、.AAR依存関係について何かをしなければなりません。これは少し面倒でした。 3番目に、R.Javaなどの生成されたソースを含める必要があります。最後に、Android.jar自体を含める必要があります。

Android St​​udio .classpathからEclipse用の適切なbuild.configファイルを生成するgradle構成を一緒にハックできました。この効果は、Android St​​udioで常に実行されていたCPUファンにとって非常に満足のいくものでした。 Eclipseは、結果のプロジェクトを完全に機能するJavaプロジェクトと見なしますが、それだけです。

私は自分のアプリプロジェクトのbuild.gradleに以下を直接入れました:

apply plugin: 'Eclipse'
Eclipse {
    pathVariables 'GRADLE_HOME': gradle.gradleUserHomeDir, "Android_HOME": Android.sdkDirectory 
    classpath {
        plusConfigurations += [ configurations.compile, configurations.testCompile ]

        file {
            beforeMerged { classpath ->
                classpath.entries.add(new org.gradle.plugins.ide.Eclipse.model.SourceFolder("src/main/Java", "bin"))
                // Hardcoded to use debug configuration
                classpath.entries.add(new org.gradle.plugins.ide.Eclipse.model.SourceFolder("build/generated/source/r/debug", "bin"))
                classpath.entries.add(new org.gradle.plugins.ide.Eclipse.model.SourceFolder("build/generated/source/buildConfig/debug", "bin"))
            }

            whenMerged { classpath ->
                def aars = []
                classpath.entries.each { dep ->
                    if (dep.path.toString().endsWith(".aar")) {
                        def explodedDir = new File(projectDir, "build/intermediates/exploded-aar/" + dep.moduleVersion.group + "/" + dep.moduleVersion.name + "/" + dep.moduleVersion.version + "/jars/")
                        if (explodedDir.exists()) {
                            explodedDir.eachFileRecurse(groovy.io.FileType.FILES) {
                                if (it.getName().endsWith("jar")) {
                                    def aarJar = new org.gradle.plugins.ide.Eclipse.model.Library(fileReferenceFactory.fromFile(it))
                                    aarJar.sourcePath = dep.sourcePath
                                    aars.add(aarJar)
                                }
                            }
                        } else {
                            println "Warning: Missing " + explodedDir
                        }
                    }
                }
                classpath.entries.removeAll { it.path.endsWith(".aar") }
                classpath.entries.addAll(aars)

                def androidJar = new org.gradle.plugins.ide.Eclipse.model.Variable(
                    fileReferenceFactory.fromPath("Android_HOME/platforms/" + Android.compileSdkVersion + "/Android.jar"))
                androidJar.sourcePath = fileReferenceFactory.fromPath("Android_HOME/sources/" + Android.compileSdkVersion) 
                classpath.entries.add(androidJar)
            }
        }
    }
}

// We need build/generated/source/{r,buildConfig}/debug to be present before generating classpath
//  This also ensures that AARs are exploded 
eclipseClasspath.dependsOn "generateDebugSources"


// Bonus: start the app directly on the device with "gradle startDebug"
task startDebug(dependsOn: "installDebug") << {
    exec {
        executable = new File(Android.sdkDirectory, 'platform-tools/adb')
        args = ['Shell', 'am', 'start', '-n', Android.defaultConfig.applicationId + '/.MainActivity']
    }
}

gradle Eclipseを実行すると、インポートおよびコンパイルできるEclipseプロジェクトが作成されます。ただし、このプロジェクトは通常のJavaプロジェクトとして機能します。 apkをビルドするには、gradleコマンドラインに戻ってgradle installDebugを実行する必要があります。 gradle processDebugResourcesはAndroid XMLファイルの変更を取得し、build/generated/sourceの下でファイルを再生成します。アプリログを表示するには、Android SDKで「モニター」プログラムを使用します。これまでのところ、Android St​​udioなしでデバッグする方法は見つかりませんでした。

Android St​​udioで見逃している唯一の機能は、デバッグ(バグの時間がある人)と視覚的なリソースの編集です。

3

Issue 57668 by Android team(raise by @arcone))

プロジェクトメンバー#2 x ... @ Android.com

Eclipseプラグインは、Androidプラグインと互換性がありません。

EclipseのデフォルトのGradleサポートを使用して、Android gradleプロジェクトをEclipseにインポートすることはできません。

Eclipseで機能させるには、EclipseのGradleプラグインを変更する必要があります。IntelliJでGradleサポートを変更するのと同じ方法です。

AndroidチームはIntelliJのgradleプラグインに取り組んでおり、Eclipseのgradleプラグインも更新する必要があります。

現在、Eclipseで可能なのは

.1。プロジェクトを一般プロジェクトとしてインポートします

.project

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>OpenSpritz-Android</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
    </buildSpec>
    <natures>
    </natures>
</projectDescription>

import-Android-gradle-as-general-project

.2。 2 Eclipseを置きます。 「ドット」ファイルをモジュールに/OpenSpritz-Android/app/src/mainおよび/OpenSpritz-Android/lib/src/main

add-Eclipse-files

.project

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>OpenSpritz-Android-app</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>com.Android.ide.Eclipse.adt.ResourceManagerBuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>com.Android.ide.Eclipse.adt.PreCompilerBuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.Eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>com.Android.ide.Eclipse.adt.ApkBuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>com.Android.ide.Eclipse.adt.AndroidNature</nature>
        <nature>org.Eclipse.jdt.core.javanature</nature>
    </natures>
</projectDescription>

.classpath

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="Java"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry kind="con" path="com.Android.ide.Eclipse.adt.Android_FRAMEWORK"/>
    <classpathentry exported="true" kind="con" path="com.Android.ide.Eclipse.adt.LIBRARIES"/>
    <classpathentry exported="true" kind="con" path="com.Android.ide.Eclipse.adt.DEPENDENCIES"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

.3。既存としてインポートAndroidコードをワークスペースに

results

慣れた方法でコードを参照できますが、それ以降でもEclipse ADTで実行することはできません。

.4。

これで、ビルドとタスクをgradle CLIまたは Nodeclipse/Ecide for Gradle for Eclipsemarketplace )で実行できます

start

https://github.com/Nodeclipse/nodeclipse-1/issues/148 で話し合う

2
Paul Verest

適切なEclipseを生成する新しいGradleプラグインを作成しました.projectおよび.classpathファイル。このスタックオーバーフローに関するJohannes Brodwallからの回答に基づいています。

詳細については、 https://github.com/greensopinion/gradle-Android-Eclipse をご覧ください。

2
David Green

次は私のために働いた

Eclipse.classpath.plusConfigurations += configurations.compile

Eclipse.classpath.file {
    beforeMerged { classpath ->
    classpath.entries.removeAll() { c -> 
        c.kind == 'src'
    }
}

withXml {
    def node = it.asNode()

    node.appendNode('classpathentry kind="src" path="src/main/Java"')
    node.appendNode('classpathentry kind="src" path="src/debug/Java"')
    node.appendNode('classpathentry kind="src" path="gen"')

    node.children().removeAll() { c ->
        def path = c.attribute('path')
        path != null && (
                path.contains('/com.Android.support/support-v4')
                )
    }
  }
}

Eclipse.project {
   name = 'AndroidGradleBasic'

   natures 'com.Android.ide.Eclipse.adt.AndroidNature'
   buildCommand 'com.Android.ide.Eclipse.adt.ResourceManagerBuilder'
   buildCommand 'com.Android.ide.Eclipse.adt.PreCompilerBuilder'
   buildCommand 'com.Android.ide.Eclipse.adt.ApkBuilder'
}

ソース- http://blog.gouline.net/2013/11/02/new-build-system-for-Android-with-Eclipse/

サンプル- https://github.com/krishnaraj/oneclipboard

2
Krishnaraj

たぶん私は非常に明白な何かを見逃していますが、 Eclipseプラグイン あなたが探しているものではありませんか?これにより、.projectファイルと.classpathファイルが生成され、以降の実行時に必要に応じてこれらが更新されます。

IDEAプラグイン もありますが、私はこれを使用したことはなく、話せません。

お役に立てば幸いです。

1
Myles