Pertanyaan Cara menggunakan Gradle untuk menghasilkan file proyek Eclipse dan Intellij untuk proyek Android


Apakah mungkin untuk menghasilkan file proyek Eclipse dan Intellij untuk proyek Android menggunakan Gradle?

Di maven kita akan lakukan mvn eclipse:eclipse dan di PlayFramework kami akan melakukannya play eclipsify. Apakah Gradle memiliki fitur ini untuk proyek Android?

Saya telah menginstal Gradle (1.6) dan Android SDK Manager (22.0.1) dijelaskan sini

Ini adalah file build.gradle saya:

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')
    }
}

Dan kemudian saya menjalankan perintah:

gradle clean build cleanEclipse eclipse

Ini membangun baik-baik saja, tetapi ketika saya mengimpor proyek ke Eclipse terlihat seperti proyek java normal.

Ada yang tahu cara mendapatkannya Gradle untuk membuat Android spesifik Gerhana file proyek?

Apakah ini fitur yang diprioritaskan oleh Gradle?

- PERBARUI -

Saya percaya ini adalah masalah. Jadi saya telah mempostingnya ke tim Alat Android masalah # 57668. Silakan bintangi mereka untuk memprioritaskan masalah :)

- PERBARUI -

Sepertinya tim Android Tools tidak melihat masalah ini. Jadi untuk sekarang saya telah mengonversinya Android Studio di mana saya dapat mengimpor proyek gradle saya dengan dependensi melalui IDE.


32
2017-07-04 12:52


asal


Jawaban:


Gradle sendiri adalah alat build generik, tidak dibuat khusus untuk Android.

Semua fungsi diaktifkan menggunakan plug-in. Secara tradisional, membangun plug-in tidak menghasilkan struktur proyek. Itulah pekerjaan alat khusus proyek. Plug-in android untuk Gradle mengikuti ini.

Masalahnya adalah arus itu android alat di SDK menghasilkan tipe struktur proyek lama (semut membangun). Struktur proyek baru hanya dapat dibuat melalui Android Studio.

Ada konsep archetypes dalam alat seperti Maven, yang memungkinkan menggunakan template proyek. Gradle tidak mendukung itu (permintaan telah dibuat untuk fitur ini).

Lihat ke utas ini: http://issues.gradle.org/browse/GRADLE-1289 , beberapa pengguna telah menyediakan skrip untuk menghasilkan struktur.

Fitur Inisialisasi Build sedang berlangsung: https://github.com/gradle/gradle/blob/master/design-docs/build-initialisation.md

Mudah-mudahan seseorang dapat menulis naskah untuk melakukan itu, lihat panduan ini untuk struktur proyek baru: http://tools.android.com/tech-docs/new-build-system/user-guide

Memperbarui

Sekarang ada IDE Android resmi: Android Studio . Ini didasarkan pada Intellij dan sistem pembangunan baru berbasis Gradle.


9
2017-07-12 06:30



Seperti dijawab Terbitkan 57668 oleh tim Android (dibangkitkan oleh @arcone)

Anggota Proyek # 2 x ... @ android.com

Plugin gerhana tidak kompatibel dengan plugin android.

Anda tidak akan dapat mengimpor proyek gradle Android ke Eclipse menggunakan dukungan Gradle default di Eclipse.

Untuk membuatnya bekerja di Eclipse kita harus mengubah plugin Gradle untuk Eclipse, cara yang sama kita memodifikasi dukungan Gradle di IntelliJ

Itu adalah tim Android sedang bekerja pada plugin gradle untuk IntelliJ dan plugin gradle untuk Eclipse perlu diperbarui juga.

Apa yang mungkin dengan Eclipse sekarang adalah

.1. mengimpor proyek sebagai proyek umum

.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. Taruh 2 Eclipse. "dot" file ke dalam modul /OpenSpritz-Android/app/src/main dan /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. Impor sebagai Kode Android yang Ada ke dalam Ruang Kerja

results

Anda kemudian dapat menelusuri kode dengan cara yang akrab, tetapi bahkan setelah itu Anda tidak akan dapat menjalankan Eclipse ADT.

.4.

Sekarang Anda dapat menjalankan tugas dan membangun dengan gradle CLI atau Nodeclipse / Enide Gradle untuk Eclipse (pasar)

start

diskusikan di https://github.com/Nodeclipse/nodeclipse-1/issues/148


2
2018-04-15 06:29



Berikut ini bekerja untuk saya

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

Sumber - http://blog.gouline.net/2013/11/02/new-build-system-for-android-with-eclipse/

Sampel - https://github.com/krishnaraj/oneclipboard


2
2018-05-10 11:42



Ada empat masalah dengan kombinasi plugin Gradle 'com.android.application' dan 'eclipse': Pertama, konfigurasi classpath tidak ditambahkan ke classpath Eclipse, tetapi ini mudah diperbaiki. Kedua, sesuatu harus dilakukan tentang .AAR-dependensi. Ini agak sedikit rumit. Ketiga, kita perlu memasukkan sumber-sumber yang dihasilkan untuk hal-hal seperti R.java. Akhirnya, kita perlu menyertakan Android.jar sendiri.

Saya bisa meretas konfigurasi gradle yang akan menghasilkan yang tepat .classpath file untuk Eclipse dari Android Studio build.config. Efeknya sangat memuaskan bagi penggemar CPU saya, yang telah berjalan terus-menerus dengan Android Studio. Eclipse melihat proyek yang dihasilkan sebagai proyek Java yang berfungsi penuh, tetapi hanya itu.

Saya akhirnya menempatkan yang berikut langsung di build.gradle di proyek aplikasi saya:

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']
    }
}

Menjalankan gradle eclipse dan Anda akan memiliki proyek Eclipse yang dapat diimpor dan dikompilasi. Namun, proyek ini berfungsi sebagai proyek Java biasa. Untuk membangun apk, saya harus kembali ke garis perintah gradle dan mengeksekusi gradle installDebug. gradle processDebugResources mengambil perubahan dalam file XML Android dan meregenerasi file di bawah build/generated/source. Saya menggunakan program "monitor" dengan Android SDK untuk melihat log aplikasi. Sejauh ini saya belum menemukan cara untuk melakukan debug tanpa Android Studio.

Satu-satunya fitur yang saya lewatkan dari Android Studio adalah debugging (tetapi yang memiliki waktu untuk bug!) Dan mengedit sumber daya secara visual.


2
2018-03-21 10:45



Mungkin saya kehilangan sesuatu yang sangat jelas, tetapi bukan plugin gerhana apa yang kamu cari? Ini menghasilkan file .proyek serta file .classpath dan memperbarui ini sesuai kebutuhan ketika menjalankan waktu berikutnya.

Ada juga sebuah Plugin IDE, meskipun saya belum pernah menggunakan ini dan tidak bisa berbicara dengannya.

Semoga itu membantu.


1
2017-07-13 08:06



Saya telah membuat plugin Gradle baru yang menghasilkan Eclipse yang sesuai .project dan .classpath file, berdasarkan jawaban yang diberikan oleh Johannes Brodwall pada tumpukan overflow ini.

Lihat https://github.com/greensopinion/gradle-android-eclipse untuk detailnya.


0
2018-04-23 00:41