14
votes

Comment générer un fichier APK complet, y compris le module de fonctionnalités dynamiques

Mon projet a un module de fonctionnalité dynamique et je voudrais générer un débogage ou une version APK comprenant la fonctionnalité dynamique. Actuellement, je ne peux obtenir que le fichier APK de base.

Fondamentalement, je générerais un fichier APK comme une application normale. Mais je ne pouvais pas faire avec la fonctionnalité dynamique. Oui, je sais que la fonctionnalité dynamique fonctionnera sur la base d'AAB.

Existe-t-il des moyens de créer un fichier APK normal (base + tous les modules)?. Veuillez aider à ce sujet.

Merci


1 commentaires

Avez-vous envisagé de configurer vos variantes de construction? developer.android.com/studio/build/build-variants


3 Réponses :


9
votes

Vous pouvez spécifier si votre module à la demande doit être inclus dans l'APK universel qui est généralement généré pour les appareils plus anciens, puis vous pouvez utiliser bundletool pour générer un APK universel à partir de l'ensemble d'applications:.

Dans ce cas particulier, vous pouvez utiliser quelque chose comme:

./gradlew :app:packageDebugUniversalApk

Le point clé est d'inclure le --mode=universal this instruct bundletool pour générer un APK universel qui inclura tous les modules qui ont <dist:fusing dist:include="true"/> dans le manifeste.

De la même manière, lorsque vous exécutez votre projet à partir d'Android Studio sur un appareil, en utilisant la configuration par défaut pour Exécuter (Deploy = Default APK), il inclut tous vos modules à la demande.
Au lieu de cela, lorsque vous exécutez l'application à partir de Studio à l'aide de la configuration Exécuter (Deploy = APK d'AppBundle), vous pouvez choisir les modules installés.

Cependant, dans les deux cas, vous ne pouvez pas tester les téléchargements de modules à la demande si vous ne passez pas par le Play Store.

Remarque (novembre 2020)

Comme indiqué dans une autre réponse ci-dessous, le plug-in Android Gradle comprend quelques tâches non documentées qui peuvent être utilisées pour générer des fichiers APK universels Debug et Release non signés de votre application.

La tâche liée à la version Debug peut être une alternative rapide si vous avez juste besoin de ce type de build:

bundletool build-apks --bundle <bundle_file> --output <APKS file> --ks <key_store> --key-pass <jks password> --ks-key-alias <key_alias> --ks-pass <key password> --overwrite --mode=universal

Cette tâche générera (par défaut) app/build/outputs/universal_apk/debug/app-debug-universal.apk .

Mise à jour juin 2019

Google a présenté lors de I / O Internal App Sharing qui permet de tester facilement vos App Bundles et APK, y compris les builds de débogage:

Avec le partage d'applications interne, vous pouvez partager rapidement un ensemble d'applications ou un APK avec votre équipe interne et vos testeurs en important un fichier APK ou un ensemble d'applications sur la page de téléchargement de partage d'applications internes .


6 commentaires

@pfmaggi, Dois-je télécharger apk + aab sur Playstore pour vérifier le fonctionnement du module de demande?


Non, il vous suffit de télécharger le bundle d'applications Android. Vous pouvez suivre ce codelab pour voir comment le faire: codelabs.developers.google.com/codelabs / ...


@pfmaggi Comment puis-je partager ceci à des fins de test plutôt que sur Google Play Store Beta?


J'ai mis à jour la réponse avec des informations sur le partage d'applications internes.


Lors de la génération avec l'option --mode=universal , il y a un APK généré à l'intérieur qui contient un autre APK, et seul l'APK intérieur est le bon et peut être installé sur un appareil réel.


Avec la commande build-apks vous générez une archive APKS qui comprend tous les fichiers APK. Mais comme vous créez un APK universel, dans l'archive, vous n'avez qu'un seul APK, plus un fichier de métadonnées.



17
votes

Je ne le vois documenté nulle part, mais les outils de construction Android Gradle incluent des tâches pour extraire l'APK universel pour vous. Vous pouvez utiliser quelque chose de similaire à:

./gradlew :yourmodule:packageDebugUniversalApk

Sous le capot, il utilise bundletool et fait essentiellement la même chose que l'autre réponse, mais c'est bien de pouvoir le faire à partir de Gradle.


3 commentaires

Cela génère-t-il un apk avec tous les modules ou uniquement les modules marqués avec <dist:fusing dist:include="true"/>


Selon la taille apk résultante et une vérification à l'exécution des modules installés, seuls les modules avec <dist:fusing dist:include="true"/> seront inclus.


Oui, seuls ces modules sont inclus. Ceci est spécifié dans la documentation de bundletool : "Remarque: bundletool inclut uniquement les modules de fonctionnalités qui spécifient <dist:fusing dist:include="true"/> dans leur manifeste dans un APK universel."



0
votes

Téléchargez le fichier jar bundletool depuis Github (dernière version> Actifs> fichier bundletool-all-version.jar). Renommez ce fichier en bundletool.jar

  1. Générez votre fichier aab à partir d'Android Studio, par exemple: myapp-release.aab
  2. Exécutez la commande suivante:

java -jar "chemin / vers / bundletool.jar" build-apks --bundle = myapp-release.aab --output = myapp.apks --ks = "/ chemin / vers / myapp-release.keystore" --ks -pass = pass: myapp-keystore-pass --ks-key-alias = myapp-alias --key-pass = pass: myapp-alias-pass

  1. Le fichier myapp.apks sera généré
  2. ci-dessous est la commande pour générer l'apk universel

java -jar bundletool.jar build-apks --bundle = nhl.aab --output = nhl.apks --mode = universal

»


0 commentaires