Létrehozási folyamat

Az Androidhoz készült .NET építési folyamat felelős az egész összefogásáért: a generálásért, a @(AndroidAsset)@(AndroidResource) támogatásáért és további build műveletekért, az Android-kompatibilis burkolók létrehozásáért, valamint a .apk futtatásáért Android-eszközökön.

Alkalmazáscsomagok

Általánosságban véve az Android-alkalmazáscsomagok (.apk fájlok) két típusa létezik, amelyeket az androidos .NET buildrendszer képes létrehozni:

  • Kiadási verziók, amelyek teljesen önállóak, és nem igényelnek további csomagokat a futtatáshoz. Ezek az App Store-nak biztosított csomagok.

  • Hibakeresési buildok, amelyek nem működnek.

Ezek a csomagtípusok megegyeznek a csomagot előállító MSBuild Configuration típusokkal.

Gyors üzembe helyezés

A gyors üzembe helyezés az Android-alkalmazáscsomagok méretének további zsugorításával működik. Az alkalmazás szerelvényeit úgy zárja ki a csomagból, hogy azokat közvetlenül az alkalmazás belső files könyvtárában helyezi el, amely általában a /data/data/com.some.package helyen található. A belső files könyvtár nem globálisan írható mappa, ezért az eszköz az run-as összes parancs végrehajtására szolgál a fájlok ebbe a könyvtárba való másolásához.

Ez a folyamat felgyorsítja a buildelési/üzembe helyezési/hibakeresési ciklust, mert a csomag nem lesz újratelepítve , ha csak a szerelvények módosulnak. Csak a frissített szerelvények lesznek újraszinkronizálva a céleszközre.

Figyelmeztetés

A gyors üzembe helyezésről ismert, hogy nem működik azokon az eszközökön, amelyek blokkolják a run-as, ami gyakran magában foglalja az Android 5.0-nál régebbi eszközöket is.

A gyors üzembe helyezés támogatott mind a .apk, mind a .aab csomagformátumok esetében. Alapértelmezés szerint engedélyezve van, és a $(EmbedAssembliesIntoApk) tulajdonság beállításával letiltható a Debug buildekben. Vegye figyelembe, hogy a .aab használata gyors üzembe helyezéssel lassabb lesz, mint a .apk, mivel a .aab fájlt bundletool-on keresztül kell feldolgozni a csomagoláshoz és telepítéshez.

A továbbfejlesztett gyors üzembe helyezési mód ezzel a funkcióval együtt használható az üzembe helyezés további felgyorsításához. Ez mind az összeállításokat, a natív könyvtárakat, a típustérképeket és a DEX fájlokat a files könyvtárba telepíti. Ezt azonban csak akkor kell engedélyeznie, ha natív kódtárakat, kötéseket vagy Java-kódot módosít.

MSBuild-projektek

Az Android .NET buildelési folyamata az MSBuilden alapul, amely a Visual Studio for Mac és a Visual Studio által használt projektfájl-formátum. A felhasználóknak általában nem kell kézzel szerkeszteniük az MSBuild fájlokat – az IDE teljesen működőképes projekteket hoz létre, és frissíti őket minden módosítással, és szükség szerint automatikusan meghívja a buildcélokat.

Előfordulhat, hogy a haladó felhasználók olyan műveleteket szeretnének végrehajtani, amelyeket az IDE grafikus felülete nem támogat, így a létrehozási folyamat testre szabható a projektfájl közvetlen szerkesztésével. Ez a lap csak az Android-specifikus funkciókhoz és testreszabásokhoz készült .NET-et tartalmazza – a normál MSBuild elemekkel, tulajdonságokkal és célokkal még sok minden lehetséges.

Projektek összekapcsolása

A kötésprojektek a következő MSBuild tulajdonságokat használják:

Resource.designer.cs Generáció

A következő MSBuild tulajdonságok szabályozzák a Resource.designer.cs fájl létrehozását:

Aláírási tulajdonságok

Az aláírási tulajdonságok szabályozzák, hogy az alkalmazáscsomag hogyan legyen aláírva, hogy az androidos eszközre telepíthető legyen. A gyorsabb buildelési iteráció érdekében az Androidhoz készült .NET-feladatok nem írnak alá csomagokat a buildelési folyamat során, mivel az aláírás meglehetősen lassú. Ehelyett (ha szükséges) a telepítés előtt vagy az exportálás során, az IDE vagy az Install build cél által vannak aláírva. A SignAndroidPackage cél meghívásával létrehoz egy csomagot a -Signed.apk utótaggal a kimeneti könyvtárban.

Alapértelmezés szerint az aláírási cél létrehoz egy új hibakeresési aláírási kulcsot, ha szükséges. Ha egy adott kulcsot( például buildkiszolgálón) szeretne használni, a rendszer a következő MSBuild tulajdonságokat használja:

keytool Beállításleképezés

Fontolja meg a következő keytool hívást:

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

A fent létrehozott kulcstár használatához használja a tulajdonságcsoportot:

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

Bővítménypontok létrehozása

Az androidos .NET buildrendszer néhány nyilvános bővítménypontot tesz elérhetővé a buildelési folyamatba csatlakozni kívánó felhasználók számára. Ezen bővítménypontok egyikének használatához hozzá kell adnia az egyéni célértéket a megfelelő MSBuild tulajdonsághoz egy PropertyGroup. Például:

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

A bővítménypontok a következők:

A buildelési folyamat kiterjesztésére vonatkozó figyelmeztetés: Ha nem megfelelően van megírva, a buildbővítmények hatással lehetnek a build teljesítményére, különösen akkor, ha minden builden futnak. Javasoljuk, hogy az ilyen bővítmények implementálása előtt olvassa el az MSBuild dokumentációját .

Céldefiníciók

A buildelési folyamat Androidra specifikus .NET részeit a $(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets határozza meg, de az összeállítás létrehozásához normál nyelvspecifikus célokra, mint például Microsoft.CSharp.targets is szükség van.

A nyelvi célok importálása előtt a következő buildtulajdonságokat kell megadni:

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

Ezek a célok és tulajdonságok a Xamarin.Android.CSharp.targets importálásával vehetők fel a C#-hoz:

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

Ez a fájl könnyen adaptálható más nyelvekhez.