diff --git a/manifest/git_manifest_mobile_home.xml b/manifest/git_manifest_mobile_home.xml index 54d42ec..e91fffa 100644 --- a/manifest/git_manifest_mobile_home.xml +++ b/manifest/git_manifest_mobile_home.xml @@ -12,12 +12,20 @@ groups="mobile" /> - + diff --git a/script/todo/todo.py b/script/todo/todo.py index 48f4394..a0a6238 100755 --- a/script/todo/todo.py +++ b/script/todo/todo.py @@ -5859,8 +5859,16 @@ class TODO: f"'cd {el_dir}/mobile/erplibre_home_mobile && npm test' && " # L'APK est la preuve, pas le code de sortie de Gradle : une tâche # peut rendre 0 sans avoir rien produit. + # DEUX emplacements, et il faut les deux. Avec une ABI injectée, + # AGP écrit dans « intermediates/apk/debug » et non dans + # « outputs/apk/debug » : mesuré, une compilation RÉUSSIE était + # rapportée « aucun APK produit » parce que je ne regardais que le + # second. Un contrôle qui cherche au mauvais endroit ne vaut pas + # mieux que pas de contrôle. f"apk=$(ls {el_dir}/mobile/erplibre_home_mobile/android/app/build" - "/outputs/apk/debug/*.apk 2>/dev/null | head -1); " + "/outputs/apk/debug/*.apk " + f"{el_dir}/mobile/erplibre_home_mobile/android/app/build" + "/intermediates/apk/debug/*.apk 2>/dev/null | head -1); " 'if [ -n "$apk" ]; then ' f'echo " ✅ {t("APK built:")} $apk"; ' # Capacitor sert la même application dans un navigateur : sur une @@ -5948,7 +5956,10 @@ class TODO: f'echo " {t("open it from your workstation:")} ' 'ssh -X erplibre@$ip \\"$HOME/android/emulator/emulator -avd erplibre -no-audio\\""; ' f'echo " {t("then install the APK:")} ' - 'ssh erplibre@$ip \\"$HOME/android/platform-tools/adb install -r ' + # « -t » : l'ABI injectée fait marquer l'APK « testOnly » par AGP, + # et adb le refuse sans ce drapeau — « INSTALL_FAILED_TEST_ONLY ». + # Mesuré sur l'émulateur. + 'ssh erplibre@$ip \\"$HOME/android/platform-tools/adb install -r -t ' f"{el_dir}/mobile/erplibre_home_mobile/android/app/build" '/outputs/apk/debug/app-debug.apk\\""' ) diff --git a/test/test_qemu_desktop_tools.py b/test/test_qemu_desktop_tools.py index e2db8e6..e31e268 100644 --- a/test/test_qemu_desktop_tools.py +++ b/test/test_qemu_desktop_tools.py @@ -339,6 +339,13 @@ class TestMobileBuild(unittest.TestCase): cmd = self.todo._qemu_mobile_remote_cmd() self.assertIn("outputs/apk/debug/*.apk", cmd) + def test_both_apk_locations_are_searched(self): + """Avec une ABI injectée, AGP écrit dans intermediates et non dans + outputs : mesuré, une compilation RÉUSSIE était rapportée « aucun APK + produit » parce qu'un seul des deux chemins était regardé.""" + cmd = self.todo._qemu_mobile_remote_cmd() + self.assertIn("intermediates/apk/debug/*.apk", cmd) + def test_no_apk_means_non_zero(self): """Éprouvé plutôt que relu : sans APK, le bloc DOIT rendre non nul. Une ligne d'information placée après le « fi » suffisait à rendre 0 et