Version: 5.4
Solución de Problemas en Desarrollo para Android
Reporte de fallas en Android

Al Interior del Proceso de Construcción para Android

El proceso de construcción de una aplicación Android se realiza en dos pasos:

  1. El paquete de aplicación (archivo .apk) es generado con todas las librerías requeridas y los assets serializados.

  2. El paquete de aplicación es desplegado en el dispositivo.

Ir a File > Build Settings… o File > Build & Run para abrir la caja de dialogo de los Build Settings.

Cuando “Build” sea seleccionado en el dialogo de los “Build settings” solamente el primer paso se ha completado. Oprimir “Build and Run” realiza ambos pasos. Ingresar Cmd+B invoca la construcción y ejecución automática, y el último archivo utilizado se asume como el objetivo de construcción.

Si usted selecciona Build en la caja de dialogo de los Build Settings, Unity hace el paso 1.

En el primer intento de construir una aplicación Android, Unity podría preguntarle sobre la ubicación del SDK de Android, el cual es requerido para construir e instalar tu aplicación Android en tu dispositivo.

Al construir la app de Android, asegúrate que el dispositivo tenga marcados las casillas de verificación en las configuraciones del dispositivo para “USB Debugging” y “Allow mock locations”.

Ejecute el comando adb devices encontrado en su carpeta Android SDK/platform-tools, para que el sistema operativo puede ver su dispositivo. Esto debería funcionar para Mac y Windows.

Unity construye un archivo de aplicación (archivo .apk) para que que dispongas de él, y también lo instala en el dispositivo conectado.

En algunos casos, su aplicación no se va a auto-iniciar (por ejemplo iPhone), por lo que tiene que desbloquear la pantalla, y en algunos casos raros encontrar la aplicación nueva instalada en el menú.

Compresión de Texturas

Debajo de los Build Settings también puedes encontrar la opción Texture Compression . Por defecto, Unity usa el formato de textura ETC1/RGBA16 para texturas que no tienen sobreescrituras individuales en el formato de textura (ver Texture 2D / Per-Platform Overrides).

If you want to build an application archive (an .apk file) targeting a specific hardware architecture, use the Texture Compression option to override this default behavior. Any texture that is set to not be compressed is left alone; only textures using a compressed texture format use the format selected in the Texture Compression option.

Para asegurarse que la aplicación sólo sea desplegada en dispositivos que soporten la compresión de textura seleccionada, Unity editará el AndroidManifest para incluir etiquetas que coincidan con el formato seleccionado.

Permisos agregados automáticamente al manifest de construcción

Unity automatically adds certain permissions to the manifest. The logic is defined in the file PlatformDependent/AndroidPlayer/Editor/Managed/PostProcessor/Tasks/GenerateManifest.cs :: SetPermissionAttributes. For example, if your script code references Application.internetReachability, Unity automatically adds android.permission.ACCESS_NETWORK_STATE to the manifest. You can edit GenerateManifest.cs to remove it.

Lo siguiente es el contenido de /GenerateManifest.cs :: SetPermissionAttributes:

private void SetPermissionAttributes(PostProcessorContext context,

AndroidManifest manifestXML,

AssemblyReferenceChecker checker)

{

// Add internet permission if it's necessary

if (_developmentPlayer || PlayerSettings.Android.forceInternetPermission || doesReferenceNetworkClasses(checker))

manifestXML.AddUsesPermission("android.permission.INTERNET");


if (checker.HasReferenceToMethod("UnityEngine.Handheld::Vibrate"))

manifestXML.AddUsesPermission("android.permission.VIBRATE");


if (checker.HasReferenceToMethod("UnityEngine.iPhoneSettings::get_internetReachability")

|| checker.HasReferenceToMethod("UnityEngine.Application::get_internetReachability"))

manifestXML.AddUsesPermission("android.permission.ACCESS_NETWORK_STATE");


if (checker.HasReferenceToMethod("UnityEngine.Input::get_location")

|| checker.HasReferenceToMethod("UnityEngine.iPhoneInput::get_lastLocation")

|| checker.HasReferenceToMethod("UnityEngine.iPhoneSettings::get_locationServiceStatus")

|| checker.HasReferenceToMethod("UnityEngine.iPhoneSettings::get_locationServiceEnabledByUser")

|| checker.HasReferenceToMethod("UnityEngine.iPhoneSettings::StartLocationServiceUpdates")

|| checker.HasReferenceToMethod("UnityEngine.iPhoneSettings::StopLocationServiceUpdates"))

{

manifestXML.AddUsesPermission("android.permission.ACCESS_FINE_LOCATION");

manifestXML.AddUsesFeature("android.hardware.location.gps", false /*encourage gps, but don't require it*/);

// This is an implied feature, make it not required to support Android TV

manifestXML.AddUsesFeature("android.hardware.location", false);

}


if (checker.HasReferenceToType("UnityEngine.WebCamTexture"))

{

manifestXML.AddUsesPermission("android.permission.CAMERA");

// By default we don't require any camera since a WebCamTexture may not be a crucial part of the app.

// We need to explicitly say so, since CAMERA otherwise implicitly marks camera and autofocus as required.

manifestXML.AddUsesFeature("android.hardware.camera", false);

manifestXML.AddUsesFeature("android.hardware.camera.autofocus", false);

manifestXML.AddUsesFeature("android.hardware.camera.front", false);

}
  • Proyecto Android Google

Genere un proyecto que pueda ser abierto por Android Studio. Simplemente siga los siguientes pasos:

  • Descargue Android Studio.

  • Exporte el proyecto de Unity con la casilla de verificación Google Android project seleccionada.

  • Abra Android Studio:
    • Go to File > Import Project. Choose a path (For example: If your project was exported to C:\MyProjects, pick C:\MyProjects\<Product Name\> path).
    • Escoja Import Destination Folder
    • Si le pregunta que re-cargue un proyecto en el dialogo Language Level Changed, escoja sí.
  • Tenga en cuenta: Si usted quiere depurar su aplicación, usted debe configurar android:debuggable=“true” en AndroidManifest.xml, no se le olvide configurarlo a false una vez haya terminado.

Solución de Problemas en Desarrollo para Android
Reporte de fallas en Android