Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Cómo establecer el ID de aplicación

Cada app para Android tiene un ID de aplicación exclusivo similar a un nombre de paquete de Java; por ejemplo, com.example.myapp. Este ID permite identificar de manera exclusiva tu app en el dispositivo y en Google Play Store. Si deseas subir una nueva versión de tu app, el ID de aplicación (y el certificado con el que lo firmas) deberá ser el mismo que el APK original. Si cambias el ID de aplicación, Google Play Store tratará el APK como una app completamente diferente. Por lo tanto, una vez que publiques tu app, no deberás cambiar su ID.

El ID de aplicación se define con la propiedad applicationId en el archivo build.gradle de tu módulo, como se muestra aquí:

android {
        defaultConfig {
            applicationId "com.example.myapp"
            minSdkVersion 15
            targetSdkVersion 24
            versionCode 1
            versionName "1.0"
        }
        ...
    }
    

Cuando creas un proyecto nuevo en Android Studio, applicationId coincide de forma exacta con el nombre de paquete de estilo Java que elegiste durante la configuración. Sin embargo, el ID de aplicación y el nombre de paquete son independientes entre sí más allá de este aspecto. Puedes cambiar el nombre de paquete de tu código (el espacio de nombres del código) y esta acción no tendrá efecto sobre el ID de aplicación, y viceversa (aunque, nuevamente, no debes cambiar el ID de aplicación después de la publicación). Sin embargo, cambiar el nombre del paquete tiene otras consecuencias que debes tener en cuenta. Por lo tanto, consulta la sección sobre cómo cambiar el nombre del paquete.

Además, si bien el ID de aplicación es similar a un nombre de paquete de Java tradicional, las reglas de nomenclatura para el ID de aplicación son un poco más restrictivas:

  • Debe tener al menos dos segmentos (uno o más puntos).
  • Cada segmento debe comenzar con una letra.
  • Todos los caracteres deben ser alfanuméricos o debe incluirse un guión bajo [a-zA-Z0-9_].

Nota: El ID de aplicación solía estar vinculado directamente al nombre de paquete de tu código; por lo tanto, algunas API de Android usan el término "package name" en los nombres de métodos y parámetros, pero se trata en realidad del ID de aplicación. Por ejemplo, el método Context.getPackageName() muestra el ID de aplicación. No es necesario que compartas el nombre de paquete verdadero de tu código fuera del código de la app.

Precaución: si usas WebView, procura usar el nombre de tu paquete como un prefijo del ID de aplicación. De lo contrario, es posible que se generen problemas, como se describe en el error 211768.

Cómo cambiar el ID de aplicación para variantes de compilación

Cuando compilas un APK para tu app, las herramientas de compilación etiquetan el APK con el ID de aplicación definido en el bloque defaultConfig del archivo build.gradle (como se muestra a continuación). Sin embargo, si deseas crear diferentes versiones de tu app para que aparezcan como fichas separadas en Google Play Store, como una versión "gratis" y otra "pro", por ejemplo, debes crear variantes de compilación independientes, cada una con un ID de aplicación diferente.

En este caso, cada variante de compilación debe definirse como una variante de producto diferente. Para cada variante del bloque productFlavors, puedes volver a definir la propiedad applicationId o, en su lugar, agregar un segmento al ID de aplicación predeterminado usando applicationIdSuffix, como se muestra aquí:

android {
        defaultConfig {
            applicationId "com.example.myapp"
        }
        productFlavors {
            free {
                applicationIdSuffix ".free"
            }
            pro {
                applicationIdSuffix ".pro"
            }
        }
    }
    

De esta forma, el ID de aplicación para la variante de producto "gratis" es "com.example.myapp.free".

También puedes usar applicationIdSuffix para agregar un segmento según tu tipo de compilación, como se muestra aquí:

android {
        ...
        buildTypes {
            debug {
                applicationIdSuffix ".debug"
            }
        }
    }
    

Dado que Gradle aplica la configuración de tipo de compilación después de la variante de producto, el ID de aplicación para la variante de compilación "depuración gratis" ahora es "com.example.myapp.free.debug". Esta configuración resulta útil cuando deseas tener la compilación de depuración y de versión en el mismo dispositivo, debido a que no puede haber dos APK con el mismo ID de aplicación.

Recuerda que los APK con diferentes ID de aplicación se consideran apps distintas en Google Play Store. Por lo tanto, si deseas usar la misma ficha de app para distribuir varios APK que apunten a una configuración de dispositivo diferente (por ejemplo, el nivel de API), debes usar el mismo ID de aplicación para cada variante de compilación, pero otorgar a cada APK un versionCode diferente. Para obtener más información, consulta la sección Compatibilidad con varios APK.

Precaución: En lo que respecta a la compatibilidad con herramientas de SDK anteriores, si no defines la propiedad applicationId en tu archivo build.gradle, las herramientas de compilación usarán el nombre de paquete del archivo AndroidManifest.xml como ID de aplicación. En ese caso, la refactorización de tu nombre de paquete también modifica el ID de tu aplicación.

Sugerencia: Si debes hacer referencia al ID de aplicación en el archivo de manifiesto, puedes usar el marcador de posición ${applicationId} en cualquier atributo del manifiesto. Durante una compilación, Gradle reemplaza esta etiqueta por el ID de aplicación real. Para obtener más información, consulta Cómo inyectar variables de compilación en el manifiesto.

Cómo cambiar el ID de aplicación para realizar pruebas

De manera predeterminada, las herramientas de compilación aplican el ID de aplicación a tu APK de prueba de instrumentación usando el ID de aplicación para la variante de compilación específica y agregándole .test. Por ejemplo, un APK de prueba para la variante de compilación com.example.myapp.free tiene el ID de aplicación com.example.myapp.free.test.

Si bien no será necesario, podrás cambiar el ID de aplicación definiendo la propiedad testApplicationId en el bloque defaultConfig o productFlavor.

Cómo cambiar el nombre de paquete

Aunque el nombre de paquete de tu proyecto coincide con el ID de aplicación de manera predeterminada, puedes cambiarlo. Sin embargo, si deseas cambiar el nombre del paquete, ten en cuenta que ese nombre (según lo define la estructura del directorio del proyecto) siempre debe coincidir con el atributo package del archivo AndroidManifest.xml, como se muestra aquí:

<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.myapp"
        android:versionCode="1"
        android:versionName="1.0" >
    

Las herramientas de compilación de Android usan el atributo package para dos aspectos:

  • Aplican este nombre como espacio de nombres para la clase R.java generada de tu app.

    Ejemplo: Con el manifiesto anterior, la clase R será com.example.myapp.R.

  • Lo usan para resolver cualquier nombre de clase relativo que se declare en el archivo de manifiesto.

    Ejemplo: Con el manifiesto anterior, se determina que una actividad declarada como <activity android:name=".MainActivity"> es com.example.myapp.MainActivity.

Como tal, el nombre del atributo package siempre debe coincidir con el nombre de paquete básico de tu proyecto, en el que guardas tus actividades y otros tipos de código de la app. Desde luego, puede haber subpaquetes en tu proyecto, pero esos archivos deben importar la clase R.java con el espacio de nombres del atributo package, y cualquier componente de la app declarado en el manifiesto debe agregar los nombres de los subpaquetes faltantes (o usar nombres de paquete completos).

Si deseas refactorizar por completo el nombre de tu paquete, asegúrate también de actualizar el atributo package. Siempre y cuando uses las herramientas de Android Studio para cambiar los nombres de tus paquetes y refactorizarlos, estos permanecerán sincronizados de forma automática. (Si no lo hacen, el código de tu app no resolverá la clase R porque ya no se encontrará en el mismo paquete, y el manifiesto no identificará tus actividades ni otros componentes).

Siempre debes especificar el atributo package en el archivo AndroidManifest.xml principal de tu proyecto. Si cuentas con archivos de manifiesto adicionales (por ejemplo, para un tipo de producto o compilación), ten en cuenta que, en el manifiesto fusionado final, siempre se usa el nombre del paquete proporcionado por el archivo de manifiesto de mayor prioridad. Para obtener más información, consulta Cómo fusionar varios archivos de manifiesto.

Otro aspecto que debes saber: Si bien es posible que tengas un nombre diferente para el manifiesto package y el applicationId de Gradle, las herramientas de compilación copian el ID de aplicación en el archivo del manifiesto final de tu APK al final de la compilación. Por lo tanto, si inspeccionas tu archivo AndroidManifest.xml luego de una compilación, no debería sorprenderte que haya cambiado el atributo package. El atributo package es el lugar que Google Play Store y la plataforma de Android en realidad inspeccionan para identificar tu app; por lo tanto, una vez que la compilación usa el valor original (para asignar un espacio de nombres a la clase R y resolver los nombres de clase del manifiesto), descarta ese valor y lo reemplaza por el ID de aplicación.