Kotlin Intermedio
> Sesión 08
> Ejemplo 3
- Generar una aplicación de debug.
- Realizar pruebas con un .aab.
- Crear la llave para la firma de aplicaciones release.
- Firmar nuestra aplicación para su subida a tienda.
- Android Studio instalado en nuestra computadora.
- Seguir la instrucción específica para esta sesión.
Después de ejecutar todos los pasos necesarios y recomendados de preparación de la app para su lanzamiento, estamos listos para preparar el archivo de la aplicación. Los formatos en los que los podemos subir son los siguientes:
- .aab (Android App Bundle)
- .apk (Android Package)
Ambos formatos requieren la generación de una clave y su keystore para poder ser firmados y subidos a la tienda.
- Vamos a generar nuestra app de debug, para esto, abrimos la opción Build > Build Bundle(s) / Apk(s) > Build Apk(s)
Esto nos generará un archivo apk firmada con la llave de debug, dicha llave se genera la primera vez que se corre el proyecto. La llave se encuentra en la siguiente ruta:
- ~/.android/ en OS X y Linux
- ___C:\Users\user.android\ ___ en Windows Vista y Windows 7, 8 y 10
El archivo apk utiliza la variante seleccionada en Build Variants. El apk generado se encuentra en {directorio raíz}/app/build/outputs/apk/{flavor}/{buildType}/app-{flavor}-{buildType}.apk.
- El archivo apk es un archivo que contiene todos los elementos para correr la aplicación en distintas densidades de dispositivos y versiones del OS; es similar a un archivo .zip, por lo tanto, cualquier herramienta de descompresión permite hurgar en el contenido de este. Podemos analizar su contenido por medio del Apk Analyzer, que nos permite ver el contenido de la app. Arrastramos el apk al IDE o bien, en la opción Build / Analyze Apk y seleccionando el archivo. También podemos analizar el apk al momento de generarla, pues saltará una ventana con las siguientes opciones:
Se abrirá una ventana con los siguientes archivos:
- classes.dex, Archivo(s) que contiene(n) el código fuente de nuestra app en formato Dex (el bytecode de la máquina virtual Dalvik).
- res, recursos no compilados en resources.arc, contienen recursos para diversas versiones de móviles.
- resources.arsc, Recursos precompilados como strings, colors etc.
- META.INF, Metadatos de la app como el archivo Manifest y la firma de la app (CERT.RSA).
- kotlin clases "built-in" de Kotlin como String, Int y otras utilidades.
- AndroidManifest.xml, Archivo xml en formato binario.
Existen otros directorios que se generan en apps más complejas, como con bibliotecas 3rd party.
- Un keystore es un repositorio asegurado con una contraseña, donde se guardan una serie de llaves y certificados. Cada llave tiene asignado un alias para identificarse y una contraseña para protegerse. Para firmar nuestra aplicación de release, debemos generar un keystore con una signing key, que es una llave privada que genera un certificado (una llave pública), que es el que encontramos en el META_INF de nuestro APK; esto asegura a Google que nuestra aplicación es auténtica. Una vez que una app es subida, la llave no puede ser cambiada, por lo que perderla implica no poder volver a actualizar la app. La llave de debug es genérica e insegura, por lo que no es válida como una llave de release.
IMPORTANTE, el keystore debe ser guardado de forma segura y no debe ser subida como archivo en un CVS (Control Version System) como Git.
para generar el keystore, iremos a Build > Generate Signed Bundle / Apk, Seleccionamos Apk, le hacemos clic a siguiente, y en la nueva ventana hacemos click a create new:
- Key Store Path es el directorio donde se guardará nuestro keystore.
- Password y confirm es la contraseña del keystore.
La siguiente sección es para la llave de firma:
- Alias es el texto para identificar nuestra llave.
- Password y confirm es la contraseña de la llave.
- validity brinda una fecha de expiración a partir de la generación de la llave (recomendable poner una cantidad de años alta).
La siguiente sección es para el certificado y ninguno de estos campos es obligatorio, por lo que describiremos solo un par de los campos.
- First and Last name es el nombre del desarrollador (no recomendable poner nombre si la app es de una empresa ).
- Country Code: código del país de dos dígitos, ejemplo: MX.
Hacemos clic en OK y la llave será generada. Ahora tenemos la ventana previa con todos los datos de nuestra llave capturados:
a) Pulsamos al checkbox Remember Passwords para no tener que capturarlos nuevamente y damos Next. b) Seleccionamos el build variant deseado freeRelease. c) Seleccionamos V1 (Jar Signature) y V2 (Full APK Signature) para tener mayor seguridad. d) Finalizamos el proceso.
- El Android App Bundle es un archivo que contiene todos los recursos y el código compilado de la app, pero que a diferencia de un Apk no es un archivo instalable, sino que sirve como fuente para extraer lo necesario y compilar un apk específico para un dispositivo, con una arquitectura determinada y con un idioma en concreto; esto reduce los recursos dentro del archivo y, por lo tanto, el tamaño de la aplicación. Si un dispositivo viene configurado con ciertos idiomas y posteriormente se configura uno nuevo, el recurso para este idioma (si existe en él) se descarga automáticamente de la Play Store.
Advertencia: Google hará obligatorio la subida de un Android App Bundle para que la aplicación esté en la tienda.
La estructura de un app bundle es la siguiente:
Para generarlo simplemente se selecciona la opción Build > Build Bundle(s)/APK(s) > Build Bundle(s)
Y el proceso para firmarlo es el mismo que con un APK.