Как использовать Gradle для создания файлов проектов Eclipse и Intellij для проектов Android
Можно ли с помощью Gradle генерировать файлы проектов Eclipse и Intellij для проектов Android?
В 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 создавать файлы проекта Eclipse для Android?
Это приоритетная функция Gradle?
-- ОБНОВИТЬ --
Я верю, что это проблема. Итак, я опубликовал это в выпуске команды Android Tools № 57668. Пожалуйста, отметьте это для них, чтобы расставить приоритеты в вопросе:)
-- ОБНОВИТЬ --
Не похоже, что команда Android Tools изучает эту проблему. Итак, сейчас я перешел на Android Studio, где я могу импортировать свой проект gradle с зависимостями через IDE.
6 ответов
Сам Gradle - это универсальный инструмент для сборки, он не создан специально для Android.
Все функции включены с помощью плагинов. Традиционно, подключаемые модули сборки не генерируют структуру проекта. Это работа инструментов, специфичных для проекта. Плагин Android для Gradle следует за этим.
Проблема в том, что ток android
Инструмент в SDK генерирует старый тип структуры проекта (Ant builds). Новая структура проекта может быть сгенерирована только через Android Studio.
Есть понятие archetypes
в таких инструментах, как Maven, которые позволяют использовать шаблоны проектов. 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.
Существует четыре проблемы с комбинацией плагинов Gradle 'com.android.application' и 'eclipse': во-первых, пути к классам конфигурации не добавляются в путь к классам Eclipse, но это легко исправить. Во-вторых, что-то должно быть сделано с.AAR-зависимостями. Это было немного сложнее. В-третьих, нам нужно включить сгенерированные источники для таких вещей, как R.java. Наконец, нам нужно включить сам Android.jar.
Я был в состоянии взломать конфигурацию Gradle, которая будет генерировать правильную .classpath
файлы для Eclipse из Android Studio build.config
, Эффекты были очень приятны для моего вентилятора процессора, который постоянно работал с Android Studio. Eclipse рассматривает полученный проект как полностью функциональный проект Java, но только это.
В итоге я поместил следующее прямо в build.gradle в моем app-проекте:
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 Studio.
Единственные функции, которые мне не хватает в Android Studio, - это отладка (но у кого есть время на ошибки!) И визуальное редактирование ресурсов.
Как ответили в выпуске 57668 команда Android (поднято @arcone)
Участник проекта № 2 x...@android.com
Плагин eclipse не совместим с плагином Android.
Вы не сможете импортировать проект Gradle для Android в Eclipse, используя поддержку Gradle по умолчанию в Eclipse.
Чтобы заставить его работать в Eclipse, нам нужно будет изменить плагин Gradle для Eclipse, так же, как мы модифицируем поддержку Gradle в IntelliJ.
То есть команда Android работает над плагином Gradle для IntelliJ, и плагин Gradle для Eclipse также нуждается в обновлении.
Что теперь возможно с Eclipse
0,1. импортировать проект как общий проект
.project
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>OpenSpritz-Android</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
</natures>
</projectDescription>
0,2. Поставь 2 Затмения. "расставить" файлы на модули в /OpenSpritz-Android/app/src/main
а также /OpenSpritz-Android/lib/src/main
.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>
0,3. Импортировать как существующий код Android в рабочую область
затем вы можете просмотреть код знакомым способом, но даже после этого вы не сможете работать с Eclipse ADT.
+0,4.
Теперь вы можете запустить сборку и задачи с gradle
CLI или Nodeclipse/Enide Gradle для Eclipse( торговая площадка)
обсудить на https://github.com/Nodeclipse/nodeclipse-1/issues/148
Я создал новый плагин Gradle, который генерирует соответствующий Eclipse .project
а также .classpath
файлы, основанные на ответе Йоханнеса Бродволла об этом переполнении стека.
См. https://github.com/greensopinion/gradle-android-eclipse для получения подробной информации.
Следующее сработало для меня
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/
Может быть, я упускаю что-то очень очевидное, но разве вы не ищете плагин Eclipse? Это создает файл.project, а также файл.classpath и обновляет их по мере необходимости при последующем запуске.
Существует также плагин IDEA, хотя я не использовал его и не могу с ним разговаривать.
Надеюсь, это поможет.