samedi 22 janvier 2011

C’est quoi NDK ?



   Le NDK (Native Developpement Kit) est un outil complémentaire du SDK qui permet de construire des portions critiques  du code afin de mieux gérer les performances de votre application.
Il utilise le JNI (Java Native Interface) pour interfacer du code écrit en C/C++ avec du code écrit en Java, il fournit  des entêtes natives et des  bibliothèques  qui vous permettent de travailler de plus en plus proches de la plateforme matériel ainsi de gérer le/les entres utilisateur, créer de activités…

   Le C/C++ est un code compilé (contrairement au Java Interprété)  il sera traduit par le compilateur en instructions machine qui seront directement exécutées par le processeur d’où l’intérêt du code native.
NB: On ne peut pas toujours garantir l’amélioration des performances en utilisant le code native C/C++, par contre, la complexité de l’application développée  augmente toujours. 
A bien noter que le NDK ne peut pas remplacer d’une manière complète le SDK.

Installer le NDK Sous Windows :

Avant d’installer le NDK il faut déjà télécharger les SDK depuis le site référence
. Bien entendu,  il faut choisir un environnement de développement (Eclipse dans notre cas) en lui ajoutant le plugin nécessaire pour développer des projets Android  http://developer.android.com/sdk/eclipse-adt.html  ou bien tout simplement vous pouvez voir notre WebCast ‘Créer et configurer l’environnement de développement sous Android
Une fois que vous avez les outils de travail, vous commencez à télécharger le NDK depuis le site réference
.
Décompressez le fichier téléchargé  sous C:\,  par exemple chez moi  c’est sous C:\android-ndk.
Afin de compiler le code C/C++ que nous allons  ajouter après  dans notre projet Android, on aura besoin d’installer Cygwin. Rien n'est plus simple, il suffit de le télécharger depuis
le site officiel.
En fait, Cygwin est tout simplement un ensemble de logiciels libres qui peuvent simuler un environnement Linux sous Windows.
Lors de l’installation il faut ajouter  l’outil « make » manuellement voir le schéma ci dessous:
Une fois l’installation est  terminée  il faut exécuter  la commande make  –v  si tout se passe bien la version du   «mak»  s’affiche:

Dans des versions anciennes (moins de NDK R4), on aura besoin d’exécuter la build/host-setpu.sh  pour configurer l’environnement de compilation. Voir la capture ci-dessous  :

NB: Cette dernière étape a été supprimée complètement dans la version 4 et ses suites(alias NDK r4) c'est à dire on'apas besoin de lancer la commande build/hot-setp.sh pour faire une telle configuration ;).


Débuter avec NDK: 
Passons maintenant à un peu de pratique, Tout d'abord, on va commencer par la création d'un projet Android, il aura comme détailles:
  • Le nom du projet: HelloNDK.
  • Le nom de l'application: HelloNDK.
  • Le nom de pahage est: com.JuniorAndroid.TUNandroid.hellondk.
  • Le nom de Main Activity: Main.
Une fois le projet a été créé, on ajoute le dossier jni voir l'image ci-dessous:



Maintenant, on ajoute 2 fichiers dans le répertoire jni Android.mk et native.c

Le fichier Android.mk est un scripte sert à decrire votre source pour le système de construction de l'NDK.Il
contient alors le code suivant:


 
La syntaxe du fichier est conçue pour vous permettre de regrouper vos sources en «modules». 
Un module est un des éléments suivants:
    - Une bibliothèque statique. 
    - Une bibliothèque partagée.
Seules les bibliothèques partagées sont installés ou copiés dans le package de votre application. Les bibliothèques statiques peuvent être utilisées pour générer des bibliothèques partagées.

Explication du code :
 
Un fichier Android.mk doit commencer par la définition de la variable LOCAL_PATH
  • LOCAL_PATH : Il est utilisé pour localiser les fichiers source dans l'arborescence de votre projet.
  • include $ (CLEAR_VARS) :   La variable CLEAR_VARS est fournie par le système de      construction, un spéciale GNU Makefile qui dégagera de nombreuses variables LOCAL_XXX pour vous (Par exemple LOCAL_MODULE, LOCAL_SRC_FILES,..), à l'exception de LOCAL_PATH.
  • LOCAL_MODULE : Variable qui doit être définie afin d'identifier chaque module, que vous décrivez dans votre Android.mk.
  • LOCAL_SRC_FILES : Variable qui contient une liste des fichiers sources C et / ou C + +  qui seront construits et assemblés en des modules.
  •  include $ (BUILD_SHARED_LIBRARY):  La BUILD_SHARED_LIBRARY est une variable fournie par le système de construction qui pointe vers un script GNU Makefile, ce dernier  est  chargé de recueillir tous les informations que vous avez défini dans les variables LOCAL_XXX depuis la dernière Include $ (CLEAR_VARS) et de déterminer ce qu'il faut construire, autrement dit,   BUILD_STATIC_LIBRARY sert à générer une bibliothèque statique.

Pour le fichier native.c, il contient tout simplement le code natif  C/C++ :

Le code  précédent est une simple fonction qui s’appelle "invokeNativeFunction" et qui renvoie une chaîne de caractères.

NB: Pour nommer une fonction, il faut se procéder comme suit :
 Le nom commence par "Java_  ", ensuite le nom du package com_JuniorAndroid_TUNandroid_ HelloNDK_", puis le nom de l’activité " Main_ ", et enfin le nom de la fonction "invokeNativeFunction".

Compilation:
 
La compilation est réalisée en se plaçant dans le répertoire principale de votre projet et en tapant la commande ndk-build, Si tout passe bien, vous aurez un résultat similaire à celui-ci: 

Code Java :
Dans le fichier de notre activité "Main.java", on importe  tout d’abord, les packages nécessaires. Ensuite on charge notre librairie à l’aide de la méthode "loadLibrary" de la classe "System". Puis on déclare comme native la fonction qu’on va l’appeler à la suite. Enfin on affiche le résultat obtenu dans un message d’alerte.
Le code est donc le suivant :
Exécution: 
 Enfin, il suffit d'exécuter l'application et si tout se passe bien vous aurez: 

    
Félicitation!! vous venez de réaliser votre première application Android  à l'aide de NDK.   

2 commentaires:

  1. Bonjour, J'ai vraiment besoin d'aide. Lorsque je tente de generer mon apk sous windev 20 j'ai ce message d'erreur :
    L'extension (extra) Google Play Service est dans une version trop ancienne (Inferieure à 13) pour générer le champ publicité. Il est necessaire de la mettre à jour.

    La procédure d'installation est disponible à l'adresse suivante :
    http://developer.android.com/google/play-services/setup.html#install

    J'ai refais la même procedure dont vous m'aviez soufflé mais rien alors j'ai visité le lien mais francheùent je ne fait que relire les consigne. Il y'a 3 options pour resoudre ce probleme, L'option Android Studio, Eclipse avec ADT et Autre qui ne convient pas a mon cas et qui me semble pareille avec l'option Android studio qui propose aussi "Créer une exception de Proguard".

    En deuxième lieu j'ai suivie la procédure : Copiez le projet de bibliothèque à / extras / google / google_play_services / libproject / google play-services_lib / à l'endroit où vous conservez vos applications Android projets.

    Malheureusement dans mon cas le dossier libproject n'existe pas. Que dois je faire ?

    RépondreSupprimer
  2. Comment je peux installer le manifeste, le layout, s'afficher rien

    RépondreSupprimer