J'ai réussi à faire une compilation croisée de Ruby pour Android et tout se passe bien dans l'émulateur.
Mais alors que je teste ces drôles de choses sur mon appareil (Nexus4), j'ai remarqué que /sdcard
(o /storage/emulated/0
) est un montage de fusible sans autorisation d'exécution.
Comment puis-je exécuter quelque chose sur la carte SD ?
J'ai vu que sous Linux vous pouvez le passer comme argument à l'éditeur de liens. Sous Android, cela ne fonctionne pas : /system/bin/linker
veut un pointeur vers une structure spéciale. Je pense que je peux écrire un petit programme C qui crée cette structure et lancer le linker pour exécuter un programme lisible.
Mais qu'en est-il des bibliothèques partagées ? Ruby charge des dizaines de bibliothèques partagées (chaque fois que vous avez un "require"), je parie que des autorisations d'exécution sont nécessaires pour charger les bibliothèques partagées.
Déplacer l'exécutable vers /data/data/my.app.name/files/
ou tout autre endroit n'est pas une solution, mes binaires sont très gros (liés statiquement) et les utilisateurs devraient être libres de spécifier n'importe quel endroit où les stocker.