¿Cómo tratar con "$ {applicationid}" en Xamarin?

Estoy tratando de crear enlaces para la biblioteca de Zendesk y me enfrenté con un problema.

Zendesk Belvedere biblioteca (belvedere-1.0.2.1.aar) contiene un proveedor de archivos en su archivo de manifiesto:

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" ... ... <application> <provider android:name="com.zendesk.belvedere.BelvedereFileProvider" android:authorities="${applicationId}.belvedere.attachments" android:exported="false" android:grantUriPermissions="true" > <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/belvedere_attachment_storage" /> </provider> </application> </manifest> 

Cuando Gradle se utiliza como herramienta de compilación, coloca este aar en el archivo APK y reemplaza ${applicationId}.belvedere.attachments con com.your_package_name_here.belvedere.attachments en el archivo de manifiesto fusionado. Está bien.

Sin embargo, Xamarin lo maneja de manera diferente. Esto es lo que encontré en el manifiesto de mi APK final:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" ... ... <application ... ... <provider android:name="com.zendesk.belvedere.BelvedereFileProvider" android:exported="false" android:authorities="dollar_openBracket_applicationId_closeBracket" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/belvedere_attachment_storage" /> </provider> ... ... </application> </manifest> 

Obviamente, dollar_openBracket_applicationId_closeBracket no es lo que necesito.

Parece que todo funciona, sin embargo, hace imposible instalar varias aplicaciones Xamarin que usan estos enlaces, porque todos tendrían proveedores en conflicto con la misma autoridad (y el usuario obtendría el error INSTALL_FAILED_CONFLICTING_PROVIDER ).

¿Hay una manera de cambiar dollar_openBracket_applicationId_closeBracket en el manifiesto?

Editar: un pequeño ejemplo que muestra el problema: https://gitlab.com/lassana/ZendeskXamarin/

La tarea de generación de combinación de manifiesto Xamarin.Android actual, hasta e incluyendo la versión 7.1.0.19 , no proporciona ninguna sustitución bundeID / ApplicationID ( ${} } en el manifiesto combinado como gradle .

Esto es sólo una limitación en la tarea de procesamiento / fusión manifiesta, por lo que dollar_openBracket_applicationId_closeBracket con dollar_openBracket_applicationId_closeBracket en tu manifiesto final y tendrás que corregir ambos manifiestos.

La única solución actual me sabe para evitar la tarea de fusión de manifiesto y su limitación es:

  1. Quite la entrada del proveedor de archivos del manifiesto '.aar`
  2. Agregue la entrada completa del proveedor de archivos al manifiesto de su aplicación

Nota: Tienes que hacer ambos pasos

Dependiendo de la frecuencia con la que el .aar está cambiando y de dónde está obteniendo el archivo .aar de:

  • aar manualmente el aar , quite la entrada y vuelva a cerrar el aar (la forma más rápida)
  • Automatizado esto en un paso de construcción a través de un script de shell usando bash o powershell cmds
  • Escriba una tarea basada en MSBuild C # para hacerlo.
  • Solicitar que el manifiesto aar se cambie aguas arriba (no es probable que ocurra 😉 ya que funciona bien con gradle )

FYI: Personalmente he visto el problema ${applicationId} que estás teniendo varias veces. He escrito scripts de construcción ( bash/.ps1 ) para hacer el arreglo de manifiesto, ya que parece ser siempre un caso especial en el manifiesto de .arr el que estoy tratando.

El archivo de manifiesto principal de su proyecto es el manifiesto de mayor prioridad, por lo que si agrega el elemento de proveedor al archivo de manifiesto principal y aplica un marcador de regla de combinación para android:authorities atributo de android:authorities , las herramientas de fusión sustituyen al valor de android:authorities que declara en el Manifiesto principal

Declarar el elemento del provider en el manifiesto principal:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> ... ... <application> <provider android:name="com.zendesk.belvedere.BelvedereFileProvider" android:authorities="com.example.belvedere.attachments" tools:replace=”android:authorities” > </provider> </application> 

  • FragmentPagerAdapter sólo existe en Android.Support.V4.App (y no en Android.App)
  • ¿Qué tema utiliza el diseñador de Xamarin para Mono para Android?
  • Necesito un ejemplo de sqlite con Monodroid
  • Evitar que la actividad se reinicie cuando cambie la orientación
  • Es libre de monocrómenos?
  • Mono para Android: ListView Eliminar elementos NotifyDataSet modificado
  • Xamarin y código c ++
  • Descenso Xamarin.Android
  • Uso de Android ActionBar para navegar entre las actividades
  • Android Analyze APK
  • Los atributos personalizados de monodroid / xamarin están vacíos usando ObtainStyledAttributes
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.