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íčů:
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.
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ý keytool vytvoř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 aab
hodnotu .
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ý keytool vytvoř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:
- Cílová architektura je nastavena na něco, co obsahuje text
-android
. - Konfigurace sestavení je nastavena na
Release
hodnotu .
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 aab
hodnotu .
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é
- Informace o balíčcích aplikací pro Android na developer.android.com