Chemins des fichiers à connaitre pour le déploiement des applications sur Android

La question du déploiement de fichiers et de leur emplacement pour Android et les autres plateformes revient assez souvent. Ca fait un bail que je devais écrire ce qui suit alors je profite de la DelphiCon pour le faire.

Lorsqu'on développe un logiciel et qu'on le déploit sur Android on ne peut pas récupérer le chemin vers le programme exécutable contrairement à ce qu'il se passe sur les autres plateformes. ParamStr(0) est vide.

Le hic c'est qu'il y a plusieurs dossiers dans lesquels se trouvent le programme et que le fichier exécuté dépend de la version d'Android, du type de compilation, du type de package (APK / AAB), du processeur ciblé (32 ou 64 bits)... Du coup on ne peut (ou doit) rien déployer au niveau de l'exécutable contrairement à ce qu'on a tendance à faire sous Windows sinon on a des doublons dans l'assistant de déploiement ce qui est toujours une très très mauvaise idée (pour la taille du paquet final, pour la maintenance, ...).

On ne doit donc théoriquement à aucun moment dans une application mobile sous Android avoir besoin du chemin de l'exécutable actuellement en route. Si on doit cependant y accéder, on le fera par TPath.GetLibraryPath de l'unité System.IOUtils qui fait un appel à l'OS pour nous fournir l'information.

Pour le déploiement, notamment pour des polices de caractères personnalisées, on a deux possibilités :

  • .\assets\internal\ qui est accessible dans le code par TPath.GetDocumentsPath
  • .\assets\ qui est accessible dans le code par TPath.GetPublicPath

Ces deux dossiers sont utilisables comme dossier destination dans le gestionaire de déploiement du projet (menu Projet / Déploiement de l'IDE).

Ne vous attendez pas à trouver de sous-dossier "internal" quand vous parcourez le contenu du dossier public : Android fait joujou avec l'arborescence. Nous ne voyons pas la réalité dans nos programmes ni ailleurs.

Ceci étant dit, même s'il semble plus simple de déployer des fichiers directement dans l'APK/AAB, je recommande vivement de ne pas le faire et privilégier un téléchargement au premier démarrage du programme ou lorsqu'on en a besoin.

En effet, le fait de mettre les fichiers dans l'APK/AAB va avoir un impact sur l'installation et la mise à jour des applications, qu'elle soit automatisée, programmée ou manuelle. Il se peut que dans certains cas (indéterminés) vos documents complémentaires ne soient pas écrasés par la nouvelle version. Il est donc préférable de gérer ces choses là à la main.

En plus c'est assez simple de mettre en place un téléchargement de fichier depuis Internet : il suffit de le mettre dans le dossier d'un site web (ou compte FTP accessible depuis une IP ou de préférence un nom de domaine) et de déclencher son téléchargement. On peut même facilement gérer des niveaux de version soi-même comme je l'avais démontré lors de cette présentation.


A lire aussi

DelphiCon 2021 : Smartwatch Android Meets Delphi - Controlling Devices (17/11/2021)
Permissions Android et changements à partir de Delphi 11 Alexandria (17/11/2021)
Chemins des fichiers à connaitre pour le déploiement des applications sur Android (17/11/2021)
Webinaire du 29 septembre 2020 : développer une application pour Android TV avec Delphi (30/09/2020)
Utiliser l'action standard TakePhotoFromCamera pour les applications Android 9 et plus (25/08/2020)
Evolution du Z-Order des composants FireMonkey sous Android avec Delphi 10.3 Rio (04/11/2018)
Utiliser une fonte TTF sous Android (10/12/2017)
Rendre visibles des fichiers et dossiers créés sur un appareil sous Android depuis Windows et Mac avec une connexion USB MTP (17/06/2016)

Membre du programme MVP.
Membre du programme MVP