Pregunta la ayuda sobre el problema de lectura de AndroidManifest.xml
1.El escenario problemático:
Nuestro producto se basa en losp 4.4. Cuando construyo todo el sistema con la adición de locale ar_EG a nuestro producto, habrá un registro de errores durante el primer procedimiento de arranque, además, si construyo el sistema sin la configuración regional ar_EG, el problema no saldrá.
- Cambiar el tema de android de cordova config.xml
- Los colores de Android no funcionan en mi dispositivo físico
- Biblioteca de diseño de Android - Problemas de relleno / margen de botón de acción flotante
- Defina un atributo necesario para <declare-stylable>
- ¿Crear un tipo de datos XML personalizado?
01-01 08:01:38.711 W/PackageParser( 529): /system/app/Email.apk (at Binary XML file line #357): <provider> does not include authorities attribute
Y este error llevará a la disfunción de la aplicación de correo electrónico, por último, el mensaje de diálogo de bloqueo de Exchange se mostrará. El registro de fallos está abajo:
01-01 09:18:53.475 E/AndroidRuntime( 982): FATAL EXCEPTION: main 01-01 09:18:53.475 E/AndroidRuntime( 982): Process: com.android.exchange, PID: 982 01-01 09:18:53.475 E/AndroidRuntime( 982): java.lang.RuntimeException: Unable to create application com.android.exchange.Exchange: java.lang.IllegalArgumentException: Unknown URI content://com.android.email.provider 01-01 09:18:53.475 E/AndroidRuntime( 982): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4331) 01-01 09:18:53.475 E/AndroidRuntime( 982): at android.app.ActivityThread.access$1500(ActivityThread.java:135) 01-01 09:18:53.475 E/AndroidRuntime( 982): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 01-01 09:18:53.475 E/AndroidRuntime( 982): at android.os.Handler.dispatchMessage(Handler.java:102) 01-01 09:18:53.475 E/AndroidRuntime( 982): at android.os.Looper.loop(Looper.java:136) 01-01 09:18:53.475 E/AndroidRuntime( 982): at android.app.ActivityThread.main(ActivityThread.java:5008) 01-01 09:18:53.475 E/AndroidRuntime( 982): at java.lang.reflect.Method.invokeNative(Native Method) 01-01 09:18:53.475 E/AndroidRuntime( 982): at java.lang.reflect.Method.invoke(Method.java:515) 01-01 09:18:53.475 E/AndroidRuntime( 982): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 01-01 09:18:53.475 E/AndroidRuntime( 982): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 01-01 09:18:53.475 E/AndroidRuntime( 982): at dalvik.system.NativeStart.main(Native Method) 01-01 09:18:53.475 E/AndroidRuntime( 982): Caused by: java.lang.IllegalArgumentException: Unknown URI content://com.android.email.provider 01-01 09:18:53.475 E/AndroidRuntime( 982): at android.content.ContentResolver.call(ContentResolver.java:1352) 01-01 09:18:53.475 E/AndroidRuntime( 982): at com.android.exchange.Exchange.onCreate(Exchange.java:34) 01-01 09:18:53.475 E/AndroidRuntime( 982): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007) 01-01 09:18:53.475 E/AndroidRuntime( 982): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4328) 01-01 09:18:53.475 E/AndroidRuntime( 982): ... 10 more
2. Mis investigaciones
En primer lugar, debo decir AndroidManifest.xml del correo electrónico no se toca, sólo añadir algunas cadenas de árabe en correo electrónico.
Seguí el código fuente relacionado en $ (aosp_dir) / frameworks / base / core / java / android / content / pm / PackageParser.java , dentro de la función llamada:
private Provider parseProvider(Package owner, Resources res, XmlPullParser parser, AttributeSet attrs, int flags, String[] outError)
Después de leer las autoridades del proveedor actual definidas en Androidmanifest.xml de Email:
String cpname = sa.getNonConfigurationString( com.android.internal.R.styleable.AndroidManifestProvider_authorities, 0);
Siempre devuelve NULL, por lo tanto, la excepción de error se mostrará.
Entonces noté que la razón por la que getNonConfigurationString devuelve null es que el TypedArray tiene desde el principio de parseProvider es problemático:
TypedArray sa = res.obtainAttributes(attrs, com.android.internal.R.styleable.AndroidManifestProvider);
"TypedArray sa" es un arreglo largo con el que los seis elementos son el elemento más grande, y las autoridades com.android.internal.R.styleable.AndroidManifestProvider_autorities indican que las autoridades son el 10mo elemento más grande, así que imprimí el contenido de sa bajo el Ambos escenarios: el caso correcto sin la configuración regional AR_EG y el caso fallido con la configuración regional AR_EG. Así que acabo de mostrar los elementos de las autoridades:
The successful case: 3, 188, -1, 0, 0, 0, The failed case: 3, 1127, 2, 2131362092, 4, 0
Desde el código fuente, he sabido que el quinto elemento de un elemento más grande es un tipo de configuración llamada STYLE_CHANGING_CONFIGURATIONS, podemos ver que el valor de esta configuración bajo el caso fallido es 4, esto puede llevar a que sa.getNonConfigurationString devuelva null.
Por lo tanto, continúo rastreando los códigos fuente para identificar el origen del valor problemático:
android_content_AssetManager_retrieveAttributes in frameworks\base\core\jni\android_util_AssetManager.cpp || || \/ ResTable::resolveReference in frameworks\base\libs\androidfw\ResourceTypes.cpp || || \/ ResTable::getResource in frameworks\base\libs\androidfw\ResourceTypes.cpp
El código fuente me muestra que el valor de configuración es de typeSpecFlags en struct ResTable :: Type finalmente.
3. Mis dudas
Actualmente estoy confuso en estos códigos, por lo que los escribo en stackoverflow para pedir la ayuda, tal vez ustedes están muy familiarizados con los códigos fuente relacionados o cumplieron con el escenario similar. Todavía no sé cómo obtener el tipoSpecFlags en struct ResTable :: Type, y creo que el proceso de lectura está relacionado con locale. Espero que me puedas dar algunos consejos. ¡Muchas gracias!
- ¿Cómo leer el archivo xml local es la carpeta de recursos como un flujo de entrada en Android?
- Cómo convertir TextView en ImageView en android
- SAXParser no puede analizar algunos caracteres
- Z-index en android?
- Escapar de espacios en blanco Android strings.xml
- API de gráficos para Android
- ¿El botón del interruptor-botón se inclina?
- Interpolador personalizado de referencia para la animación de vistas en XML
Finalmente, he encontrado la ubicación problemática. Si la imagen final de Android incluye AR locales, el administrador de recursos de Android no puede obtener la cadena válida desde el AndroidManifest.xml a través del método de referencia de cadena. Por ejemplo:
android:authorities="@string/eml_attachment_provider"
Una vez que el procedimiento de analizar el proveedor de onr falla, se anulará todo el proceso de análisis de AndroidManifest.xml. Por lo tanto, los componentes de resto en AndroidManifest.xml serán todos inválidos.
- Servicio pegajoso y servicio de intenciones mueren cuando se destruye la aplicación
- Evite descubrir los servicios del dispositivo BLE durante la conexión