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.


Mug Toucan DX dans la baie de RioMug Toucan DX dans la baie de Rio