Skip to content

Most visited

Recently visited

navigation

Configurar el ID de aplicación

Cada app de 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 cargar una nueva versión de tu app, el ID de aplicación (y el certificado con el que la firmaste) debe ser igual al del APK original. Si cambias el ID de aplicación, Google Play Store considera el APK como una app completamente diferente. Por lo tanto, una vez que publiques tu app, no debes cambiar el ID de aplicación.

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 esto no tendrá efecto sobre el ID de aplicación, y viceversa (aunque, nuevamente, no debes cambiar el ID de aplicación una vez que la hayas publicado). Sin embargo, el cambio de nombre de paquete tiene otras consecuencias que deberías conocer; por lo tanto, consulta la sección sobre cómo modificar el nombre de 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:

Nota: el ID de aplicación solía estar directamente vinculado 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 tu aplicación. No es necesario compartir el nombre de paquete real de tu código fuera del código de la app.

Advertencia: Si usas WebView, considera utilizar el nombre de paquete como prefijo en el ID de aplicación; de lo contrario, puedes experimentar problemas como los que se describen en el error 211768.

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 versiones diferentes de tu app para que aparezcan como elementos por separado en Google Play Store (por ejemplo, la versión “gratuita” y “profesional”), debes crear variantes de compilación diferentes que tengan ID de aplicación individuales.

En este caso, cada variante de compilación debe definirse como una clase de producto diferente. Para cada clase dentro 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 clase de producto “gratuita” 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"
        }
    }
}

Debido a que Gradle aplica la configuración del tipo de compilación luego de la clase de producto, el ID de aplicación para la variante de compilación de “depuración gratuita” será “com.example.myapp.free.debug”. Esto 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 como apps distintas en Google Play Store. Por lo tanto, si en cambio deseas usar el mismo directorio 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.

Advertencia: 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 usan 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 Inyectar variables de compilación en el manifiesto.

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, puedes cambiar el ID de aplicación definiendo la propiedad testApplicationId en el bloque defaultConfig o productFlavor.

Nota: Para evitar conflictos de nombres con la app en proceso de prueba, las herramientas de compilación generan la clase R para tu APK de prueba con un espacio de nombres según el ID de la aplicación de prueba, en lugar del nombre de paquete definido en el archivo de manifiesto.

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 tu nombre de paquete, ten en cuenta que dicho 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:

Como tal, el nombre del atributo package siempre debe coincidir con el nombre de paquete básico de tu proyecto, en el cual conservas tus actividades y otros tipos de código de la app. Puede haber, por supuesto, subpaquetes en tu proyecto, pero esos archivos deben importar la clase R.java usando 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 de actualizar el atributo package también. 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 permanecen sincronizados, el código de tu app no resolverá la clase R porque ya no se encuentra en el mismo paquete, y el manifiesto no identificará tus actividades u 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 una clase de producto o un tipo de compilación), asegúrate de que el nombre de paquete proporcionado por el archivo con mayor prioridad del manifiesto se use siempre en el manifiesto fusionado final. Para obtener más información, consulta Fusionar varios archivos de manifiesto.

Un aspecto más que debes conocer: si bien es posible que tengas un nombre diferente para el atributo package del manifiesto y el applicationId de Gradle, las herramientas de compilación copian el ID de la 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 te sorprendería ver que el atributo package cambió. 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.

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.