Agregando extensiones y librerias de terceros - jackgris/wikiLibGDX_es GitHub Wiki
- Enlaces utiles
- Guía para build.gradle
- Dependencias en Libgdx
- Dependencias externas
- Declarando dependencias para HTML
El manejo de dependencias con Gradle es fácil de entender, y tiene muchos enfoques diferentes. Si estas familiarizado con Maven o Ivy, Gradle es totalmente compatible con ambos enfoques, así como ser capaz de usar enfoques personalizados. Si usted no está familiarizado con Gradle, hay grandes recursos en su sitio para aprender a usarlo, se recomienda que usted veas estas lecturas para sentirse cómodo con Gradle.
Los proyectos Gradle son manejados por los archivos build.gradle
en sus directorios raíz. Si usted ha utilizado el gdx-setup.jar para construir su proyecto libgdx te darás cuenta de la estructura: Estructura Ejemplo
El directorio raíz, y cada subdirectorio contiene un archivo build.gradle
, para mayor claridad vamos a definir las dependencias en el archivo build.gradle
del directorio raíz. (Tenga en cuenta que se puede hacer en cada uno de los scripts build.gradle
en los subdirectorios, es sólo más limpio y más fácil de seguir cuando se maneja en un solo lugar)
Aquí hay una pequeña sección de el buildscript por defecto que se genera a partir de la configuración:
EL script completo variará ligeramente dependiendo de en qué otros módulos tiene, ver aquí
buildscript {
//Defines the repositories that are required by this script, e.g. android plugin
repositories {
//maven central repository, needed for the android plugin
mavenCentral()
//repository for libgdx artifacts
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
//
dependencies {
//Adds the android gradle plugin as a dependency of this buildscript
classpath 'com.android.tools.build:gradle:0.9+'
}
}
allprojects {
apply plugin: "eclipse"
apply plugin: "idea"
version = "1.0"
ext {
appName = "%APP_NAME%"
gdxVersion = "1.0-SNAPSHOT"
roboVMVersion = "0.0.10"
}
repositories {
//Defines all repositories needed for all projects
mavenLocal();
mavenCentral()
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
}
project(":core") {
apply plugin: "java"
dependencies {
//Defines dependencies for the :core project, in this example the gdx depdendency
compile "com.badlogicgames.gdx:gdx:$gdxVersion"
}
}
project(":desktop") {
apply plugin: "java"
dependencies {
//Defines dependencies for the :desktop project, adds dependency on the :core project as well as
//The gdx lwjgl backend and native dependencies
compile project(":core")
compile "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion"
compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
}
}
project(":android") {
apply plugin: "android"
configurations { natives }
dependencies {
//defines dependencies for the :android project, depends on the :core project,
//and also the android backends and all platform natives. Note the 'natives' classifier
//in this project
compile project(":core")
compile "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a"
}
}
Las dependencias se configuran en el archivo raíz build.gradle
como se muestra en la guía el build.gradle de arriba. Para agregar una dependencia externa a un proyecto, debe declarar la dependencia correctamente en la parte correcta del build.script.
(Algunas) extensiones Libgdx son "mavenized" y empujadas al repo de Maven, lo que significa que las podemos colocar muy fácilmente en nuestros proyectos desde el archivo build.gradle
. Se puede ver en la lista de abajo del formato que estas dependencias toman. Si está familiarizado con maven, observe el siguiente formato:
compile '<groupId>:<artifactId>:<version>:<classifier>'
Tomemos un ejemplo rápido para ver cómo funciona esto en el archivo raíz build.gradle
.
Como se mencionó anteriormente, no es necesario modificar los archivos build.gradle
individuales en cada una de las diferentes carpetas específicas de la plataforma (por ejemplo, -desktop,-ios,-core). Usted sólo tendrá que modificar el archivo build.gradle
raíz.
Aquí podemos ver las dependencias de la Extensión FreeType, para poder tener esta dependencia en nuestro proyecto Android le decimos que la queremos . Para eso localizamos nuestro rama project(":android")
en el build.gradle
del directorio raíz:
project(":android") {
apply plugin: "android"
configurations { natives }
dependencies {
compile project(":core")
compile "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a"
}
}
compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi-v7a"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86"
project(":android") {
apply plugin: "android"
configurations { natives }
dependencies {
compile project(":core")
compile "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a"
compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi-v7a"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86"
}
}
Y ya hemos terminado, nuestro proyecto android tiene ahora la dependencia freetype. Fácil eh.
Algunas de las extensiones de libgdx Mavenized que están listas para importar desde el script build.gradle incluyen:
Core Dependency:
compile "com.badlogicgames.gdx:gdx-box2d:$gdxVersion"
Desktop Dependency:
compile "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-desktop"
Android Dependency:
compile "com.badlogicgames.gdx:gdx-box2d:$gdxVersion"
natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-armeabi"
natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-armeabi-v7a"
natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-x86"
iOS Dependency:
natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-ios"
HTML Dependency:
compile "com.badlogicgames.gdx:gdx-box2d-gwt:$gdxVersion:sources"
compile "com.badlogicgames.gdx:gdx-box2d:$gdxVersion:sources"
Core Dependency:
compile "com.badlogicgames.gdx:gdx-bullet:$gdxVersion"
Desktop Dependency:
compile "com.badlogicgames.gdx:gdx-bullet-platform:$gdxVersion:natives-desktop"
Android Dependency:
compile "com.badlogicgames.gdx:gdx-bullet:$gdxVersion"
natives "com.badlogicgames.gdx:gdx-bullet-platform:$gdxVersion:natives-armeabi"
natives "com.badlogicgames.gdx:gdx-bullet-platform:$gdxVersion:natives-armeabi-v7a"
natives "com.badlogicgames.gdx:gdx-bullet-platform:$gdxVersion:natives-x86"
iOS Dependency:
compile "com.badlogicgames.gdx:gdx-bullet:$gdxVersion"
natives "com.badlogicgames.gdx:gdx-bullet-platform:$gdxVersion:natives-ios"
HTML Dependency: Not compatible!
Core Dependency:
compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
Desktop Dependency:
compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop"
Android Dependency:
compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi-v7a"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86"
iOS Dependency:
compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-ios"
HTML Dependency: Not compatible!
Core Dependency:
compile "com.badlogicgames.gdx:gdx-controllers:$gdxVersion"
Desktop Dependency:
compile "com.badlogicgames.gdx:gdx-controllers-desktop:$gdxVersion"
compile "com.badlogicgames.gdx:gdx-controllers-platform:$gdxVersion:natives-desktop"
Android Dependency:
compile "com.badlogicgames.gdx:gdx-controllers:$gdxVersion"
compile "com.badlogicgames.gdx:gdx-controllers-android:$gdxVersion"
iOS Dependency: Not supported, but you can still compile and run your iOS app. Controllers just won't be available
HTML Dependency:
compile "com.badlogicgames.gdx:gdx-controllers:$gdxVersion:sources"
compile "com.badlogicgames.gdx:gdx-controllers-gwt:$gdxVersion"
compile "com.badlogicgames.gdx:gdx-controllers-gwt:$gdxVersion:sources"
Core Dependency:
compile "com.badlogicgames.gdx:gdx-tools:$gdxVersion"
Desktop Dependency:
compile "com.badlogicgames.gdx:gdx-tools:$gdxVersion"
Android Dependency: Not compatible!
iOS Dependency: Not compatible!
HTML Dependency: Not compatible!
- Note: this extension also requires the Box2D extension
Core Dependency:
compile "com.badlogicgames.box2dlights:box2dlights:1.2"
Android Dependency:
compile "com.badlogicgames.box2dlights:box2dlights:1.2"
HTML Dependency:
compile "com.badlogicgames.box2dlights:box2dlights:1.2:sources"
Agregando repositorios externos
Gradle busca los archivos definidos como dependencias mirando a travez de todos los repositorios difinidos en el buildscript. Gradle comprende varios formatos de repositorios, los que incluyen Maven e Ivy.
Bajo allporjects
, se puede ver cómo se definen los repositorios. He aquí un ejemplo:
allprojects {
repositories {
// Remote Maven repo
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
// Maven Central Repo
mavenCentral()
// Local Maven repo
mavenLocal()
// Remote Ivy dir
ivy { url "http://some.ivy.com/repo" }
// Local Ivy dir
ivy { url "../local-repo" }
}
}
Agregando dependencias
Las dependencias externas son definidas por su grupo, nombre, versión y a veces atributos.
dependencies {
compile group: 'com.badlogicgames.gdx', name: 'gdx', version: '1.0-SNAPSHOT', classifier: 'natives-desktop'
}
Gradle nos permite definir las dependencias externas en un formato corto, la anterior configuración sería igual que esto:
dependencies {
compile 'com.badlogicgames.gdx:gdx:1.0-SNAPSHOT:natives-desktop'
}
Si prefiere utilizar los repositorios de maven para manejar los archivos .jar locales, estos dos comandos van a tomar cualquier archivo .jar local a intalarlo (y a su código) en su repositorio maven local.
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
mvn install:install-file -Dfile=<path-to-source-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging> -Dclassifier=sources
Para luego configurar gradle e incluir su nueva dependencia, edite su archivo build.gradle en el directorio raíz de su proyecto y edite la entrada del proyecto core:
project(":core") {
...
dependencies {
...
compile "<group-id>:<artifact-id>:<version>"
compile "<group-id>:<artifact-id>:<version>:sources"
}
}
Después de esto usted tendrá que actualizar sus dependencias para verlo en su IDE, por lo que debe ejecutar:
Command line - $ ./gradlew --refresh-dependencies
Eclipse - $ ./gradlew eclipse
IntelliJ - $ ./gradlew idea
Además, no hay que olvidar que todas las dependencias que se agregan de esta manera también se deben incluir en el archivo de herencia de GWT.
Si tiene una dependencia que no fue mavenized, todavía puede depender de ella!
Para hacer esto, en el archivo raíz build.gradle
de su proyecto, agregue la sección dependencies { } como siempre, y agregue lo siguiente:
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}
Esto incluirá todos los archivos jar. En el directorio libs como dependencias.
NOTA: "dir" es relativo a la raíz del proyecto, si agrega las dependencias a su proyecto android, 'libs' tendrían que estar en el directorio android/. Si ha añadido las dependencias en el proyecto core, se necesitara que 'libs' se encuentre en core/directory.
Un ejemplo con un script mucho mas completa:
project(":android") {
apply plugin: "android"
configurations { natives }
dependencies {
compile project(":core")
compile "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a"
compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi-v7a"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86"
compile fileTree(dir: 'libs', include: '*.jar')
}
}
Es destacable que estas dependencias de archivos no están incluidas en el descriptor de las dependencias para su proyecto, sino que se incluyen en las dependencias del proyecto transitivo dentro de la misma contrucción de el.
Universal-Tween-Engine by jar
- Descargar los jars
- Coloque los jars en el directorio core/libs (puede cambiar esto si lo desea)
- Cambie su script build.gradle en el directorio raíz como lo siguiente:
- Localice el :core al final, donde se declaran las dependencias del proyecto core
- Agregue esta línea en las dependencias
compile fileTree(dir: 'libs', include: '*.jar')
- Su script ahora debe parecerce a este:
project(":core") {
...
dependencies {
...
compile fileTree(dir: 'libs', include: '*.jar')
}
}
Finalmente refresque el proyecto Gradle, desde la línea de comandos o desde el plugin de su IDE.
Universal-Tween-Engine by locally mavenizing maven
Primero descargue y extraiga el tween-engine-api desde el siguiente repositorio (https://code.google.com/p/java-universal-tween-engine/). Para instalar estas dependencias y los archivos fuentes en su repositorio Maven local, utilice el siguiente comando:
` mvn install:install-file -Dfile=tween-engine-api.jar -DgroupId=aurelienribon -DartifactId=tweenengine -Dversion=6.3.3 -Dpackaging=jar
mvn install:install-file -Dfile=tween-engine-api-sources.jar -DgroupId=aurelienribon -DartifactId=tweenengine -Dversion=6.3.3 -Dpackaging=jar -Dclassifier=sources ` Con el tween engine jars en su repositorio Maven local, agregue la dependencia en su build.gradle en el archivo que se encuentra en la raíz del proyecto.
project(":core") {
...
dependencies {
...
compile "aurelienribon:tweenengine:6.3.3"
compile "aurelienribon:tweenengine:6.3.3:sources"
}
}
Agregue la herencia a los archivos GdxDefinition.gwt.xml y GdxDefinitionSuperdev.gwt.xml
<inherits name='aurelienribon.tweenengine'/>
Entonces podrá actualizar sus dependencias
$ ./gradlew --refresh-dependencies
Gwt es especial, por lo que con el fin de permitir que el compilador de GWT sepa de qué módulos depende el proyecto, y heredera, es necesario que éste sepa.
Esto se hace con el archivo gwt.xml
en el sub directorio gwt. Usted tendrá que hacer los cambios tanto en GdxDefinition.gwt.xml
como en GdxDefinitionSuperdev.gwt.xml
.
El gwt.xml por defecto
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit trunk//EN" "http://google-web-toolkit.googlecode.com/svn/trunk/distro-source/core/src/gwt-module.dtd">
<module rename-to="html">
<inherits name='com.badlogic.gdx.backends.gdx_backends_gwt' />
<inherits name='com.badlogic.mygame.MyGame' />
<entry-point class='com.badlogic.mygame.client.GwtLauncher' />
<set-configuration-property name="gdx.assetpath" value="../android/assets" />
</module>
Dependemos del backend de GWT en libgdx, así como el proyecto core, por lo que tenemos que definirlo en un tag. Así que cuando usted añade su dependencia a través de los métodos anteriores, es necesario añadirlo aquí también!
Estas son las extensiones libgdx que se admiten en GWT
- Libgdx Core -
<inherits name='com.badlogic.gdx.backends.gdx_backends_gwt' />
- Box2d -
<inherits name='com.badlogic.gdx.physics.box2d.box2d-gwt' />
- Box2dLights -
<inherits name='Box2DLights' />
- Controllers -
<inherits name='com.badlogic.gdx.controllers.controllers-gwt' />
Un ejemplo: The Universal Tween Engine
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit trunk//EN" "http://google-web-toolkit.googlecode.com/svn/trunk/distro-source/core/src/gwt-module.dtd">
<module rename-to="html">
<inherits name='com.badlogic.gdx.backends.gdx_backends_gwt' />
<inherits name='com.badlogic.mygame.MyGame' />
//Let's inherit tween
<inherits name='aurelienribon.tweenengine'/>
<entry-point class='com.badlogic.mygame.client.GwtLauncher' />
<set-configuration-property name="gdx.assetpath" value="../android/assets" />
</module>
- Indice
- Sección anterior: Commandline
- Siguiente sección: Trabajando a partir del código