reducing ue4 apk tutorial

en Android, Tutoriales, UE4

Reduciendo el tamaño del APK

Hemos terminado el desarrollo de nuestro juego pero aun nos queda una última tarea antes de publicarlo y es reducir el tamaño del APK lo mas posible.

Google Play ha establecido un límite de 50MB para APKs con target Android 3.2 y menor (API level 13 o menor) y de 100MB para Android 4.0 y superior (API level 14 o superior).

Podemos conseguir esto con los siguientes consejos

No usar el starter content

Si seguiste el tutorial anterior sobre como realizar el setup de un proyecto Android puedes saltar al siguiente consejo. Si marcaste la opción de usar Starter Content al crear el proyecto necesitas crear un proyecto vacio y usar la herramienta de migración sobre el contenido que quieres usar.


Opciones de Packaging

Vamos al menu superior Edit -> Project settings.

En la sección Packaging, hacemos click en la flecha inferior para desplegar las opciones avanzadas,

Expand Advanced settings

y marcamos:

  • Create compressed cooked packages
  • Share Material Shader Code
  • Share Material Native Libraries
  • Exclude editor content when cooking

Desmarcamos Cook everything in the project content directory(ignores list of maps below) y rellenamos la lista de mapas a incluir en el paquete final usando rutas relativas /Game/Maps/xxx

Opciones de packaging

Si obtienes el error Package Native Shader Library failed for Android_ETC1 durante el proceso de empaqueta debes desmarcar: 

  • Share Material Shader Code
  • Share Material Native Libraries

En la sección project marca, en la configuración para Shipping

  • Full Rebuild
  • For Distribution


Opciones de Rendering

Max Dynamic Point Lights puede reducir el número de shaders que son generadas con la iluminación dinámica. Si el juego no utiliza iluminación dinámica entonces podemos desactivarlo  poniendo un valor entre 40

Opciones de Rendering


Eliminando plugins no necesarios

Algunos plug-ins requieren un conjunto base de assets y código para funcionar correctamente. Si el plug-in no está desactivado, los assets y el código que es necesario para hacer funcionar el plug-in no será eliminado de nuestro proyecto.

En el Menu superior hacemos click en Edit y seleccionamos Plug-in.

Ahora podemos desactivar el plugin desmarcando la opción Enable

Esta es mi lista de ejemplo de plugins desactivados, puede ser diferente a la necesaria para tu juego, prueba tu juego en profundidad para  asegurarte de que los plug-ins que estas desactivando no interfieren en la funcionalidad de tu proyecto.

  • Alembic Importer
  • Android media player
  • Android movie player
  • Apple movie player
  • Archvis character
  • Audio capture
  • AVF media player
  • Cable component
  • CharacterAI
  • CodeLite Integration
  • Facial Animation Bulk Importer
  • Google cloud Messaging
  • Kdevelop Integration
  • OculusVR
  • Perforce
  • Physx Vehicles
  • SpeedTree Importer
  • SteamVR
  • Subversion
  • UObject example plugin
  • Windows Movie player
  • WMF media player
  • XCode Integration

En este punto podemos hacer un reinicio del IDE y generar una primera build. No olvides seccionar la configuración de shipping . File->Package Project->Build Configuration->Shipping y luego File->Package Project->Android->Andorid(ETC1)


Combrueba el contenido “cooked”

Para asegurarnos que solo el contenido relacionado directamente con nuestro proyecto sea incluido en nuestro APK, podemos comprobar el contenido que se va a incluir mirando en la carpeta Cooked de nuestro proyecto. Podemos encontrar la carpeta  navegando hasta (ProjectName)\Saved\Cooked y la plataforma y el formato para el cual hemos “cocinado” nuestro proyecto. Solo podremos ver contenido en la carpeta Cooked después de completar nuestra primera build.

Cooked android folder


Lista negra de empaquetado

Ahora podemos crear un fichero de texto en Build/Platform/(Target Platform Folder) con el que podemos excluir de manera parcial o total las rutas del contenido a excluir en el empaquetado del proyecto. Podemos tener múltiples Listas negras para Depuración, Desarrollo, Test, y Shipping builds para excluir o incluir el contenido que necesite el proyecto en cada momento.

Podemos excluir el DefaultBloomKernel, este material no es necesario para juegos móviles, nunca usaremos el FFT bloom.


Modo experto  (Realiza una copia de seguridad de los ficheros que se van a editar antes de liarla)

Si nuestro juego solo utiliza la librería para incluir anuncios de google play services podemos editar la plantilla de MainActivity  para eliminar las referencias al resto de servicios de la librería de google play y evitar su inclusión en nuestro proyecto. Este cambio afecta a todos los juegos que generemos para Android puesto que vamos a editar los ficheros del engine.

Edita el arr-import.txt que se encuentra el la carpeta de UE4 Engine/Build/Android/Java y eliminamos:

com.google.android.gms,play-services-auth,9.8.0
com.google.android.gms,play-services-games,9.8.0
com.google.android.gms,play-services-nearby,9.8.0
com.google.android.gms,play-services-plus,9.8.0

y cambiamos la librería de ads por la version ads-lite

com.google.android.gms,play-services-ads,9.8.0
com.google.android.gms,play-services-ads-lite,9.8.0

aar-imports.txt original

aar-imports.txt modificado

Ahora editamos el GameActivity para eliminar las referencias a las librerias que hemos quitado de la lista, podemos eliminar la implementación del GoogleApiClient y alguna cosa mas.

Podemos encontrar el GameActivity.java en Engine\Build\Android\Java\src\com\epicgames\ue4

Incluyo ambos ficheros, el original y el modificado, puedes comparar ambos ficheros utilizando alguna herramienta como WinMerge y aplicar las diferencias en tu fichero manualmente, no te olvides de realizar una copia de seguridad del fichero!!

GameActivity


Ayudanos con este blog!

El último año he estado dedicando cada vez más tiempo a la creación de tutoriales, en su mayoria sobre desarrollo de videojuegos. Si crees que estos posts te han ayudado de alguna manera o incluso inspirado, por favor considera ayudarnos a mantener este blog con alguna de estas opciones. Gracias por hacerlo posible!


Escribe un comentario

Comentario

quince + 6 =