Elementos de compilación
Los elementos de compilación controlan el modo en que se compila un proyecto de biblioteca o de aplicación de Xamarin.Android.
AndroidAsset
Admite recursos de Android, archivos que se incluirán en la carpeta assets
en un proyecto de Java Android.
AndroidAarLibrary
La acción de compilación de AndroidAarLibrary
se debe utilizar para hacer referencia directamente a los archivos .aar
. Esta acción de compilación la utilizan normalmente componentes de Xamarin. Es decir, para incluir referencias a archivos .aar
que son necesarios para que funcionen Google Play y otros servicios.
Los archivos con esta acción de compilación se tratarán de un modo bastante similar a los recursos incrustados en proyectos de biblioteca. El archivo .aar
se extrae en el directorio intermedio. Después, los recursos y los archivos .jar
se incluirán en los grupos de elementos pertinentes.
AndroidAotProfile
Se usa para proporcionar un perfil de AOT, para su uso con el AOT guiado por perfiles.
También se puede usar desde Visual Studio estableciendo la acción de compilación AndroidAotProfile
en un archivo que contenga un perfil de AOT.
AndroidAppBundleMetaDataFile
Especifica un archivo que se incluirá como metadatos en el lote de aplicaciones de Android.
El formato del valor de la marca es <bundle-path>:<physical-file>
, donde bundle-path
denota la ubicación del archivo dentro del directorio de metadatos del lote de aplicaciones y physical-file
es un archivo existente que contiene los datos sin procesar que se van a almacenar.
<ItemGroup>
<AndroidAppBundleMetaDataFile
Include="com.android.tools.build.obfuscation/proguard.map:$(OutputPath)mapping.txt"
/>
</ItemGroup>
Consulte la documentación de bundletool para obtener más detalles.
Se ha agregado en Xamarin.Android 12.3.
AndroidBoundLayout
Indica que el archivo de diseño debe tener código subyacente generado en caso de que la propiedad AndroidGenerateLayoutBindings
se establezca en false
. En todos los demás aspectos es idéntica a AndroidResource
, descrito anteriormente. Esta acción solo se puede usar con archivos de diseño:
<AndroidBoundLayout Include="Resources\layout\Main.axml" />
AndroidEnvironment
Los archivos con una acción de compilación de AndroidEnvironment
se usan para inicializar variables de entorno y propiedades del sistema durante el inicio del proceso.
La acción de compilación AndroidEnvironment
se puede aplicar a varios archivos, y estos se evalúan sin ningún orden determinado (así que no especifique la misma variable de entorno o propiedad de sistema en varios archivos).
AndroidJavaLibrary
Los archivos con una acción de compilación de AndroidJavaLibrary
son archivos de Java (archivos .jar
) que se incluirán en el paquete final de Android.
AndroidJavaSource
Los archivos con una acción de compilación de AndroidJavaSource
son el código fuente de Java que se incluirá en el paquete final de Android.
A partir de .NET 7, todos los archivos **\*.java
del directorio del proyecto tienen automáticamente una acción de compilación de AndroidJavaSource
, y se enlazarán antes de la compilación del ensamblado. Permite que el código de C# use con facilidad los tipos y miembros presentes en los archivos **\*.java
.
Establezca %(AndroidJavaSource.Bind)
en False para deshabilitar este comportamiento.
AndroidLibrary
AndroidLibrary es una nueva acción de compilación para simplificar cómo se incluyen los archivos .jar
y .aar
en los proyectos.
En cualquier proyecto se puede especificar:
<ItemGroup>
<AndroidLibrary Include="foo.jar" />
<AndroidLibrary Include="bar.aar" />
</ItemGroup>
El resultado del fragmento de código anterior tiene un efecto diferente para cada tipo de proyecto de Xamarin.Android:
- Proyectos de biblioteca de clases y aplicaciones:
foo.jar
se asigna a AndroidJavaLibrary.bar.aar
se asigna a AndroidAarLibrary.
- Proyectos de enlace de Java:
foo.jar
se asigna a EmbeddedJar.foo.jar
se asigna a EmbeddedReferenceJar si se agregan los metadatosBind="false"
.bar.aar
se asigna a LibraryProjectZip.
Esta simplificación significa que puede usar AndroidLibrary en cualquier lugar.
Esta acción de compilación se agregó en Xamarin.Android 11.2.
AndroidLintConfig
La acción de compilación "AndroidLintConfig" se debe usar con la propiedad de compilación .Propiedad $(AndroidLintEnabled)
. Los archivos con esta acción de compilación se combinan y se pasan a las herramientas lint
de Android. Deben ser archivos XML que contengan información sobre qué pruebas deben habilitarse o deshabilitarse.
Vea la documentación de lint para obtener más información.
AndroidManifestOverlay
Se puede usar la acción de compilación AndroidManifestOverlay
para proporcionar archivos AndroidManifest.xml
a la herramienta de fusión de manifiestos.
Los archivos con esta acción de compilación se pasarán a la herramienta de fusión de manifiestos junto con el archivo AndroidManifest.xml
principal y los archivos de manifiesto de las referencias. Después, se combinarán en el manifiesto final.
Puede usar esta acción de compilación para proporcionar cambios y configuraciones a la aplicación en función de la configuración de compilación. Por ejemplo, si necesita tener un permiso concreto solo durante la depuración, puede utilizar la superposición para insertar ese permiso durante la depuración. Por ejemplo, dado el siguiente contenido de archivo de superposición:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.CAMERA" />
</manifest>
Puede usar lo siguiente para agregar una superposición de manifiesto a una compilación de depuración:
<ItemGroup>
<AndroidManifestOverlay Include="DebugPermissions.xml" Condition=" '$(Configuration)' == 'Debug' " />
</ItemGroup>
Esta acción de compilación se agregó en Xamarin.Android 11.2.
AndroidInstallModules
Especifica los módulos que se instalan mediante el comando bundletool al instalar lotes de aplicaciones.
Esta acción de compilación se agregó en Xamarin.Android 11.3.
AndroidNativeLibrary
Las bibliotecas nativas se agregan a la compilación mediante el establecimiento de su acción de compilación en AndroidNativeLibrary
.
Tenga en cuenta que, puesto que Android admite varias interfaces binarias de aplicación (ABI), el sistema de compilación debe saber para qué ABI se ha compilado la biblioteca nativa. Hay dos formas de especificar una ABI:
- Examinando la ruta de acceso.
- Mediante los metadatos del elemento
%(Abi)
.
Con el examen de la ruta de acceso, el nombre del directorio principal de la biblioteca nativa se utiliza para especificar la ABI a la que se dirige la biblioteca. Por lo tanto, si agrega lib/armeabi-v7a/libfoo.so
a la compilación, la ABI se examina como armeabi-v7a
.
Nombre del atributo de elemento
Abi: especifica la ABI de la biblioteca nativa.
<ItemGroup>
<AndroidNativeLibrary Include="path/to/libfoo.so">
<Abi>armeabi-v7a</Abi>
</AndroidNativeLibrary>
</ItemGroup>
AndroidResource
Todos los archivos con una acción de compilación de AndroidResource se compilan en recursos de Android durante el proceso de compilación y se vuelven accesibles mediante $(AndroidResgenFile)
.
<ItemGroup>
<AndroidResource Include="Resources\values\strings.xml" />
</ItemGroup>
Quizás los usuarios más avanzados deseen que recursos diferentes se usen en distintas configuraciones, pero con la misma ruta de acceso efectiva. Para lograr esto, se pueden tener varios directorios de recursos y tener archivos con las mismas rutas de acceso relativas dentro de estos diferentes directorios, y usar condiciones de MSBuild para incluir condicionalmente diferentes archivos en diferentes configuraciones. Por ejemplo:
<ItemGroup Condition="'$(Configuration)'!='Debug'">
<AndroidResource Include="Resources\values\strings.xml" />
</ItemGroup>
<ItemGroup Condition="'$(Configuration)'=='Debug'">
<AndroidResource Include="Resources-Debug\values\strings.xml"/>
</ItemGroup>
<PropertyGroup>
<MonoAndroidResourcePrefix>Resources;Resources-Debug</MonoAndroidResourcePrefix>
</PropertyGroup>
LogicalName: especifica la ruta de acceso a los recursos de forma explícita. Permite la creación de alias de archivos para que estén disponibles como varios nombres de recursos distintos.
<ItemGroup Condition="'$(Configuration)'!='Debug'">
<AndroidResource Include="Resources/values/strings.xml"/>
</ItemGroup>
<ItemGroup Condition="'$(Configuration)'=='Debug'">
<AndroidResource Include="Resources-Debug/values/strings.xml">
<LogicalName>values/strings.xml</LogicalName>
</AndroidResource>
</ItemGroup>
AndroidResourceAnalysisConfig
La acción de compilación AndroidResourceAnalysisConfig
marca un archivo como un archivo de configuración de nivel de gravedad para la herramienta de diagnóstico de diseño de Xamarin Android Designer. Actualmente solo se usa en el editor de diseño y no en los mensajes de compilación.
Para más información, consulte la documentación de análisis de recursos de Android.
Se ha agregado en Xamarin.Android 10.2.
Contenido
La acción de compilación Content
no se admite (dado que no hemos descubierto cómo admitirla sin un paso seguramente costoso de primera ejecución).
A partir de Xamarin.Android 5.1, si se intenta usar la acción de compilación @(Content)
se producirá una advertencia XA0101
.
EmbeddedJar
En un proyecto de enlace de Xamarin.Android, la acción de compilación EmbeddedJar enlaza la biblioteca Java/Kotlin e inserta el archivo .jar
en la biblioteca. Cuando un proyecto de la aplicación Xamarin.Android consume la biblioteca, tendrá acceso a las API de Java/Kotlin desde C# e incluirá el código de Java/Kotlin en la aplicación Android final.
Desde Xamarin. Android 11.2, se puede usar la acción de compilación AndroidLibrary como alternativa, tal como:
<Project>
<ItemGroup>
<AndroidLibrary Include="Library.jar" />
</ItemGroup>
</Project>
EmbeddedNativeLibrary
En un proyecto de biblioteca de clases de Xamarin.Android o de enlace de Java, la acción de compilación EmbeddedNativeLibrary agrupa una biblioteca nativa como lib/armeabi-v7a/libfoo.so
en la biblioteca. Cuando una aplicación de Xamarin.Android consume la biblioteca, el archivo libfoo.so
se incluirá en la aplicación de Android final.
Desde Xamarin. Android 11.2, se puede usar la acción de compilación AndroidNativeLibrary como alternativa, por ejemplo.
EmbeddedReferenceJar
En un proyecto de enlace de Xamarin.Android, la acción de compilación EmbeddedReferenceJar inserta el archivo .jar
en la biblioteca, pero no crea un enlace de C# como hace EmbeddedJar. Cuando un proyecto de aplicación de Xamarin.Android consume la biblioteca, incluirá el código Java/Kotlin en la aplicación de Android final.
Desde Xamarin.Android 11.2, se puede usar la acción de compilación AndroidLibrary como alternativa, tal como <AndroidLibrary Include="..." Bind="false" />
:
<Project>
<ItemGroup>
<!-- A .jar file to bind & embed -->
<AndroidLibrary Include="Library.jar" />
<!-- A .jar file to only embed -->
<AndroidLibrary Include="Dependency.jar" Bind="false" />
</ItemGroup>
</Project>
JavaDocJar
En un proyecto de enlace de Xamarin.Android, se usa la acción de compilación JavaDocJar en archivos .jar
que contienen HTML de Javadoc. Se analiza el código HTML de Javadoc para extraer los nombres de parámetro.
Solo se admiten ciertos "dialectos HTML de Javadoc", entre los que se incluyen:
- Salida de JDK 1.7
javadoc
. - Salida de JDK 1.8
javadoc
. - Salida de Droiddoc.
Esta acción de compilación queda en desuso en Xamarin.Android 11.3 y no se admitirá en .NET 6.
Se prefiere la acción de compilación @(JavaSourceJar)
.
JavaSourceJar
En un proyecto de enlace de Xamarin.Android, la acción de compilación JavaSourceJar se usa en archivos .jar
que contienen código fuente de Java, que incluyen comentarios de documentación de Javadoc.
Antes de Xamarin.Android 11.3, el Javadoc se convertía en HTML a través de la utilidad javadoc
durante el tiempo de compilación y, posteriormente, se convertía en documentación XML.
A partir de Xamarin.Android 11.3, Javadoc se convertirá en comentarios de documentación XML de C# dentro del código fuente de enlace generado.
$(AndroidJavadocVerbosity)
controla hasta qué punto es "detallado" o "completo" el Javadoc importado.
A partir de Xamarin.Android 11.3, se admiten los siguientes metadatos de MSBuild:
%(CopyrightFile)
: ruta de acceso a un archivo que contiene información de copyright para el contenido de Javadoc, que se anexará a toda la documentación importada.%(UrlPrefix)
: prefijo de dirección URL para admitir la vinculación a documentación en línea dentro de la documentación importada.%(UrlStyle)
: el "estilo" de las direcciones URL que se generarán al vincular a la documentación en línea. Actualmente, solo se admite un estilo:developer.android.com/reference@2020-Nov
.
A partir de Xamarin.Android 12.3, se admiten los siguientes metadatos de MSBuild:
%(DocRootUrl)
: prefijo de dirección URL que se va a usar en lugar de todas las instancias de {@docroot} en la documentación importada.
LibraryProjectZip
En un proyecto de enlace de Xamarin.Android, la acción de compilación LibraryProjectZip enlaza la biblioteca Java/Kotlin e inserta el archivo .zip
o .aar
en la biblioteca. Cuando un proyecto de la aplicación Xamarin.Android consume la biblioteca, tendrá acceso a las API de Java/Kotlin desde C# e incluirá el código de Java/Kotlin en la aplicación Android final.
Nota:
Solo se puede incluir una sola acción LibraryProjectZip en un proyecto de enlace de Xamarin.Android. Esta limitación se quitará en .NET 6.
LinkDescription
Los archivos con una acción de compilación LinkDescription se usan para controlan el comportamiento del enlazador.
ProguardConfiguration
Los archivos con una acción de compilación ProguardConfiguration contienen opciones que se usan para controlar el comportamiento de proguard
. Para más información sobre esta acción de compilación, consulte ProGuard.
Estos archivos se omiten a menos que la propiedad de MSBuild la propiedad $(EnableProguard)
de MSBuild sea True
.