Příprava aplikace na vydání

Po naprogramování a otestování aplikace je nutné připravit balíček pro distribuci. Prvním úkolem při přípravě tohoto balíčku je sestavit aplikaci pro vydání, což zahrnuje hlavně nastavení některých atributů aplikace.

Pomocí následujících kroků sestavte aplikaci pro vydání:

  • Zadejte ikonu aplikace – Každá aplikace Xamarin.Android by měla mít zadanou ikonu aplikace. I když to technicky není nutné, některé trhy, jako je Google Play, vyžadují.

  • Verze aplikace – Tento krok zahrnuje inicializaci nebo aktualizaci informací o správě verzí. To je důležité pro budoucí aktualizace aplikací a zajistit, aby uživatelé věděli, jakou verzi aplikace nainstalovali.

  • Zmenšete APK – Velikost konečného APK lze podstatně snížit pomocí linkeru Xamarin.Android ve spravovaném kódu a ProGuard na bajtecode Java.

  • Ochrana aplikace – Zabrání uživatelům nebo útočníkům v ladění, manipulaci nebo zpětné analýze aplikace zakázáním ladění, obfuscováním spravovaného kódu, přidáním anti-debug a anti-manipulací a použitím nativní kompilace.

  • Nastavit vlastnosti balení – Vlastnosti balení řídí vytvoření balíčku aplikace pro Android (APK). Tento krok optimalizuje APK, chrání jeho prostředky a podle potřeby modularizuje balení. Kromě toho můžete uživatelům poskytnout sadu aplikací pro Android, která je optimalizovaná pro jejich zařízení.

  • Kompilace – tento krok zkompiluje kód a prostředky pro ověření, že se sestavuje v režimu vydání.

  • Archiv pro publikování – Tento krok sestaví aplikaci a umístí ji do archivu pro podepisování a publikování.

Každý z těchto kroků je podrobněji popsaný níže.

Určení ikony aplikace

Důrazně doporučujeme, aby každá aplikace Xamarin.Android neurčovala ikonu aplikace. Některé marketplace aplikací neumožňují publikování aplikace pro Android bez jednoho. Vlastnost Icon atributu Application slouží k určení ikony aplikace pro projekt Xamarin.Android.

V sadě Visual Studio 2017 a novějším zadejte ikonu aplikace v části Manifest androidu vlastností projektu, jak je znázorněno na následujícím snímku obrazovky:

Set the application icon

V těchto příkladech odkazuje na soubor ikony umístěný v umístění Resources/drawable/icon.png (všimněte si, @drawable/icon že přípona .png není součástí názvu prostředku). Tento atribut lze deklarovat také v souboru Properties\AssemblyInfo.cs, jak je znázorněno v tomto ukázkovém fragmentu kódu:

[assembly: Application(Icon = "@drawable/icon")]

using Android.App Za normálních okolností je deklarován v horní části AssemblyInfo.cs (obor názvů atributu Application je Android.App); tento příkaz však možná budete muset přidatusing, pokud ještě není k dispozici.

Verze aplikace

Správa verzí je důležitá pro údržbu a distribuci aplikací pro Android. Bez nějakého druhu správy verzí je obtížné určit, jestli nebo jak se má aplikace aktualizovat. Při správě verzí rozpozná Android dva různé typy informací:

  • Číslo verze – celočíselná hodnota (interně použitá androidem a aplikací), která představuje verzi aplikace. Většina aplikací začíná touto hodnotou nastavenou na 1 a pak se zvýší o každé sestavení. Tato hodnota nemá žádný vztah nebo spřažení s atributem názvu verze (viz níže). Aplikace a služby publikování by neměly tuto hodnotu zobrazovat uživatelům. Tato hodnota je uložena v souboru AndroidManifest.xml jako android:versionCode.

  • Název verze – řetězec, který se používá pouze pro komunikaci informací uživateli o verzi aplikace (jak je nainstalováno na konkrétním zařízení). Název verze se má zobrazovat uživatelům nebo v Google Play. Tento řetězec není interně používán Androidem. Název verze může být libovolná řetězcová hodnota, která by uživateli pomohla identifikovat sestavení nainstalované na svém zařízení. Tato hodnota je uložena v souboru AndroidManifest.xml jako android:versionName.

V sadě Visual Studio lze tyto hodnoty nastavit v části Manifest android projektu Vlastnosti projektu, jak je znázorněno na následujícím snímku obrazovky:

Set the version number

Zmenšení APK

Sady API Xamarin.Android je možné zmenšit pomocí kombinace linkeru Xamarin.Android, který odebere nepotřebný spravovaný kód, a nástroj ProGuard ze sady Android SDK, který odebere nepoužívané bajtové kódy Java. Proces sestavení nejprve pomocí linkeru Xamarin.Android optimalizuje aplikaci na úrovni spravovaného kódu (C#) a později použije ProGuard (pokud je povoleno) k optimalizaci APK na úrovni bajtového kódu Java.

Konfigurace Linkeru

Režim vydání vypne sdílený modul runtime a zapne propojení tak, aby aplikace dodává pouze části Xamarin.Android vyžadované za běhu. Linker v Xamarin.Android používá statickou analýzu k určení, která sestavení, typy a členy typu se používají nebo na které odkazují aplikace Xamarin.Android. Linker pak zahodí všechna nepoužívané sestavení, typy a členy, které se nepoužívají (nebo na které se odkazují). To může vést k významnému snížení velikosti balíčku. Představte si například ukázku HelloWorld , která zaznamená 83% snížení konečné velikosti apk:

  • Konfigurace: Žádné – Xamarin.Android 4.2.5 Velikost = 17,4 MB.

  • Konfigurace: Pouze sestavení sady SDK – velikost Xamarin.Android 4.2.5 = 3,0 MB.

Nastavení možností linkeru v části Možnosti androidu ve vlastnostech projektu:

Linker options

Rozevírací nabídka Propojování nabízí následující možnosti pro řízení linkeru:

  • Žádné – Tím se linker vypne. Nebude provedeno žádné propojení.

  • Pouze sestavení SADY SDK – Tím se propojí pouze sestavení, která vyžaduje Xamarin.Android. Jiná sestavení nebudou propojena.

  • Sdk a uživatelská sestavení – Tím se propojí všechna sestavení, která aplikace vyžaduje, a ne jenom ta, která vyžaduje Xamarin.Android.

Propojení může způsobit některé nežádoucí vedlejší účinky, takže je důležité, aby aplikace byla znovu testována v režimu vydání na fyzickém zařízení.

ProGuard

ProGuard je nástroj sady Android SDK, který propojuje a obfuskuje kód Java. ProGuard se obvykle používá k vytváření menších aplikací tím, že snižuje nároky na velké zahrnuté knihovny (například služby Google Play) ve vašem APK. ProGuard odebere nepoužívané bajtové kódy Javy, což zmenší výslednou aplikaci. Například použití Nástroje ProGuard u malých aplikací Xamarin.Android obvykle dosahuje přibližně 24% snížení velikosti – použití Nástroje ProGuard u větších aplikací s více závislostmi knihoven obvykle dosahuje ještě větší zmenšení velikosti.

ProGuard není alternativou k linkeru Xamarin.Android. Linker Xamarin.Android odkazuje spravovaný kód, zatímco ProGuard propojuje bajtové kódy Java. Proces sestavení nejprve pomocí linkeru Xamarin.Android optimalizuje spravovaný kód (C#) v aplikaci a později použije ProGuard (pokud je povoleno) k optimalizaci APK na úrovni bajtového kódu Java.

Když je zaškrtnuto políčko Povolit ProGuard , Xamarin.Android spustí nástroj ProGuard na výsledném APK. Konfigurační soubor ProGuard se generuje a používá proGuard v době sestavení. Xamarin.Android také podporuje vlastní akce sestavení ProguardConfiguration . Do projektu můžete přidat vlastní konfigurační soubor ProGuard, kliknout na něj pravým tlačítkem myši a vybrat ho jako akci sestavení, jak je znázorněno v tomto příkladu:

ProGuard je ve výchozím nastavení zakázaný. Možnost Povolit ProGuard je dostupná pouze v případech, kdy je projekt nastavený na režim vydání . Všechny akce sestavení ProGuard se ignorují, pokud není zaškrtnuté políčko Povolit ProGuard . Konfigurace Xamarin.Android ProGuard neobfuscate APK a není možné povolit obfuskace, a to ani u vlastních konfiguračních souborů. Pokud chcete použít obfuskaci, přečtěte si téma Ochrana aplikací pomocí Nástroje Dotfuscator.

Podrobnější informace o použití nástroje ProGuard naleznete v tématu ProGuard.

Ochrana aplikace

Zakázání ladění

Během vývoje aplikace pro Android se ladění provádí pomocí protokolu JDWP (Java Debug Wire Protocol ). Jedná se o technologii, která umožňuje nástrojům, jako je adb , komunikovat s prostředím JVM za účelem ladění. Pro sestavení ladění aplikace Xamarin.Android je ve výchozím nastavení zapnutý JDWP. I když je během vývoje důležité JDWP, může představovat problém se zabezpečením pro vydané aplikace.

Důležité

Vždy zakažte stav ladění v vydané aplikaci, protože je to možné (prostřednictvím JDWP) získat úplný přístup k procesu Java a spustit libovolný kód v kontextu aplikace, pokud tento stav ladění není zakázán.

Manifest androidu android:debuggable obsahuje atribut, který určuje, zda může být aplikace laděná. Je považován za dobrý postup nastavit android:debuggable atribut na false. Nejjednodušším způsobem, jak to udělat, je přidání příkazu podmíněného kompilace do AssemblyInfo.cs:

#if DEBUG
[assembly: Application(Debuggable=true)]
#else
[assembly: Application(Debuggable=false)]
#endif

Všimněte si, že sestavení ladění automaticky nastavují některá oprávnění, aby bylo ladění jednodušší (například Internet a ReadExternalStorage). Sestavení vydaných verzí však používají pouze oprávnění, která explicitně nakonfigurujete. Pokud zjistíte, že přepnutí na build vydané verze způsobí ztrátu oprávnění dostupného v sestavení ladění, ověřte, že jste toto oprávnění explicitně povolili v seznamu Požadovaná oprávnění , jak je popsáno v části Oprávnění.

Ochrana aplikací pomocí Nástroje Dotfuscator

I když je ladění zakázané, je stále možné, aby útočníci znovu zabalili aplikaci, přidali nebo odebrali možnosti konfigurace nebo oprávnění. To jim umožňuje provádět zpětnou analýzu, ladění nebo manipulaci s aplikací. Dotfuscator Community Edition (CE) se dá použít k obfuscaci spravovaného kódu a vložení kódu detekce stavu zabezpečení modulu runtime do aplikace Xamarin.Android v době sestavení, abyste zjistili a reagovali, pokud je aplikace spuštěná na kořenovém zařízení.

Dotfuscator CE je součástí sady Visual Studio 2017. Chcete-li použít Nástroj Dotfuscator, klepněte na tlačítko Nástroje > PreEmptive Protection - Dotfuscator.

Pokud chcete nakonfigurovat Dotfuscator CE, přečtěte si téma Použití Dotfuscator Community Edition s Xamarinem. Jakmile je nakonfigurovaný, nástroj Dotfuscator CE automaticky chrání každé vytvořené sestavení.

Sestavení zkompilovat do nativního kódu

Pokud je tato možnost povolená, sestavení se zabalí do nativní sdílené knihovny. To umožňuje komprimaci sestavení, což umožňuje menší .apk soubory. Komprese sestavení také poskytuje minimální formu obfuskace; takové obfuskace by se nemělo spoléhat.

Tato možnost vyžaduje licenci Enterprise a je dostupná jenom v případě, že je zakázané použití rychlého nasazení . Sestavení sady do nativního kódu je ve výchozím nastavení zakázaná.

Všimněte si, že možnost Bundle into Native Code neznamená, že sestavení jsou zkompilována do nativního kódu. Kompilace AOT není možné použít ke kompilaci sestavení do nativního kódu.

Kompilace AOT

Možnost Kompilace AOT (na stránce Vlastnosti balení) umožňuje kompilaci sestavení před časem (AOT). Pokud je tato možnost povolená, je režie za běhu (JIT) minimalizovaná předkompilováním sestavení před modulem runtime. Výsledný nativní kód je součástí APK spolu s nekomilovanými sestaveními. Výsledkem je kratší doba spuštění aplikace, ale na úkor mírně větších velikostí APK.

Možnost Kompilace AOT vyžaduje licenci Enterprise nebo vyšší. Kompilace AOT je dostupná jenom v případě, že je projekt nakonfigurovaný pro režim vydání a ve výchozím nastavení je zakázaný. Další informace o kompilaci AOT naleznete v tématu AOT.

LLVM – Optimalizace kompilátoru

LLVM Optimalizace kompilátoru vytvoří menší a rychlejší zkompilovaný kód a převede sestavení kompilovaná pomocí AOT do nativního kódu, ale na úkor pomalejších časů sestavení. Kompilátor LLVM je ve výchozím nastavení zakázaný. Chcete-li použít kompilátor LLVM, musí být nejprve povolena možnost kompilace AOT (na stránce Vlastnosti balení).

Poznámka:

Možnost Optimalizace kompilátoru LLVM vyžaduje licenci Enterprise.

Nastavení vlastností balení

Vlastnosti balení lze nastavit v části Možnosti androidu vlastností projektu, jak je znázorněno na následujícím snímku obrazovky:

Packaging Properties

Mnoho z těchto vlastností, jako je použití sdíleného modulu runtime a použití rychlého nasazení , jsou určeny pro režim ladění. Pokud je ale aplikace nakonfigurovaná pro režim vydání, existují další nastavení, která určují, jak je aplikace optimalizovaná pro rychlost velikosti a spouštění, jak je chráněná před manipulací a jak se dá zabalit, aby podporovala různé architektury a omezení velikosti.

Určení podporovaných architektur

Při přípravě aplikace Xamarin.Android pro vydání je nutné zadat podporované architektury procesoru. Jeden APK může obsahovat strojový kód, který podporuje více různých architektur. Podrobnosti o podpoře více architektur procesoru najdete v tématu Architektury procesoru.

Vygenerovat jeden balíček (. APK) na vybrané ABI

Pokud je tato možnost povolená, vytvoří se jeden APK pro každý z podporovaných souborů ABI (vybraných na kartě Upřesnit , jak je popsáno v architektuře procesoru) místo jednoho velkého APK pro všechny podporované ABI. Tato možnost je dostupná jenom v případě, že je projekt nakonfigurovaný pro režim vydání a ve výchozím nastavení je zakázaný.

Multi-Dex

Pokud je povolena možnost Povolit Multi-Dex , nástroje sady Android SDK se používají k obejití limitu metody 65K formátu souboru .dex . Omezení metody 65K vychází z počtu metod Jazyka Java, na které aplikace odkazuje (včetně těch v knihovnách, na kterých aplikace závisí) – není založen na počtu metod, které jsou napsané ve zdrojovém kódu. Pokud aplikace definuje pouze několik metod, ale používá mnoho (nebo velké knihovny), je možné, že se překročí limit 65 tisíc.

Je možné, že aplikace nepoužívá každou metodu v každé knihovně, na kterou odkazuje; proto je možné, že nástroj, jako je Například ProGuard (viz výše), může odebrat nepoužívané metody z kódu. Osvědčeným postupem je povolit funkci Multi-Dex pouze v případě potřeby, tj. aplikace stále odkazuje na více než 65K java metod i po použití Nástroje ProGuard.

Další informace o systému Multi-Dex naleznete v tématu Konfigurace aplikací s více než 64K metodami.

Sady aplikací pro Android

Sady aplikací se liší od sad APK, protože není možné je nasadit přímo do zařízení. Jedná se spíše o formát, který je určený k nahrání se všemi zkompilovaným kódem a prostředky. Po nahrání podepsané sady aplikací bude Google Play obsahovat vše, co potřebuje k sestavení a podepsání sad APK vaší aplikace a jejich poskytování uživatelům pomocí dynamického doručování.

Pokud chcete povolit podporu sad aplikací pro Android, budete se muset přihlásit k bundle hodnotě vlastnosti Android Package Format v rámci možností projektu androidu. Než to uděláte, ujistěte se, že projekt změníte na Release konfiguraci, protože sady aplikací jsou určené jenom pro balíčky vydaných verzí.

Sadu aplikací teď můžete vygenerovat podle archivu toku. Tím se vygeneruje sada aplikací pro vaši aplikaci.

Další informace o sadách aplikací pro Android najdete v tématu Sady aplikací pro Android.

Kompilovat

Po dokončení všech výše uvedených kroků je aplikace připravená na kompilaci. Výběrem možnosti Sestavit > znovu sestavit řešení ověřte, že se sestavení úspěšně sestaví v režimu vydání. Všimněte si, že tento krok ještě nevygeneruje APK.

Podepisování balíčku aplikace popisuje balení a přihlašování podrobněji.

Archiv pro publikování

Chcete-li zahájit proces publikování, klikněte pravým tlačítkem myši na projekt v Průzkumník řešení a vyberte položku místní nabídky Archiv...:

Archive app

Archiv... spustí Správce archivu a zahájí proces archivace sady aplikací, jak je znázorněno na tomto snímku obrazovky:

Archive Manager

Dalším způsobem, jak vytvořit archiv, je kliknout pravým tlačítkem na řešení v Průzkumník řešení a vybrat Možnost Archivovat vše..., která sestaví řešení a archivuje všechny projekty Xamarinu, které můžou vygenerovat archiv:

Archive All

Archivovat i Archiv vše automaticky spustí Správce archivu. Pokud chcete správce archivu spustit přímo, klikněte na položku nabídky Správce archivu nástrojů>:

Launch Archive Manager

Archivy řešení kdykoli kliknutím pravého tlačítka myši na uzel Řešení a výběrem možnosti Zobrazit archivy:

View Archives

Správce archivu

Správce archivu se skládá z podokna seznam řešení, seznamu archivů a panelu podrobností:

Archive Manager Panes

V seznamu řešení se zobrazí všechna řešení, která mají alespoň jeden archivovaný projekt. Seznam řešení obsahuje následující části:

  • Aktuální řešení – zobrazí aktuální řešení. Tato oblast může být prázdná, pokud aktuální řešení nemá existující archiv.
  • Všechny archivy – zobrazí všechna řešení, která mají archiv.
  • Vyhledávací textové pole (nahoře) – Filtruje řešení uvedená v seznamu Všechny archivy podle hledaného řetězce zadaného do textového pole.

Seznam archivů zobrazí seznam všech archivů pro vybrané řešení. Seznam archivů obsahuje následující části:

  • Vybraný název řešení – zobrazí název řešení vybraného v seznamu řešení. Všechny informace zobrazené v seznamu archivů odkazují na toto vybrané řešení.
  • Filtr platforem – Toto pole umožňuje filtrovat archivy podle typu platformy (například iOS nebo Android).
  • Archivní položky – seznam archivů pro vybrané řešení Každá položka v tomto seznamu obsahuje název projektu, datum vytvoření a platformu. Může také zobrazit další informace, jako je průběh při archivaci nebo publikování položky.

Panel podrobností zobrazí další informace o jednotlivých archivech. Umožňuje také uživateli spustit pracovní postup distribuce nebo otevřít složku, ve které byla distribuce vytvořena. Oddíl Komentáře k sestavení umožňuje zahrnout do archivu komentáře k sestavení.

Distribuce

Když je archivovaná verze aplikace připravená k publikování, vyberte archiv ve Správci archivu a klikněte na tlačítko Distribuovat...

Distribute button

Dialogové okno Distribuční kanál zobrazuje informace o aplikaci, indikaci průběhu pracovního postupu distribuce a výběr distribučních kanálů. Při prvním spuštění se zobrazí dvě možnosti:

Select Distribution Channel

Je možné zvolit jeden z následujících distribučních kanálů:

  • Ad-Hoc – Uloží podepsaný soubor APK na disk, který se dá na zařízení s Androidem načíst bokem. Pokračujte podepisováním balíčku aplikace a zjistěte, jak vytvořit podpisovou identitu pro Android, vytvořit nový podpisový certifikát pro aplikace pro Android a publikovat ad hoc verzi aplikace na disk. To je dobrý způsob, jak vytvořit APK pro testování.

  • Google Play – Publikuje podepsaný APK do Google Play. Pokračujte v publikování na Google Play, abyste se dozvěděli, jak podepsat a publikovat APK v obchodě Google Play.