LIBGDX Empaquetado distribución.

De MediaWiki
Ir a la navegación Ir a la búsqueda

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).