Agregando extensiones y librerias de terceros - jackgris/wikiLibGDX_es GitHub Wiki

2.6 Agregando extensiones y librerías de terceros

Contenido


Enlaces utiles

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.

Guia para build.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"
        }
    }

Dependencias en Libgdx

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

Sabemos que nuestra extensión FreeType tiene estas declaraciones:

    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"

Así que todo lo que necesitamos hacer es agregarlo en el final de las dependencias

    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.

Extensiones disponibles para Libgdx

Algunas de las extensiones de libgdx Mavenized que están listas para importar desde el script build.gradle incluyen:

Box2D Gradle

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"

Bullet Gradle

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!


FreeTypeFont Gradle

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!


Controllers Gradle

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"

Tools Gradle

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!

Box2DLights Gradle

  • 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"

Dependencias externas

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

Mavenizing dependencias locales

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.

Dependencias de archivos

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.

Ejemplos de dependencias externas

Universal-Tween-Engine by jar

  1. Descargar los jars
  2. Coloque los jars en el directorio core/libs (puede cambiar esto si lo desea)
  3. 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

Declarando dependencias para HTML

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!

Heredando de extensiones en Libgdx

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>

Enlaces

⚠️ **GitHub.com Fallback** ⚠️