La prise en charge du NDK par l’environnement reste un problème. Android Studio proposera un support, simplifiant la mise en oeuvre des appels natifs sous Android.
Le paramétrage de Android Studio
Pour utiliser le NDK, le mieux est de tenter d’utiliser Android Studio dans sa version 2. C’est une version préliminaire, et donc sujette à pas mal d’instabilité, mais elle prétend intégrer l’usage du NDK. La première chose à faire sera donc de charger cet outil. Cette version 2 utilise des paramétrages différents de celle qui est officielle aujourd’hui, la version 1.5.1.
Vous pourrez donc installer la seconde version indépendamment de la première. Pas de conflit en vue.
Une fois installée, il faut changer quelques infos dans les scripts Gradle.
La version de plugin doit changer : utilisez la version « expérimentale »
Dans le fichier de projet :
dependencies { classpath 'com.android.tools.build:gradle-experimental:0.6.0-alpha9' }Dans le fichier du module :
apply plugin: "com.android.model.application" model { android { compileSdkVersion = 23 buildToolsVersion = "23.0.2" defaultConfig.with { applicationId = "android.ei6.biz.fr_269_04_00ter" minSdkVersion.apiLevel = 23 targetSdkVersion.apiLevel = 23 versionCode = 1 versionName = "1.0" } } android.ndk { moduleName="coucou" }Remarquez les changements de syntaxe (DSL) dans ce dernier. Une information importante est le nom du module ndk. Les appels en Java Avant d’appeler vos fonctions C en Java, il faudra charger le module natif lors du chargement d’une classe de l’application. Par exemple, dans l’activité principale de l’application :
static { System.loadLibrary("coucou"); }L’appel sera déclaré comme une fonction native du Java :
public native String getTexte();Cette fonction doit simplement être appelée en Java comme n’importe quelle autre méthode. La fonction écrite en C Enfin, grâce à la prise en charge par Android Studio 2.0 des fonctions natives du Java, un répertoire sera automatiquement créé qui contiendra un fichier du nom du module déclaré. Dans ce fichier, vous viendrez écrire votre fonction. Si tout se passe bien, le prototype de la fonction sera généré. Si ce n’est pas le cas, pas de panique … 😉
#include jstring Java_android_ei6_biz_fr_1269_104_100ter_MainActivity_getTexte( JNIEnv* env, jobject thiz ) { return (*env)->NewStringUTF(env, "coucou"); }Les appels des fonctions C suppose une correspondance entre les types de données Java et ceux du C. JNI définit les possibilités d’échanges entre Java et le C. Conclusion Grâce à Android Studio 2.0, nous aurons une prise en charge des appels natifs sous Android. En Java, il suffit alors de déclarer les fonctions que nous souhaitons appeler, et l’IDE se charge quasiment du reste. Bien entendu, tout cela reste expérimental … mais risque de durer.