Byggprocess

.NET för Android-byggprocessen ansvarar för att sammanfoga allt: generera Resource.designer.cs, stöder @(AndroidAsset), @(AndroidResource) och andra byggåtgärder, generera Android-anropsbara omslutningar och generera en .apk som kan köras på Android-enheter.

Programpaket

I stora drag finns det två typer av Android-programpaket (.apk filer) som .NET för Android-byggsystemet kan generera:

  • Release-byggnader, som är helt fristående och inte kräver extra paket för att köras. Det här är paketen som tillhandahålls till en App Store.

  • Debug-byggen, som inte är det.

Dessa pakettyper matchar MSBuild Configuration som skapar paketet.

Snabb distribution

Snabb distribution fungerar genom att ytterligare krympa Storleken på Android-programpaketet. Detta görs genom att exkludera appens sammansättningar från paketet och i stället distribuera appens sammansättningar direkt till programmets interna files katalog, som vanligtvis finns i /data/data/com.some.package. Den interna files katalogen är inte en globalt skrivbar mapp, så run-as verktyget används för att köra alla kommandon för att kopiera filerna till den katalogen.

Den här processen påskyndar bygg-/distributions-/felsökningscykeln eftersom paketet inte installeras om när endast sammansättningar ändras. Endast de uppdaterade sammansättningarna synkroniseras om till målenheten.

Varning

Snabb distribution brukar misslyckas på enheter som blockerar run-as, vilket ofta inkluderar enheter med Android-version före 5.0.

Snabb distribution stöds för både .apk paketformat och .aab paketformat. Den är aktiverad som standard och kan inaktiveras i Felsökningsversioner genom att ställa in $(EmbedAssembliesIntoApk) egenskapen på True. Observera att användningen av .aab med snabb distribution kommer att vara långsammare än .apk eftersom .aab-filen måste bearbetas genom bundletool för paketering och installation.

Läget Förbättrad snabb distribution kan användas tillsammans med den här funktionen för att påskynda distributionerna ytterligare. Detta distribuerar både sammansättningar, interna bibliotek, typkartor och dexer till files katalogen. Men du bör egentligen bara behöva aktivera detta om du ändrar interna bibliotek, bindningar eller Java-kod.

MSBuild-projekt

.NET för Android-byggprocessen baseras på MSBuild, som också är det projektfilformat som används av Visual Studio för Mac och Visual Studio. Normalt behöver användarna inte redigera MSBuild-filerna för hand – IDE:t skapar fullständigt funktionella projekt och uppdaterar dem med eventuella ändringar som görs och anropar automatiskt byggmål efter behov.

Avancerade användare kanske vill göra saker som inte stöds av IDE:s GUI, så byggprocessen kan anpassas genom att du redigerar projektfilen direkt. Den här sidan dokumenterar endast .NET för Android-specifika funktioner och anpassningar – många fler saker är möjliga med vanliga MSBuild-objekt, egenskaper och mål.

Bindningsprojekt

Följande MSBuild-egenskaper används med bindningsprojekt:

Resource.designer.cs Generation

Följande MSBuild-egenskaper används för att styra genereringen Resource.designer.cs av filen:

Signeringsegenskaper

Signeringsegenskaper styr hur programpaketet signeras så att det kan installeras på en Android-enhet. För att möjliggöra snabbare build-iteration signerar .NET för Android-uppgifter inte paket under byggprocessen, eftersom signeringen är ganska långsam. I stället signeras de (om det behövs) före installationen eller under exporten, av IDE eller byggmålet Installera . Om du anropar SignAndroidPackage-målet skapas ett paket med suffixet -Signed.apk i utdatakatalogen.

Som standard genererar signeringsmålet en ny felsökningssigneringsnyckel om det behövs. Om du vill använda en specifik nyckel, till exempel på en byggserver, används följande MSBuild-egenskaper:

keytool Alternativmappning

Överväg följande keytool anrop:

$ 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]

Om du vill använda nyckelarkivet som genereras ovan använder du egenskapsgruppen:

<PropertyGroup>
    <AndroidKeyStore>True</AndroidKeyStore>
    <AndroidSigningKeyStore>filename.keystore</AndroidSigningKeyStore>
    <AndroidSigningStorePass>keystore.filename password</AndroidSigningStorePass>
    <AndroidSigningKeyAlias>keystore.alias</AndroidSigningKeyAlias>
    <AndroidSigningKeyPass>keystore.alias password</AndroidSigningKeyPass>
</PropertyGroup>

Skapa tilläggspunkter

.NET för Android-byggsystemet exponerar några offentliga tilläggspunkter för användare som vill ansluta till vår byggprocess. Om du vill använda någon av dessa tilläggspunkter måste du lägga till ditt anpassade mål i lämplig MSBuild-egenskap i en PropertyGroup. Som exempel:

<PropertyGroup>
   <AfterGenerateAndroidManifest>
      $(AfterGenerateAndroidManifest);
      YourTarget;
   </AfterGenerateAndroidManifest>
</PropertyGroup>

Tilläggspunkter inkluderar:

Ett varningens ord om att utöka byggprocessen: Om de inte skrivs korrekt kan byggtillägg påverka byggprestandan, särskilt om de körs i varje version. Vi rekommenderar starkt att du läser MSBuild-dokumentationen innan du implementerar sådana tillägg.

Måldefinitioner

.NET för Android-specifika delar av byggprocessen definieras i $(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets, men normala språkspecifika mål som Microsoft.CSharp.targets krävs också för att skapa sammansättningen.

Följande byggegenskaper måste anges innan du importerar några språkmål:

<PropertyGroup>
  <TargetFrameworkIdentifier>MonoDroid</TargetFrameworkIdentifier>
  <MonoDroidVersion>v1.0</MonoDroidVersion>
  <TargetFrameworkVersion>v2.2</TargetFrameworkVersion>
</PropertyGroup>

Alla dessa mål och egenskaper kan inkluderas för C# genom att importera Xamarin.Android.CSharp.targets:

<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />

Den här filen kan enkelt anpassas för andra språk.