Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het .NET voor Android-buildproces is verantwoordelijk voor het samenvoegen van alles: het Resource.designer.csgenereren, ondersteunen van de @(AndroidAsset), @(AndroidResource)en andere buildacties, het genereren van aanroepbare Wrappers voor Android en het genereren van een .apk voor uitvoering op Android-apparaten.
Applicatiepakketten
In algemene termen zijn er twee soorten Android-toepassingspakketten (.apk bestanden) die het .NET voor Android-buildsysteem kan genereren:
Release-builds , die volledig zelfstandig zijn en waarvoor geen extra pakketten hoeven te worden uitgevoerd. Dit zijn de pakketten die worden geleverd aan een App Store.
Debug builds, die dat niet zijn.
Deze pakkettypen komen overeen met de MSBuild Configuration die het pakket produceert.
Snelle implementatie
Snelle implementatie werkt door de grootte van het Android-toepassingspakket verder te verkleinen. Dit wordt gedaan door de assembly's van de app uit het pakket uit te sluiten en in plaats daarvan de assembly's van de app rechtstreeks te implementeren in de interne files map van de toepassing, meestal in /data/data/com.some.package. De interne files map is geen globaal beschrijfbare map, dus het run-as hulpprogramma wordt gebruikt om alle opdrachten uit te voeren om de bestanden naar die map te kopiëren.
Dit proces versnelt de build/deploy/foutopsporingscyclus omdat het pakket niet opnieuw wordt geïnstalleerd wanneer alleen assembly's worden gewijzigd. Alleen de bijgewerkte assembly's worden opnieuw gesynchroniseerd naar het doelapparaat.
Waarschuwing
Snelle implementatie staat bekend om te falen op apparaten die run-as blokkeren, die vaak ouder zijn dan Android 5.0.
Snelle implementatie wordt ondersteund voor zowel .apk en .aab pakketindelingen.
Deze functie is standaard ingeschakeld en kan worden uitgeschakeld in builds voor foutopsporing door de $(EmbedAssembliesIntoApk) eigenschap in te stellen op True.
Houd er rekening mee dat het gebruik van .aab met snelle implementatie langzamer is dan .apk omdat het .aab bestand door bundletool moet worden verwerkt voor verpakking en installatie.
De modus Verbeterde snelle implementatie kan worden gebruikt in combinatie met deze functie om implementaties nog verder te versnellen.
Hiermee worden zowel assembly's, systeemeigen bibliotheken, typemaps als dexes geïmplementeerd in de files map. Maar u moet dit alleen echt inschakelen als u systeemeigen bibliotheken, bindingen of Java-code wijzigt.
MSBuild-projecten
Het .NET voor Android-buildproces is gebaseerd op MSBuild, dat ook de projectbestandsindeling is die wordt gebruikt door Visual Studio voor Mac en Visual Studio. Normaal gesproken hoeven gebruikers de MSBuild-bestanden niet handmatig te bewerken: de IDE maakt volledig functionele projecten en werkt ze bij met eventuele wijzigingen en roept indien nodig automatisch builddoelen aan.
Geavanceerde gebruikers willen mogelijk dingen doen die niet worden ondersteund door de GUI van de IDE, zodat het buildproces kan worden aangepast door het projectbestand rechtstreeks te bewerken. Deze pagina documenteert alleen de .NET voor Android-specifieke functies en aanpassingen. Er zijn nog veel meer dingen mogelijk met de normale MSBuild-items, eigenschappen en doelen.
Bindingsprojecten
De volgende MSBuild-eigenschappen worden gebruikt met bindingsprojecten:
Resource.designer.cs Generatie
De volgende MSBuild-eigenschappen worden gebruikt om het genereren van het Resource.designer.cs bestand te beheren:
$(AndroidAapt2CompileExtraArgs)$(AndroidAapt2LinkExtraArgs)$(AndroidExplicitCrunch)$(AndroidR8IgnoreWarnings)$(AndroidResgenExtraArgs)$(AndroidResgenFile)$(AndroidUseAapt2)$(MonoAndroidResourcePrefix)
Handtekeningeigenschappen
Eigenschappen voor ondertekening bepalen hoe het toepassingspakket is ondertekend, zodat het kan worden geïnstalleerd op een Android-apparaat. Om snellere build-iteratie mogelijk te maken, ondertekent de .NET voor Android-taken tijdens het buildproces geen pakketten, omdat de ondertekening behoorlijk traag is. In plaats daarvan worden ze ondertekend (indien nodig) vóór de installatie of tijdens het exporteren, door de IDE of het builddoel installeren . Als u het SignAndroidPackage-doel aanroept, wordt een pakket met het -Signed.apk achtervoegsel in de uitvoermap geproduceerd.
Standaard genereert het ondertekeningsdoel indien nodig een nieuwe foutopsporingssleutel. Als u een specifieke sleutel wilt gebruiken, bijvoorbeeld op een buildserver, worden de volgende MSBuild-eigenschappen gebruikt:
$(AndroidDebugKeyAlgorithm)$(AndroidDebugKeyValidity)$(AndroidDebugStoreType)$(AndroidKeyStore)$(AndroidSigningKeyAlias)$(AndroidSigningKeyPass)$(AndroidSigningKeyStore)$(AndroidSigningStorePass)$(JarsignerTimestampAuthorityCertificateAlias)$(JarsignerTimestampAuthorityUrl)
keytool Optietoewijzing
Houd rekening met de volgende keytool aanroep:
$ keytool -genkey -v -keystore filename.keystore -alias keystore.alias -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password: keystore.filename password
Re-enter new password: keystore.filename password
...
Is CN=... correct?
[no]: yes
Generating 2,048 bit RSA key pair and self-signed certificate (SHA1withRSA) with a validity of 10,000 days
for: ...
Enter key password for keystore.alias
(RETURN if same as keystore password): keystore.alias password
[Storing filename.keystore]
Als u het hierboven gegenereerde sleutelarchief wilt gebruiken, gebruikt u de eigenschappen-groep:
<PropertyGroup>
<AndroidKeyStore>True</AndroidKeyStore>
<AndroidSigningKeyStore>filename.keystore</AndroidSigningKeyStore>
<AndroidSigningStorePass>keystore.filename password</AndroidSigningStorePass>
<AndroidSigningKeyAlias>keystore.alias</AndroidSigningKeyAlias>
<AndroidSigningKeyPass>keystore.alias password</AndroidSigningKeyPass>
</PropertyGroup>
Extensiepunten bouwen
Het .NET voor Android-buildsysteem bevat enkele openbare uitbreidingspunten voor gebruikers die aan ons buildproces willen koppelen. Als u een van deze uitbreidingspunten wilt gebruiken, moet u uw aangepaste doel toevoegen aan de juiste MSBuild-eigenschap in een PropertyGroup. Voorbeeld:
<PropertyGroup>
<AfterGenerateAndroidManifest>
$(AfterGenerateAndroidManifest);
YourTarget;
</AfterGenerateAndroidManifest>
</PropertyGroup>
Uitbreidingspunten zijn onder andere:
- '$(AfterGenerateAndroidManifest)
- '$(AndroidPrepareForBuildDependsOn)
- '$(BeforeGenerateAndroidManifest)
$(BeforeBuildAndroidAssetPacks)
Een woord van voorzichtigheid bij het uitbreiden van het buildproces: Als dit niet juist is geschreven, kunnen build-extensies van invloed zijn op de prestaties van de build, met name als ze worden uitgevoerd op elke build. Het wordt ten zeerste aanbevolen dat u de MSBuild-documentatie leest voordat u dergelijke extensies implementeert.
Doeldefinities
De .NET voor Android-specifieke onderdelen van het buildproces worden gedefinieerd in $(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets, maar normale taalspecifieke doelen zoals Microsoft.CSharp.targets zijn ook vereist om de assembly te bouwen.
De volgende build-eigenschappen moeten worden ingesteld voordat u taaldoelen importeert:
<PropertyGroup>
<TargetFrameworkIdentifier>MonoDroid</TargetFrameworkIdentifier>
<MonoDroidVersion>v1.0</MonoDroidVersion>
<TargetFrameworkVersion>v2.2</TargetFrameworkVersion>
</PropertyGroup>
Al deze doelen en eigenschappen kunnen worden opgenomen voor C# door Xamarin.Android.CSharp.targets te importeren:
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
Dit bestand kan eenvoudig worden aangepast voor andere talen.