- sintaxis:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="string" android:sharedUserId="string" android:sharedUserLabel="string resource" android:versionCode="integer" android:versionName="string" android:installLocation=["auto" | "internalOnly" | "preferExternal"] > . . . </manifest>
- se incluye en:
- ninguno
- debe incluir:
<application>
- puede contener:
<compatible-screens>
<instrumentation>
<permission>
<permission-group>
<permission-tree>
<queries>
<supports-gl-texture>
<supports-screens>
<uses-configuration>
<uses-feature>
<uses-permission>
<uses-permission-sdk-23>
<uses-sdk>
- descripción:
- Es el elemento raíz del archivo AndroidManifest.xml. Debe contener un elemento
<application>
y especificar los atributosxmlns:android
ypackage
. - atributos:
-
xmlns:android
- Define el espacio de nombres de Android. Este atributo siempre debe estar configurado en "
http://schemas.android.com/apk/res/android
". package
- Un nombre completo de paquete de estilo de lenguaje Java para la app para Android. El nombre puede contener letras mayúsculas o minúsculas (de la "A" a la "Z"), números y guiones bajos ("_"). Sin embargo, las partes sueltas del nombre de paquetes individuales solo pueden comenzar con letras.
Cuando compilas tu aplicación en un paquete de la aplicación (APK), el sistema de compilación utiliza el atributo
package
con dos propósitos:- Aplican ese nombre como espacio de nombres para la clase
R.java
generada en tu app (que se usa a fin de acceder a los recursos de la app).Por ejemplo, si
package
se configura como"com.example.myapp"
, se crea la claseR
encom.example.myapp.R
. - Utiliza este nombre para resolver cualquier nombre de clase relativo que se declare en el archivo de manifiesto.
Por ejemplo, si se configura
package
como"com.example.myapp"
, se determina que una actividad declarada como<activity android:name=".MainActivity">
escom.example.myapp.MainActivity
.
Este nombre también es el predeterminado para el proceso de tu aplicación (consulta el atributo
process
del elemento<application>
). Además, es la afinidad predeterminada de la tarea para tus actividades (consulta el atributotaskAffinity
del elemento<activity>
).Este nombre también representa el ID de aplicación, que debe ser único a nivel universal para publicar tu app en Google Play. Sin embargo, hacia el final del proceso de compilación de APK, las herramientas de compilación anulan el nombre
package
usando la propiedadapplicationId
del archivobuild.gradle
(utilizado por los proyectos de Android Studio). Siempre y cuando mantengas el nombrepackage
del manifiesto igual al archivo de compilaciónapplicationId
, no tendrás problemas. Pero si estos dos valores difieren, consulta cómo configurar el ID de la aplicación para comprender las diferencias que hay entre el "nombre del paquete" y el "ID de la aplicación".Para evitar conflictos con otros desarrolladores, tienes que utilizar la propiedad del dominio de Internet como base para los nombres de tus paquetes (a la inversa). Por ejemplo, las aplicaciones publicadas por Google comienzan con
com.google
.Nota: Google Play prohíbe los espacios de nombres
com.example
ycom.android
.Si deseas cambiar el nombre de tu paquete después de publicar tu app, puedes hacerlo, pero no debes modificar el
applicationId
.applicationId
define la identidad única de tu app en Google Play. Por lo tanto, si lo cambias, se considerará que el APK es una app diferente, y los usuarios de la versión anterior no recibirán una actualización. Para obtener más información, consulta cómo configurar el ID de aplicación. - Aplican ese nombre como espacio de nombres para la clase
android:sharedUserId
-
Esta constante dejó de estar disponible a partir del nivel de API 29.
Los ID del usuario compartidos generan comportamientos no deterministas en el administrador de paquetes. Por lo tanto, se desaconseja su uso y es posible que se quiten en una versión futura de Android. En su lugar, las apps deberían usar mecanismos de comunicación adecuados, como servicios y proveedores de contenido, para facilitar la interoperabilidad entre componentes compartidos. Ten en cuenta que las apps existentes no pueden quitar este valor, ya que no se admite la migración desde un ID del usuario compartido. Estas apps deberían agregarandroid:sharedUserMaxSdkVersion="32"
para evitar el uso del ID del usuario compartido en instalaciones de usuarios nuevos.El nombre de un ID del usuario de Linux que se compartirá con otras apps. De manera predeterminada, Android asigna a cada app su propio ID del usuario único. Sin embargo, si este atributo tiene el mismo valor para dos o más apps, todas compartirán el mismo ID, siempre que sus conjuntos de certificados sean idénticos también. Las apps con el mismo ID de usuario pueden acceder a los datos del otro y, si lo desean, ejecutarse en el mismo proceso.
android:targetSandboxVersion
- El entorno limitado de destino para esta aplicación. Cuanto mayor sea el número de la versión de la zona de pruebas, mayor será el nivel de seguridad.
Su valor predeterminado es
1
; también puedes configurarlo como2
. Configurar este atributo en2
cambia la app a otra zona de pruebas de SELinux.Las siguientes restricciones se aplican a una zona de pruebas de nivel 2:
- El valor predeterminado de
usesCleartextTraffic
en la configuración de seguridad de red es falso. - No se permite compartir UID.
Para las Apps instantáneas Android orientadas a Android 8.0 (nivel de API 26) o superior, este atributo debe configurarse en 2. Puedes configurar el nivel de la zona de pruebas en la versión instalada de tu app al nivel 1 (el menos restrictivo) pero si lo haces, no se conservarán los datos de la app instantánea. Debes configurar el valor de la zona de pruebas de la app instalada en 2 para que los datos se mantengan desde la app instantánea hasta la versión instalada.
Una vez que se instala la app, solo puedes actualizar el valor de la zona de pruebas objetivo a un valor más alto. Para cambiar el valor de la zona de pruebas objetivo a uno menor, tienes que desinstalar la app y reemplazarla con una versión cuyo manifiesto incluya un valor más bajo para este atributo.
- El valor predeterminado de
android:sharedUserLabel
-
Esta constante dejó de estar disponible a partir del nivel de API 29.
Los ID del usuario compartidos generan comportamientos no deterministas en el administrador de paquetes. Por lo tanto, se desaconseja su uso y es posible que se quiten en una versión futura de Android. En su lugar, las apps deberían usar mecanismos de comunicación adecuados, como servicios y proveedores de contenido, para facilitar la interoperabilidad entre componentes compartidos. Ten en cuenta que las apps existentes no pueden quitar este valor, ya que no se admite la migración desde un ID del usuario compartido.Es una etiqueta legible por el usuario para la ID del usuario compartida. La etiqueta se debe configurar como una referencia a un recurso de string; no puede ser una string sin procesar.
Este atributo se introdujo en el nivel de API 3. Tiene sentido solo si también se configura el atributo
sharedUserId
. android:versionCode
- Es un número de versión interno. Solo se utiliza para determinar si una versión es más reciente que otra; los números más altos indican versiones más recientes. Este no es el número de versión que se muestra a los usuarios; ese número lo establece el atributo
versionName
.El valor se debe establecer como un número entero positivo mayor que 0. Puedes definirlo como quieras, siempre y cuando cada versión posterior tenga un número más alto. Por ejemplo, podría ser un número de compilación. O puedes traducir un número de versión en formato ".xy" a un entero codificando "x" e "y" por separado en los 16 bits inferiores y superiores. O simplemente puedes aumentar el número en uno cada vez que se lanza una nueva versión.
android:versionName
- El número de versión que se muestra a los usuarios. Este atributo se puede configurar como una string sin procesar o como una referencia a un recurso de string. La string no tiene otro propósito que el de mostrarse a los usuarios. El atributo
versionCode
contiene el número de versión significativo utilizado internamente. android:installLocation
- Es la ubicación de instalación predeterminada para la app.
Se aceptan las siguientes strings de palabras clave:
Valor Descripción " internalOnly
"La aplicación debe instalarse solo en el almacenamiento interno del dispositivo. Si esta opción está configurada, nunca se instalará la app en el almacenamiento externo. Si el almacenamiento interno está lleno, el sistema no instalará la app. Este es el comportamiento predeterminado si no defines android:installLocation
." auto
"La app puede instalarse en el almacenamiento externo, pero el sistema la instalará en el almacenamiento interno de forma predeterminada. Si el almacenamiento interno está lleno, entonces, el sistema lo instalará en el externo. Una vez instalada, el usuario puede moverla al almacenamiento interno o externo desde la configuración del sistema. " preferExternal
"La app prefiere instalarse en el almacenamiento externo (tarjeta SD). No hay garantía de que el sistema cumpla con esta solicitud. Es posible que la app esté instalada en el almacenamiento interno si el externo no está disponible o está completo. Una vez instalada, el usuario puede moverla al almacenamiento interno o externo desde la configuración del sistema. Nota: De manera predeterminada, tu app se instalará en el almacenamiento interno. No se puede instalar en el almacenamiento externo a menos que definas este atributo como "
auto
" o "preferExternal
".Cuando se instala una app en el almacenamiento externo:
- El archivo
.apk
se guarda en el almacenamiento externo, pero los datos de la app (como las bases de datos) aún se guardan en la memoria interna del dispositivo. - El contenedor en el que se guarda el archivo
.apk
está encriptado con una clave que permite que la app funcione solo en el dispositivo que la instaló. (Un usuario no puede transferir la tarjeta SD a otro dispositivo y usar apps instaladas en la tarjeta). Sin embargo, es posible usar varias tarjetas SD con el mismo dispositivo. - A pedido del usuario, la app se puede mover al almacenamiento interno.
El usuario también puede solicitar mover una app del almacenamiento interno al externo. Sin embargo, el sistema no le permitirá moverla al almacenamiento externo si este atributo está configurado como
internalOnly
, que es la configuración predeterminada.Lee Ubicación de instalación de la app para obtener más información sobre el uso de este atributo (incluida la explicación sobre cómo mantener la retrocompatibilidad).
Se introdujo en el nivel de API 8.
- El archivo
- primera inclusión:
- Nivel de API 1 para todos los atributos, a menos que se indique lo contrario en la descripción del atributo.
- consulta también:
-
<application>