LIBGDX Empaquetado distribución.

De MediaWiki
Saltar a: navegación, buscar

UNIDADE 2: Empaquetado e distribución

Introdución

Nesta sección imos ver como podemos crear o arquivo que vai ser descargado polos xogadores para instalar o xogo no seu computador / tablet.

Información na wiki: https://github.com/libgdx/libgdx/wiki/Gradle-on-the-Commandline#packaging-the-project

Vídeo explicativo: https://www.youtube.com/watch?v=shxHON23qNo


O proceso é moi sinxelo. Temos que ir ó cartafol onde se atopa o noso proxecto dende a consula de ms-dos (Windows) ou dende un terminal en Linux.

Tamén podemos ir dende o propio AndroidStudio. Será esta a opción a escoller:

LIBGDX UD2 Empaquetado 1.jpg


Unha vez nel, e dependendo da plataforma, faremos:

Desktop

Windows:

  1. gradlew desktop:dist


Linux:

  1. ./gradlew desktop:dist

Unha vez xerado teremos o arquivo coa extensión jar no cartafol desktop/build/libs/ do proxecto.


Android

As aplicación Android poder xerarse firmadas ou non. A firma consiste nun proceso polo que 'asociamos' un certificado cunha información (persoa ou empresa que publica a aplicación / xogo, data de validez do certificado,....) ó xogo desenvolto.

Se quixeramos levar o xogo o Market de Android teríamos que firmar a aplicación. Dito certificado serviríanos despois para subir novas versións do xogo ao Market.

Nota: Se vos da un erro ao intentar instalar a aplicación sen firmar, teredes que xerala firmada. Nas últimas versión pasaba isto.

Graficamente

  • Para xerar unha APK certificada temos que ter un almacén de claves (keystore) onde gardar os certificados das diferentes aplicacións firmadas. Dito almacén terá asociado un contrasinal.
  • Posteriormente cada certificado creada de cada aplicación poderá ser gardado no mesmo almacén e tamén dito certificado terá unha clave asociada.



Nota: Os datos do almacén-certificado son:

  • Key Store Path: Ruta onde gardar o almacén de claves.
  • Password / Confirm: Password e confirmación da password do almacén de claves. Ten que ter a lo menos 6 caracteres.
  • Alias: Un alias para o keystore. Pode ser o mesmo que o nome ou unha abreviación do mesmo.
  • Validity (years): Aquí indicamos o tempo que vai ser válida a nosa keystore en anos.


Isto vai crear unha clave (certificado_xogo no exemplo) que vai ser gardada nun almacén de claves de nome almacen.keystore (un almacén pode ter moitas claves gardadas).
Os datos a pedir serán:
  • Contrasinal da key (dúas veces). Ten que ter a lo menos 6 caracteres.
  • Nome e apelidos.
  • Nome da unidade da organización (por exemplo Compras, Ventas, ...)
  • Nome da organización.
  • Cidade.
  • Provincia.
  • Código do país: ES.O campo de Country Code, se pode consultar no listado da ISO 3166-1


  • Se agora queremos engadir unha nova Key (certificado) ao almacén de claves, teremos que repetir o proceso, pero na primeira pantalla, deberemos:

Dende consola/terminal

Sen firmar

Windows:

  1. gradlew android:assembleRelease


Linux:

  1. ./gradlew android:assembleRelease

Unha vez xerado teremos o arquivo coa extensión apk no cartafol android/build/outputs/apk do proxecto.

Se agora intentades instalar dita aplicación nun dispositivo móbil vos avisará que tedes que permitir instalar aplicación dende fontes descoñecidas. Isto é así xa que a aplicación que se xera non está firmada.

Nota: Parece ser que dende que se cambiou a Gradle a xeración de proxectos Android sen firmar leva consigo que cando intentedes instalalo nun dispositivo móbil vos dea o erro de Aplicación no instalada. Se é ese o caso probade a firmar a aplicación.

Firmada

  • Primeiro temos que ir cunha consola / terminal ó cartafol onde se atope o JDK ou JRE instalado no equipo. Ó cartafol bin (jre/bin ou jdk/bin). Se a ruta xa está engadida ó path non faría falla facer este paso.
  • Despois temos que teclear o seguinte:
  1. keytool -genkey -v -keystore almacen.keystore -alias xogoplatega -keyalg RSA -keysize 2048 -validity 10000
Isto vai crear unha clave (xogoplatega) que vai ser gardada nun almacén de claves de nome almacen.keystore (un almacén pode ter moitas claves gardadas).
Os datos a pedir serán:
  • Contrasinal do almacén de datos (dúas veces).
  • Nome e apelidos.
  • Nome da unidade da organización.
  • Nome da organización.
  • Cidade.
  • Provincia.
  • Código do país: ES

NOTA: Coidado en Windows 7 xa que se abrides unha consola de ms-dos en modo non administrador non terá permiso para crear o almacén. Podedes ir a outro cartafol con permisos de escritura e referenciar o keytool coa ruta completa: c:\archivos de programa\java\jreXXXX\bin\keytool ....


Confirmaremos e xa teremos xerado a clave coa que imos 'firmar' o noso xogo.

Podemos verificar que o almacén e a clave son correctos:

  1. keytool -list -v -keystore almacen.keystore


A partir de aquí dispoñemos de dúas opcións:

Opción a)

Firmar a aplicación de forma manual.

Primeiro debemos xerar o apk sen firmar. Podemos facelo como está indicado nun punto anterior, dende a consola/terminal ou outra forma de facelo é graficamente:

LIBGDX UD2 Empaquetado 9.jpg


Despois debemos executar esta orde dende un terminal:

  1. jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ruta_e_arquivo_almacen_datos omeuxogo.apk nome_do_alias

Nota: O executable jarsigner se atopa no cartafol bin do SDK instalado.


Para verificar se todo está correcto:

  1. jarsigner -verify -verbose -certs nome_xogo.apk
Opción b)
  • Agora debemos modificar o arquivo build.gradle que se atopa no raíz do proxecto. O podemos facer dende o propio AndroidStudio se prememos dúas veces sobre o arquivo.
LIBGDX UD2 Empaquetado 11.jpg


Debemos ir ás sección proyect(":android") e escribir o marcado:
  1. project(":android") {
  2.     apply plugin: "android"
  3.  
  4.     configurations { natives }
  5.  
  6.     dependencies {
  7.         compile project(":core")
  8.         compile "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion"
  9.         natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi"
  10.         natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a"
  11.         natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86"
  12.     }
  13.     android {
  14.         //...
  15.         signingConfigs {
  16.             releaseSigning {
  17.                 storeFile file("willBeReplaced")
  18.                 storePassword ""
  19.                 keyAlias ""
  20.                 keyPassword ""
  21.             }
  22.         }
  23.         buildTypes {
  24.             release {
  25.                 signingConfig signingConfigs.releaseSigning
  26.             }
  27.         }
  28.     }
  29. }


  • Agora debemos de poñer este código o comezo do arquivo:
  1. import groovy.swing.SwingBuilder
  • E este código ó final do arquivo.
  1. gradle.taskGraph.whenReady { taskGraph ->
  2.     if(taskGraph.hasTask(':android:assembleRelease')) {
  3.         def _store = ''
  4.         def _storePassword = ''
  5.         def _keyPassword = ''
  6.         def _keyAlias = ''
  7.         if(System.console() == null) {
  8.             new SwingBuilder().edt {
  9.                 def inputStore
  10.                 def inputStorePass
  11.                 def inputKey
  12.                 def inputKeyPass
  13.                 dialog(modal: true,
  14.                         title: 'Key Store',
  15.                         alwaysOnTop: true,
  16.                         resizable: false,
  17.                         locationRelativeTo: null,
  18.                         pack: true,
  19.                         show: true
  20.                 ) {
  21.                     vbox {
  22.                         label(text: "Key store:")
  23.                         inputStore = textField(text: "myKeyStore.keystore")
  24.                         label(text: "Key store password:")
  25.                         inputStorePass = passwordField()
  26.                         label(text: "Key alias:")
  27.                         inputKey = textField(text: "myAlias")
  28.                         label(text: "Key password:")
  29.                         inputKeyPass = passwordField()
  30.                         button(defaultButton: true, text: 'OK', actionPerformed: {
  31.                             _store = inputStore.text
  32.                             _storePassword =  new String(inputStorePass.password);
  33.                             _keyAlias =  inputKey.text
  34.                             _keyPassword =  new String(inputKeyPass.password)
  35.                             dispose();
  36.                         })
  37.                     }
  38.                 }
  39.             }
  40.         } else {
  41.             _store = System.console().readLine("\nLocation of the key store: ")
  42.             _storePassword = System.console().readPassword("\nKey store password: ")
  43.             _storePassword = new String(_storePassword)
  44.             _keyAlias = System.console().readLine("\nKey alias: ")
  45.             _keyPassword = System.console().readPassword("\nKey password: ")
  46.             _keyPassword = new String(_keyPassword)
  47.         }
  48.         if(_storePassword.size() <= 0 || _keyPassword.size() <= 0 ||
  49.                 _store.size() <= 0 || _keyAlias.size() <= 0) {
  50.             throw new InvalidUserDataException("You must enter a key store password and key password.")
  51.         }
  52.         if(!file(_store).exists()){
  53.             throw new InvalidUserDataException("Could not find key store ["+_store+"]")
  54.         }
  55.         //set signing values to android project
  56.         project("android").android.signingConfigs.releaseSigning.storeFile = file(_store)
  57.         project("android").android.signingConfigs.releaseSigning.storePassword = _storePassword
  58.         project("android").android.signingConfigs.releaseSigning.keyAlias = _keyAlias
  59.         project("android").android.signingConfigs.releaseSigning.keyPassword = _keyPassword
  60.     }
  61. }


  • Unha vez cambiado o arquivo build.gradle será necesario sincronilzalo proxecto:
LIBGDX UD2 Empaquetado 10.jpg
  • Agora só queda xerar a apk firmada, como fixemos antes:
Windows:
  1. gradlew android:assembleRelease


Linux:
  1. ./gradlew android:assembleRelease
Durante o proceso se nos pedirá:
  • A ruta e nome onde se atopa o almacén de datos. Debemos indicar a ruta xunto có nome do almacén (incluída extensión).
  • O password do almacén.
  • A nome da clave gardada (o alias).
  • O password da clave.


Unha vez xerado teremos o arquivo coa extensión apk no cartafol android/build/outputs/apk do proxecto e xa poderíamos subilo ao Appstore. Lembrar que se o facemos graficamente a ruta é diferente, xa que o xera no cartafol indicado no asistente (por defecto Ruta_do_proxecto/android).



TAREFA 2.15 A FACER: Esta parte está asociada á realización dunha tarefa.


IOS

Windows:

  1. gradlew ios:createIPA


Linux:

  1. ./gradlew ios:createIPA


Unha vez xerado teremos o arquivo coa extensión IPA no cartafol ios/build/robovm do proxecto.


HTML

Windows:

  1. gradlew html:dist


Linux:

  1. ./gradlew html:dist


Unha vez xerado teremos os arquivos HTML, javascript e arquivos do cartafol assets no cartafol html/build/dist/ do proxecto. Este é o contido que hai que subir ó servidor web (por exemplo Apache).



Nova ferramenta de empaquetado

A partires de Maio do 2014 é posible distribuír o xogo coa máquina virtual de java 'incrustada' dentro do arquivo, de tal forma que podemos xogar en computadores onde o software de java non estea instalado.

O tamaño do arquivo aumenta considerablemente (sobre 12MB, pero depende do xogo).

Enlace á nova: http://www.badlogicgames.com/wordpress/?p=3428 Enlace como usala: https://github.com/libgdx/packr




-- Ángel D. Fernández González -- (2015).