Tarnyko's website
Tarnyko's website
about

[Tutoriel] Programmer en Vala sous Android

2013-03-19

Objectif : compiler une application Vala sous Linux à destination d'Android.

Nous avons une application console Vala, n'utilisant pas de bibliothèques additionnelles.
Nous désirons en produire une version Android sans modifier le code source.

android_logo

(P.S.: le téléphone/tablette ciblé devra être "rooté" et disposer d'un émulateur de terminal)

Pré-requis

Une distribution Linux 32/64-bits, Debian ou Ubuntu, avec Vala installé.

1) Installer la chaîne de compilation

  1. Installez l'Android NDK r7b pour Linux :
sudo tar xfvj android-ndk-r7b-linux-x86.tar.bz2 -C /opt
  1. Installez le script agcc-r7b (merci à Giulio Lunati pour son travail) :
sudo install -m 755 agcc.pl-r7b /opt/
sudo ln -s /opt/agcc.pl-r7b /usr/bin/agcc
  1. Configurez les variables d'environnement :
export NDK=/opt/android-ndk-r7b
export PATH=$PATH:$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin

2) Installer la bibliothèque GLib pour Android

sudo mkdir /opt/android
sudo tar xfvj glib-2.28.1-android-static_\(TARNYKO\).tar.bz2 -C /opt/android
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/android/lib/pkgconfig

3) Compiler

Avec n'importe quel programme Vala n'utilisant pas de bibliothèques externes, comme celui-ci :

01

Nous le compilons à travers le wrapper agcc :

valac --cc=agcc -o monprogramme monprogramme.vala

Si tout s'est bien passé, un nouvel exécutable (ici "monprogramme") a dû apparaître.

Celui-ci ne se lancera pas sous Linux, car il est destiné à Android !

4) Installer-distribuer

Créez un répertoire contenant l'exécutable et l'ensemble des bibliothèques ("lib*.so") trouvées dans cette archive :
glib-2.28.1-android_runtime_(TARNYKO).zip (1,68 Mo)

de cette manière par exemple :

unzip glib-2.28.1-android_runtime_\(TARNYKO\).zip
mkdir ~/distri
cp monprogramme ~/distri/
cp *.so.* ~/distri/

Branchez votre téléphone/tablette Android à l'ordinateur. En utilisant le programme adb fourni par l'Android SDK, envoyez les fichiers un par un vers un répertoire de l'appareil :

cd ~/distri/
adb remount
adb push monprogramme /system
adb push libasprintf.so.0 /system
adb push libgio-2.0.so.0 /system
 ...
adb push libintl.so.8 /system

5) Tester

Sur l'appareil lui-même, ouvrez un terminal, et faites :

export LD_LIBRARY_PATH=/system
cd /system
./monprogramme

02

Voilà !