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
3 Réponses :
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.
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
.
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 .
@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.
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.
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."
Téléchargez le fichier jar bundletool depuis Github (dernière version> Actifs> fichier bundletool-all-version.jar). Renommez ce fichier en bundletool.jar
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
java -jar bundletool.jar build-apks --bundle = nhl.aab --output = nhl.apks --mode = universal
»
Avez-vous envisagé de configurer vos variantes de construction? developer.android.com/studio/build/build-variants