La migración a Android 11 más completa de la historia

Migración de Android 10
Dirección oficial de Android 11: https://developer.android.com/distribute/best-practices/develop/target-sdk?hl=zh-cn#prepie
inserte la descripción de la imagen aquí

Principalmente 2 partes de privacidad y seguridad

隐私权

A partir de Android 11, las aplicaciones que usan el modelo de almacenamiento particionado solo pueden acceder a sus propios archivos de caché específicos de la aplicación.
A partir de Android 11, las aplicaciones no pueden crear sus propios directorios específicos de aplicaciones en el almacenamiento externo. Para acceder a los directorios proporcionados por el sistema para su aplicación, llame a getExternalFilesDirs().

Hacer cumplir el almacenamiento particionado:

El acceso a los directorios de almacenamiento externo está limitado a los directorios específicos de la aplicación y ciertos tipos de medios que ha creado la aplicación.

**什么是应用专属存储空间?**

Almacene archivos utilizados solo por la aplicación, que se pueden almacenar en un directorio dedicado en el volumen de almacenamiento interno o en otros directorios dedicados en el espacio de almacenamiento externo. Use un directorio en el almacenamiento interno para almacenar información confidencial a la que otras aplicaciones no deberían tener acceso. (Solo puede acceder la aplicación en sí)
Acceso desde el espacio de almacenamiento interno, puede usar el método getFilesDir() o getCacheDir(); el acceso desde el espacio de almacenamiento interno no requiere ningún permiso Otras aplicaciones no pueden acceder al archivo después de desinstalar la aplicación Acceso desde el espacio de almacenamiento externo
, puede utilizar el método getExternalFilesDir() o getExternalCacheDir() Si la aplicación se ejecuta en un dispositivo con Android 4.4 (API nivel 19) o superior, el acceso desde el almacenamiento externo no requiere ningún permiso. Otras aplicaciones pueden acceder a él. Los archivos no se eliminarán después de desinstalar la aplicación. eliminar

La aplicación utiliza el modelo de almacenamiento particionado para guardar archivos específicos de la aplicación, archivos multimedia y otros tipos de archivos en su propia ubicación y acceder a estos archivos a través de estas ubicaciones.

Las aplicaciones de Android 10 aún pueden solicitar el atributo requestLegacyExternalStorage. El indicador requestLegacyExternalStorage se ignora cuando la aplicación se actualiza para apuntar a Android 11)

Restablecer permisos automáticamente

El sistema restablece automáticamente los permisos confidenciales de una aplicación si el usuario no ha interactuado con la aplicación durante varios meses. Esta configuración no afecta a la mayoría de las aplicaciones. Si su aplicación se ejecuta principalmente en segundo plano sin la interacción del usuario, puede considerar pedirle al usuario que deshabilite los restablecimientos automáticos.

**什么是自动重置?**

≥ El sistema de android11 ​​​​no se ha utilizado durante varios meses, el sistema restablecerá automáticamente los permisos sensibles de tiempo de ejecución que el usuario ha otorgado a la aplicación para proteger los datos del usuario. Esto tiene el mismo efecto que un usuario ve los permisos en la configuración del sistema y cambia el nivel de acceso de la aplicación a denegar. Es reflexivo y se aplica cada vez que lo uso.

Acceso a información de ubicación de fondo

≥30API (≥Android11)
La aplicación debe solicitar por separado el permiso de adquisición de información de ubicación en primer plano y el permiso de adquisición de información de ubicación en segundo plano. El permiso de ubicación en segundo plano solo se puede otorgar en la configuración de la aplicación, no a través del cuadro de diálogo de permisos de tiempo de ejecución.

Visibilidad del paquete

Cuando una aplicación consulta la lista de aplicaciones y servicios instalados en el dispositivo, el sistema filtra la lista devuelta. Si usa servicios de texto a voz o reconocimiento de voz, debe agregar
elementos para estos servicios en el archivo de manifiesto
. En otras palabras, en Android 11, si desea obtener información sobre otras aplicaciones, como el nombre del paquete, el nombre , etc., no puede obtenerlo directamente Sí, debe agregar elementos al archivo de manifiesto para decirle al sistema qué información de la aplicación o tipo de aplicación desea obtener

安全性

Los archivos resource.arsc comprimidos ya no son compatibles

Las aplicaciones destinadas a Android 11 (nivel de API 30) o superior
no se instalarán si contienen un archivo resources.arsc comprimido o si este archivo no está alineado en los límites de 4 bytes.
https://developer.android.com/about/versions/11/behavior-changes-11?hl=zh-cn#change-details_3

Ahora requiere APK Signature Scheme v2

Android 11 (nivel de API 30) debe estar firmado con APK Signature Scheme v2 o superior. Los usuarios no pueden instalar ni actualizar aplicaciones firmadas solo con APK Signature Scheme v1 en dispositivos con Android 11. Nota: para admitir dispositivos con versiones anteriores de Android, además de firmar su APK con APK Signature Scheme v2 o superior, también debe seguir siendo firmado usando APK Signature Scheme v1.

base de fuego


≥Android11 ​​(nivel de API 30), Firebase JobDispatcher y las llamadas a la API de GcmNetworkManager están deshabilitadas en dispositivos que ejecutan Android 6.0 (nivel de API 23) o superior . Para obtener más información sobre la migración, consulte la documentación oficial, la siguiente es la dirección
Firebase JobDispatcher Migrating to WorkManager
(https://developer.android.com/topic/libraries/architecture/workmanager/migrating-fb?hl=zh- cn)
de GCMNetworkManager Migración a WorkManager
(https://developer.android.com/topic/libraries/architecture/workmanager/migrating-gcm?hl=zh-cn)

Estas dos API no se usan en China y se usan principalmente para tareas en segundo plano. La alternativa oficial es WorkManager, que está disponible en China y pertenece al componente jetpack, se utiliza principalmente para programar y ejecutar trabajo en segundo plano diferido.

Transferencia de archivos de dispositivo a dispositivo

Si su aplicación es ≥ Android 11 (nivel de API 30), no puede
deshabilitar la migración de archivos de aplicaciones de dispositivo a dispositivo mediante el atributo allowBackup. Esta función se habilita automáticamente.
Sin embargo, incluso si su aplicación ≥ Android11 ​​(nivel de API 30), puede deshabilitar la copia de seguridad en la nube y la restauración de los archivos de la aplicación configurando la propiedad allowBackup en falso ## La devolución de llamada de OnSharedPreferenceChangeListener cambia si su aplicación ≥ Android11 ​​(nivel de API 30
) , ahora cada vez que se llama a Editor.clear, la devolución de llamada OnSharedPreferenceChangeListener.onSharedPreferenceChanged se vuelve a llamar con una clave nula.

Restrinja las interfaces que no sean SDK.

Para las aplicaciones que tienen como objetivo el nivel de API 30, no se recomiendan las interfaces que no pertenecen al SDK, ya que algunas de ellas ahora están bloqueadas. Para obtener una lista completa de las interfaces que no pertenecen al SDK bloqueadas
, consulte Interfaces que no pertenecen al SDK actualmente bloqueadas en Android 11.

Restricciones de interfaz sin SDK

Android 11 incluye una lista actualizada de interfaces restringidas que no pertenecen al SDK (según la colaboración con los desarrolladores de Android y las pruebas internas más recientes). Antes de restringir el uso de
interfaces que no pertenecen al SDK, hacemos todo lo posible para garantizar que haya alternativas públicas disponibles.
Si no está seguro de si su aplicación utiliza una interfaz que no es SDK, puede probar la aplicación para confirmar. Si su aplicación se basa en interfaces que no pertenecen al SDK, debe comenzar a planificar la migración a las alternativas del SDK. Sin embargo, sabemos que algunas aplicaciones tienen
casos de uso válidos para usar interfaces que no pertenecen al SDK. Si no puede encontrar una alternativa a una función en su aplicación que no requiera una interfaz que no sea SDK, debe solicitar que se agregue una nueva API pública.
Para obtener más información sobre los cambios en esta versión de Android, consulte Actualizaciones que restringen las interfaces que no pertenecen al SDK en Android 11. Consulte Restricciones en las interfaces que no pertenecen al SDK para obtener detalles completos sobre las interfaces que no pertenecen al SDK.

marca de puntero de montón

El puntero del montón tiene una marca distinta de cero en el byte más significativo (MSB). Las aplicaciones que usan punteros de forma incorrecta, incluidas
aquellas que modifican el MSB, ahora se bloquearán o experimentarán otros problemas. Este es
un cambio necesario para admitir el futuro hardware habilitado para Extensiones de etiquetas de memoria (MTE) de ARM. Para obtener más información, consulte el puntero marcado

(https://source.android.com/devices/tech/debug/tagged-pointers?hl=zh-cn)
Para deshabilitar esta función, consulte allowNativeHeapPointerTagging (https://developer.android.com/guide/topics/manifest /application-element?hl=zh-cn#allowNativeHeapPointerTagging) documento de manifiesto

Actualizaciones a los cuadros de mensaje

Los cuadros de mensaje personalizados en segundo plano están bloqueados. Por motivos de seguridad y para mantener una buena experiencia de usuario, si el cuadro de mensaje que contiene la vista personalizada se envía en segundo plano mediante una aplicación destinada a Android 11 o posterior, estos cuadros de mensaje se bloquearán
.

Nota : los Toast personalizados no pueden aparecer en segundo plano (tenga en cuenta las restricciones: fondo, personalizado).
Si está en segundo plano, solo pueden aparecer Toast nativos. Si no está en segundo plano, puede aparecer un Toast personalizado. El método Toast.getView() Toast.setView() está en desuso y ahora devuelve un valor nulo

// Lo siguiente es un Toast personalizado para mostrar texto + imagen Toast, ha sido probado

public static void showImageToas(Context context,String message){
    View toastview= LayoutInflater.from(context).inflate(R.layout.toast_image_layout,null);
    TextView text = (TextView) toastview.findViewById(R.id.tv_message);
    text.setText(message);    //要提示的文本
    Toast toast=new Toast(context);   //上下文
    toast.setGravity(Gravity.CENTER,0,0);   //位置居中
    toast.setDuration(Toast.LENGTH_SHORT);  //设置短暂提示
    toast.setView(toastview);   //把定义好的View布局设置到Toast里面
    toast.show();
}

Devolución de llamada de cuadro de mensaje
Si desea recibir una notificación cuando aparezca o desaparezca un cuadro de mensaje (cuadro de mensaje de texto o cuadro de mensaje personalizado), use el método addCallback() agregado en Android 11.

Cambios en la API del cuadro de mensaje Toast

Las aplicaciones que apuntan a Android 11 o superior verán los siguientes efectos secundarios para las cajas de brindis:

El método getView() devuelve nulo.
Los valores de retorno de los siguientes métodos no reflejan los valores reales, por lo que no debe confiar en ellos en su aplicación:
getHorizontalMargin()
getVerticalMargin()
getGravity()
getXOffset()
getYOffset()
Los siguientes métodos no son operativos y deberían no ser utilizado por su aplicación Ellos:
setMargin()
setGravity()

conectar

Las aplicaciones destinadas a Android 11 ahora deben tener el privilegio Manifest.permission.WRITE_APN_SETTINGS para leer o acceder a la base de datos APN del proveedor de telefonía . Intentar acceder a la base de datos de APN sin este permiso generará una excepción de seguridad.

Entonces la pregunta es, ¿qué es APN?
Hace referencia a una tecnología de acceso a la red, que es un parámetro que debe configurarse cuando se navega por Internet a través de teléfonos móviles.Los parámetros de configuración de APN incluyen nombre, número de operador, punto de acceso APN, etc.

Servicios de accesibilidad

**在清单文件中声明与 TTS 引擎的交互**

Debido a los cambios en la visibilidad del paquete, las aplicaciones destinadas a Android 11 que interactúan con el motor de texto a voz (TTS) deben agregar los siguientes
elementos a sus archivos de manifiesto:

    <queries>
       <intent>
         <action
            android:name="android.intent.action.TTS_SERVICE" />
      </intent>
    </queries>
**在元数据文件中声明“无障碍”按钮使用情况 **

A partir de Android 11, su servicio de accesibilidad no puede declarar en tiempo de ejecución que está asociado con el botón de Accesibilidad del sistema. Si adjunta AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON a
la propiedad flags del objeto AccessibilityServiceInfo, el marco no pasará el evento de devolución de llamada del botón Accesibilidad a su servicio.

Para recibir eventos de devolución de llamada de accesibilidad en un servicio de accesibilidad, declare la asociación de su servicio con el botón Accesibilidad mediante un archivo de metadatos del servicio de accesibilidad. Agregue el valor flagRequestAccessibilityButton en la definición de la propiedad accessFlags. Una ubicación común para un archivo de metadatos del servicio de accesibilidad es res/raw/accessibilityservice.xml.

cámara

La operación de intento de medios requiere la cámara predeterminada del sistema

A partir de Android 11, solo la aplicación de cámara del sistema preinstalada puede responder a la siguiente intención:
android.media.action.VIDEO_CAPTURE
android.media.action.IMAGE_CAPTURE
android.media.action.IMAGE_CAPTURE_SECURE
si hay más de una cámara del sistema preinstalada aplicación está disponible, se muestra un cuadro de diálogo que permite al usuario seleccionar una aplicación. Si desea que su aplicación use una aplicación de cámara de terceros específica para capturar imágenes o videos en su nombre, puede
hacer que esas intenciones sean explícitas configurando el nombre del paquete o el componente para la intención.

Supongo que te gusta

Origin blog.csdn.net/u010207898/article/details/118417677
Recomendado
Clasificación