Sdílet prostřednictvím


Publikování aplikace pro Android pomocí příkazového řádku

Pokud chcete distribuovat aplikaci .NET pro Android s více platformami (.NET MAUI), budete ji muset podepsat pomocí klíče z úložiště klíčů. Úložiště klíčů je databáze certifikátů zabezpečení vytvořených pomocí keytool sady Java Development Kit (JDK). Při publikování aplikace .NET MAUI pro Android se vyžaduje úložiště klíčů, protože Android nebude spouštět aplikace, které nebyly podepsány.

Vytvoření souboru úložiště klíčů

Během vývoje používá .NET pro Android k podepsání aplikace ladicí úložiště klíčů, které umožňuje nasazení přímo do emulátoru nebo do zařízení nakonfigurovaných pro spouštění laditelných aplikací. Úložiště klíčů ale není rozpoznáno jako platné úložiště klíčů pro účely distribuce aplikací. Proto se musí vytvořit privátní úložiště klíčů a použít k podepisování sestavení vydaných verzí. Jedná se o krok, který by se měl provést jenom jednou, protože stejný klíč se použije k publikování aktualizací a dá se použít k podepisování jiných aplikací. Po vygenerování souboru úložiště klíčů zadáte jeho podrobnosti z příkazového řádku při vytváření aplikace nebo nakonfigurujete soubor projektu tak, aby na něj odkazovala.

Pomocí následujících kroků vytvořte soubor úložiště klíčů:

  1. Otevřete terminál a přejděte do složky projektu.

    Tip

    Pokud je sada Visual Studio otevřená, pomocí nabídky Zobrazit>terminál otevřete terminál v umístění řešení nebo projektu. Přejděte do složky projektu.

  2. Spusťte nástroj keytool s následujícími parametry:

    keytool -genkeypair -v -keystore {filename}.keystore -alias {keyname} -keyalg RSA -keysize 2048 -validity 10000
    

    Důležité

    Pokud máte na počítači nainstalovaných více verzí sady JDK, ujistěte se, že používáte keytool nejnovější verzi sady JDK.

    Zobrazí se výzva k zadání a potvrzení hesla, po kterém následuje celé jméno, organizační jednotka, organizace, město nebo lokalita, stát nebo kraj a kód země. Tyto informace se ve vaší aplikaci nezobrazují, ale jsou součástí vašeho certifikátu.

    Pokud chcete například vygenerovat soubor myapp.keystore ve stejné složce jako váš projekt s aliasem myapp, použijte následující příkaz:

    keytool -genkeypair -v -keystore myapp.keystore -alias myapp -keyalg RSA -keysize 2048 -validity 10000
    

    Tip

    Zálohujte úložiště klíčů a heslo. Pokud ji ztratíte, nebudete moct aplikaci podepsat se stejnou podpisovou identitou.

Vyhledání podpisu úložiště klíčů

Pokud chcete zobrazit seznam klíčů uložených v úložišti klíčů, použijte keytool tuto -list možnost:

keytool -list -keystore {filename}.keystore

Pokud například chcete zobrazit seznam klíčů v úložišti klíčů s názvem myapp.keystore, použijte následující příkaz:

keytool -list -keystore myapp.keystore

Sestavení a podepsání aplikace

Pokud chcete aplikaci sestavit z příkazového řádku a podepsat ji pomocí úložiště klíčů, otevřete terminál a přejděte do složky pro projekt aplikace .NET MAUI. dotnet publish Spusťte příkaz a zadejte následující parametry:

Parametr Hodnota
-f nebo --framework Cílová architektura, která je net8.0-android.
-c nebo --configuration Konfigurace sestavení, což je Release.

Upozorňující

Pokus o publikování řešení .NET MAUI způsobí dotnet publish , že se příkaz pokusí publikovat každý projekt v řešení jednotlivě, což může způsobit problémy při přidání dalších typů projektů do řešení. dotnet publish Proto by měl být příkaz vymezený na váš projekt aplikace .NET MAUI.

Další parametry sestavení je možné zadat na příkazovém řádku, pokud nejsou zadané v <PropertyGroup> souboru projektu. V následující tabulce jsou uvedeny některé běžné parametry:

Parametr Hodnota
-p:ApplicationTitle Jméno viditelné uživatelem aplikace
-p:ApplicationId Jedinečný identifikátor aplikace, například com.companyname.mymauiapp.
-p:ApplicationVersion Verze sestavení, která identifikuje iteraci aplikace.
-p:ApplicationDisplayVersion Číslo verze aplikace
-p:AndroidKeyStore Logická hodnota, která označuje, jestli má být aplikace podepsaná. Výchozí hodnota je false.
-p:AndroidPackageFormats Středník oddělená vlastnost, která označuje, jestli chcete aplikaci zabalit jako soubor APK nebo AAB. Nastavte na jeden aab nebo apk vygenerujte pouze jeden formát. Výchozí hodnota sestavení vydané verze je aab;apk.
-p:AndroidSigningKeyAlias Alias klíče v úložišti klíčů. Toto je hodnota použitá keytool -alias při vytváření úložiště klíčů.
-p:AndroidSigningKeyPass Heslo klíče v souboru úložiště klíčů. Toto je hodnota zadaná keytool při vytváření souboru úložiště klíčů a zobrazí se výzva k zadání hesla úložiště klíčů. Důvodem je to, že výchozí typ úložiště klíčů předpokládá, že heslo klíče a heslo úložiště klíčů jsou identické. Tato vlastnost také podporuje env: a file: předpony, které lze použít k zadání proměnné prostředí nebo souboru, který obsahuje heslo. Tyto možnosti poskytují způsob, jak zabránit zobrazení hesla v protokolech sestavení.
-p:AndroidSigningKeyStore Název souboru úložiště klíčů, který keytoolvytvořil . Toto je hodnota použitá keytool -keystore při vytváření úložiště klíčů.
-p:AndroidSigningStorePass Heslo pro soubor úložiště klíčů. Toto je hodnota zadaná keytool při vytváření souboru úložiště klíčů a zobrazí se výzva k zadání hesla úložiště klíčů. Důvodem je to, že výchozí typ úložiště klíčů předpokládá, že heslo úložiště klíčů a heslo klíče jsou stejné. Tato vlastnost také podporuje env: a file: předpony, které lze použít k zadání proměnné prostředí nebo souboru, který obsahuje heslo. Tyto možnosti poskytují způsob, jak zabránit zobrazení hesla v protokolech sestavení.
-p:PublishTrimmed Logická hodnota, která označuje, jestli se má aplikace oříznout. Výchozí hodnota je true pro buildy vydaných verzí.

Měli byste použít stejné heslo jako hodnoty AndroidSigningKeyPass parametrů a AndroidSigningStorePass parametrů.

Úplný seznam vlastností sestavení naleznete v tématu Vlastnosti sestavení.

Důležité

Hodnoty těchto parametrů nemusí být zadané na příkazovém řádku. Dají se také zadat v souboru projektu. Pokud je parametr zadaný na příkazovém řádku a v souboru projektu, má přednost parametr příkazového řádku. Další informace o poskytování vlastností sestavení v souboru projektu naleznete v tématu Definování vlastností sestavení v souboru projektu.

Spuštěním dotnet publish příkazu s následujícími parametry sestavte a podepište aplikaci:

dotnet publish -f net8.0-android -c Release -p:AndroidKeyStore=true -p:AndroidSigningKeyStore={filename}.keystore -p:AndroidSigningKeyAlias={keyname} -p:AndroidSigningKeyPass={password} -p:AndroidSigningStorePass={password}

Poznámka:

V .NET 8 se příkaz dotnet publish ve výchozím nastavení nastaví na Release konfiguraci. Proto je možné konfiguraci sestavení z příkazového řádku vynechat.

Pomocí následujícího příkazu můžete například sestavit a podepsat aplikaci pomocí dříve vytvořeného úložiště klíčů:

dotnet publish -f net8.0-android -c Release -p:AndroidKeyStore=true -p:AndroidSigningKeyStore=myapp.keystore -p:AndroidSigningKeyAlias=myapp -p:AndroidSigningKeyPass=mypassword -p:AndroidSigningStorePass=mypassword

Podpora AndroidSigningKeyPass i file: předpony i AndroidSigningStorePass vlastnostienv:, které lze použít k zadání proměnné prostředí nebo souboru, který obsahuje heslo. Zadáním hesla tímto způsobem zabráníte zobrazení v protokolech sestavení. Pokud chcete například použít proměnnou prostředí s názvem AndroidSigningPassword:

dotnet publish -f net8.0-android -c Release -p:AndroidKeyStore=true -p:AndroidSigningKeyStore=myapp.keystore -p:AndroidSigningKeyAlias=myapp -p:AndroidSigningKeyPass=env:AndroidSigningPassword -p:AndroidSigningStorePass=env:AndroidSigningPassword

Důležité

Předpona env: není podporována, pokud $(AndroidPackageFormat) je nastavena na aabhodnotu .

Chcete-li použít soubor umístěný v umístění C:\Users\user1\AndroidSigningPassword.txt:

dotnet publish -f net8.0-android -c Release -p:AndroidKeyStore=true -p:AndroidSigningKeyStore=myapp.keystore -p:AndroidSigningKeyAlias=myapp -p:AndroidSigningKeyPass=file:C:\Users\user1\AndroidSigningPassword.txt -p:AndroidSigningStorePass=file:C:\Users\user1\AndroidSigningPassword.txt

Publikování sestaví a podepíše aplikaci a potom zkopíruje soubory AAB a APK do složky bin\Release\net8.0-android\publish . Existují dva soubory AAB – jeden nepodepsaný a druhý podepsaný. Podepsaná varianta má -signed in the file name.

Další informace o dotnet publish příkazu naleznete v tématu dotnet publish.

Poznámka:

U aplikací dotnet build pro Android je možné ji také použít k sestavení a podepsání aplikace. Soubory AAB a APK se však vytvoří ve složce bin\Release\net8.0-android místo podsložky publikování . dotnet build ve výchozím nastavení je Debug nastavená konfigurace, takže -c parametr je nutný k zadání Release konfigurace.

Definování vlastností sestavení v souboru projektu

Alternativou k určení parametrů sestavení na příkazovém řádku je zadat je v souboru projektu v souboru projektu v souboru <PropertyGroup>. V následující tabulce jsou uvedeny některé společné vlastnosti sestavení:

Vlastnost Hodnota
<ApplicationTitle> Jméno viditelné uživatelem aplikace
<ApplicationId> Jedinečný identifikátor aplikace, například com.companyname.mymauiapp.
<ApplicationVersion> Verze sestavení, která identifikuje iteraci aplikace.
<ApplicationDisplayVersion> Číslo verze aplikace
<AndroidKeyStore> Logická hodnota, která označuje, jestli má být aplikace podepsaná. Výchozí hodnota je false.
<AndroidPackageFormats> Středník oddělená vlastnost, která označuje, jestli chcete aplikaci zabalit jako soubor APK nebo AAB. Nastavte na jeden aab nebo apk vygenerujte pouze jeden formát. Výchozí hodnota sestavení vydané verze je aab;apk.
<AndroidSigningKeyAlias> Alias klíče v úložišti klíčů. Toto je hodnota použitá keytool -alias při vytváření úložiště klíčů.
<AndroidSigningKeyPass> Heslo klíče v souboru úložiště klíčů. Toto je hodnota zadaná keytool při vytváření souboru úložiště klíčů a zobrazí se výzva k zadání hesla úložiště klíčů. Důvodem je to, že výchozí typ úložiště klíčů předpokládá, že heslo klíče a heslo úložiště klíčů jsou identické. Tato vlastnost také podporuje env: a file: předpony, které lze použít k zadání proměnné prostředí nebo souboru, který obsahuje heslo. Tyto možnosti poskytují způsob, jak zabránit zobrazení hesla v protokolech sestavení.
<AndroidSigningKeyStore> Název souboru úložiště klíčů, který keytoolvytvořil . Toto je hodnota použitá keytool -keystore při vytváření úložiště klíčů.
<AndroidSigningStorePass> Heslo pro soubor úložiště klíčů. Toto je hodnota zadaná keytool při vytváření souboru úložiště klíčů a zobrazí se výzva k zadání hesla úložiště klíčů. Důvodem je to, že výchozí typ úložiště klíčů předpokládá, že heslo úložiště klíčů a heslo klíče jsou stejné. Tato vlastnost také podporuje env: a file: předpony, které lze použít k zadání proměnné prostředí nebo souboru, který obsahuje heslo. Tyto možnosti poskytují způsob, jak zabránit zobrazení hesla v protokolech sestavení.
<PublishTrimmed> Logická hodnota, která označuje, jestli se má aplikace oříznout. Výchozí hodnota je true pro buildy vydaných verzí.

Úplný seznam vlastností sestavení naleznete v tématu Vlastnosti sestavení.

Důležité

Hodnoty těchto vlastností sestavení nemusí být v souboru projektu zadané. Dají se také poskytnout na příkazovém řádku při publikování aplikace. To umožňuje vynechat konkrétní hodnoty ze souboru projektu.

Následující příklad ukazuje typickou skupinu vlastností pro sestavování a podepisování aplikace pro Android:

<PropertyGroup Condition="$(TargetFramework.Contains('-android')) and '$(Configuration)' == 'Release'">
    <AndroidSigningKeyStore>myapp.keystore</AndroidSigningKeyStore>
    <AndroidSigningKeyAlias>myapp</AndroidSigningKeyAlias>
</PropertyGroup>

Tento příklad <PropertyGroup> přidá kontrolu podmínky, která brání zpracování těchto nastavení, pokud kontrola podmínky neprojde. Kontrola podmínek hledá dvě věci:

  1. Cílová architektura je nastavena na něco, co obsahuje text -android.
  2. Konfigurace sestavení je nastavena na Releasehodnotu .

Pokud některé z těchto podmínek selžou, nastavení se nezpracují. Důležitější je, že <AndroidSigningKeyStore> nastavení a <AndroidSigningKeyAlias> nastavení nejsou nastavené, aby aplikace nebyla podepsána.

Z bezpečnostních důvodů byste neměli zadávat hodnotu pro <AndroidSigningKeyPass> soubor projektu ani <AndroidSigningStorePass> do souboru projektu. Tyto hodnoty můžete zadat na příkazovém řádku při publikování aplikace nebo pomocí env: předpon nebo file: předpon zabránit tomu, aby se heslo zobrazovalo v protokolech sestavení. Pokud chcete například použít proměnnou prostředí s názvem AndroidSigningPassword:

<PropertyGroup Condition="$(TargetFramework.Contains('-android')) and '$(Configuration)' == 'Release'">
    <AndroidSigningKeyStore>myapp.keystore</AndroidSigningKeyStore>
    <AndroidSigningKeyAlias>myapp</AndroidSigningKeyAlias>
    <AndroidSigningKeyPass>env:AndroidSigningPassword</AndroidSigningKeyPass>
    <AndroidSigningStorePass>env:AndroidSigningPassword</AndroidSigningStorePass>
</PropertyGroup>

Důležité

Předpona env: není podporována, pokud $(AndroidPackageFormat) je nastavena na aabhodnotu .

Případně můžete použít soubor umístěný v umístění C:\Users\user1\AndroidSigningPassword.txt:

<PropertyGroup Condition="$(TargetFramework.Contains('-android')) and '$(Configuration)' == 'Release'">
    <AndroidSigningKeyStore>myapp.keystore</AndroidSigningKeyStore>
    <AndroidSigningKeyAlias>key</AndroidSigningKeyAlias>
    <AndroidSigningKeyPass>file:C:\Users\user1\AndroidSigningPassword.txt</AndroidSigningKeyPass>
    <AndroidSigningStorePass>file:C:\Users\user1\AndroidSigningPassword.txt</AndroidSigningStorePass>
</PropertyGroup>

Distribuce aplikace

Podepsaný soubor APK nebo AAB je možné distribuovat jedním z následujících přístupů:

  • Nejběžnějším přístupem k distribuci aplikací pro Android uživatelům je Google Play. Google Play vyžaduje, abyste aplikaci odeslali jako sadu aplikací pro Android (AAB). Další informace najdete v tématu Nahrání aplikace do konzoly Přehrát na developer.android.com
  • Soubory APK lze distribuovat do zařízení s Androidem prostřednictvím webu nebo serveru. Když uživatelé na svém zařízení s Androidem přejdou na odkaz ke stažení, stáhne se soubor. Android ho automaticky spustí na zařízení, pokud uživatel nakonfiguroval nastavení tak, aby umožňoval instalaci aplikací z neznámých zdrojů. Další informace o tom, jak povolit aplikace z neznámých zdrojů, najdete v tématu Výslovný souhlas uživatele s neznámými aplikacemi a zdroji v developer.android.com.

Viz také