36

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

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

ここで説明されているGradle(1.6)とAndroid SDK Manager(22.0.1)をインストールしました

これは私の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 が優先する機能ですか?

- アップデート -

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

- アップデート -

Android ツール チームがこの問題を調査しているようには見えません。そのため、今のところ、IDE を介して依存関係を含む gradle プロジェクトをインポートできるAndroid Studioに変換しました。

4

6 に答える 6

3

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

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

app-project の 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 コマンド ラインに戻って .exe を実行する必要がありgradle installDebugます。gradle processDebugResourcesは、Android XML ファイルの変更を取得し、.xml の下にあるファイルを再生成しますbuild/generated/source。Android SDK で「モニター」プログラムを使用して、アプリのログを表示します。これまでのところ、Android Studio なしでデバッグする方法は見つかりませんでした。

私が Android Studio に欠けている唯一の機能は、デバッグ (ただし、バグを修正する時間はありません!) と、リソースを視覚的に編集することです。

于 2016-03-21T10:45:31.850 に答える
2

以下は私のために働いた

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

于 2014-05-10T11:42:35.623 に答える