User Tools

Site Tools


projtec:ndk

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
projtec:ndk [2017/01/16 18:06] – [Test du NDK] orelprojtec:ndk [2017/01/17 09:13] (current) – removed orel
Line 1: Line 1:
-====== Android Native Development Kit (NDK) ====== 
- 
- 
-====Utilisation de Android Studio ==== 
- 
-Android Studio (version 2.2) est l'IDE par défaut de Google pour développer des applications Android avec le SDK. Pour installer et démarrer Android Studio (https://developer.android.com/studio/install.html), il faut faire :  
- 
-  cd /opt 
-  wget https://dl.google.com/dl/android/studio/ide-zips/2.2.3.0/android-studio-ide-145.3537739-linux.zip 
-  unzip android-studio-ide-145.3537739-linux.zip 
-  cd android-studio/bin 
-  ./studio.sh              
- 
-Une fois l'IDE installée, si l'on souhaite utiliser le NDK (Native Development Kit), il faut installer quelques outils supplémentaires  via le menu Tools/Android/SDK Manager : LLDB, CMake et NDK.  
- 
- 
-  * Training : https://developer.android.com/training/index.html 
-  * Howto : http://www3.ntu.edu.sg/home/ehchua/programming/android/Android_HowTo.html 
- 
-==== Android en ligne de commande ==== 
- 
-En m'inspirant des blogs :  
- 
-  * http://blog.rom1v.com/2012/03/android-en-ligne-de-commande/ 
-  * http://blog.freelan.org/2010/11/22/developper-pour-android-sans-utiliser-eclipse/ 
-  * http://dmathieu.com/articles/development/deploy-an-android-application/ 
- 
-Commençons par télécharger les //tools// Android. Notons que c'est la seule manière actuellement d'installer le SDK sans installer l'IDE Android Studio. 
- 
-  cd /opt 
-  wget https://dl.google.com/android/repository/tools_r25.2.3-linux.zip 
-  unzip tools_r25.2.3-linux.zip 
-  cd tools 
-   
-plus quelques dépendances (à compléter...) : 
- 
-  sudo apt-get install openjdk-8-jdk ant 
-   
-Nous allons maintenant lancer le //Android SDK Mananger// : 
- 
-  ./android 
-   
-Commençons par installer le dernier SDK et le NDK et d'autres trucs déjà présélectionnés qu'il faut installer ou mettre à jour.  
- 
- 
-== HelloWorld == 
- 
-Créons maintenant un petit projet HelloWorld : 
- 
- 
-  ./android create project --target 1 --name HelloWorld --path ./HelloWorld \ 
-    --activity HelloWorldActivity --package com.example.myandroid   
- 
-Ou en plus court : 
- 
-  ./android create project -t 1 -n HelloWorld -p ./HelloWorld -a HelloWorldActivity -k com.orel.helloworld 
- 
- 
-Pour connaître la liste des //targets// disponibles, il faut lancer la commande :  
- 
-  ./android list targets    # ici, nous utilisons la target 1 ou "android-25" 
- 
-Ensuite, on peut compiler notre petit projet simplement avec Ant : 
- 
-  cd HelloWorld 
-  ant             # pour voir toutes les cibles disponibles dans build.xml 
-  ant clean        
-  ant debug       # pour compiler le projet en debug... 
-   
-Le fichier APK (Android Application Package) sera créé à l’emplacement : HelloWorld/bin/HelloWorld-debug.apk   
-   
-== Déploiement sur son smartphone == 
- 
-Pour déployer, l'application HelloWorld sur son smartphone, il faut le brancher en USB et activer le //Débogage USB//. Pour ce faire, il faut commencer par passer son smartphone en //mode développeur// : dans les Paramètres / A propos de l'appareil / Infos Logiciel, puis cliquez 6 fois sur le "Numéro de Version". Un nouveau menu "Option de développement" apparaît alors dans les Paramètres de votre smartphone. Ce dernier vous permet alors d'activer le //Débogage USB//. 
- 
-On peut alors vérifier que le //device// (smartphone ou émulateur) est bien visible : 
- 
-  adb devices 
-      
-Si un seul device est visible, le déploiement de l'application Android peut s'effectuer tout simplement avec la commande suivante :  
- 
-  ant debug install 
-   
-== Utilisation de l'émulateur ==   
-   
-Il faut commencer par créer un AVD (Android Virtual Device) en lançant la commande :  
- 
-  ./android avd 
- 
-Dans la fenêtre qui s’ouvre, cliquer sur "New", puis configurer le smartphone (Nexus5, x86, API level 25, ...) et lui donner un nom, //MyPhone//. Sa configuration est sauvegardée dans ~/.android/avd/MyPhone.avd/ 
- 
-Pour lancer l'émulateur, il suffit de taper la commande : 
- 
-  ./emulator -avd MyPhone 
- 
- 
-On peut alors vérifier que le device (smartphone ou émulateur) est bien visible : 
- 
-  adb devices 
-   
-Si un seul device est visible, le déploiement de l'application Android peut s'effectuer avec la commande suivante :  
- 
-  ant debug install 
- 
-On peut également effectuer le déploiement manuellement sur l'émulateur avec la commande //adb// (Android Device Bridge) : 
- 
- 
-  adb -e install bin/HelloWorld-debug.apk     # -e for emulator 
-  adb -e uninstall com.orel.helloworld       
-   
-Pour info, le nom du package "com.orel.helloworld" est indiqué dans le fichier //AndroidManifest.xml//. 
- 
-Pour démarrer l'application manuellement : 
- 
-  adb shell am start -a android.intent.action.MAIN -n com.orel.helloworld/.HelloWorldActivity 
- 
- 
-   
-==== Utilisation de Gradle ==== 
- 
-Gradle est la nouvelle chaîne de compilation Android qui vise à remplacer Ant :  
-Pour générer un projet Android basé sur Gradle plutôt que Ant, il faut utiliser l'option "-g" 
- 
-  ./android create project -p HelloWorld -t 1 -n HelloWorld -k com.orel.helloworld -a HelloWorld -g -v 2.2.2 
-   
-avec 2.2.2 la version appropiée du plugin Gradle.  
- 
-Après quoi, on utilise le script //gradlew// pour compiler, etc.  
- 
-  ./gradlew build 
-  ./gradlew assembleDebug 
- 
-__Attention__ : Le code généré n'est pas tout à fait correct pour la version 2.2.2 du plugin Gradle ! Voici donc quelques modifications nécessaires des sources générés pour que ça tombe en marche :-( 
- 
-  * Dans le fichier build.gradle, dans la section "release", remplacer la ligne "runProguard false" par "minifyEnabled true". 
-  * Dans le fichier build.gradle, dans la section "repositories" remplacer la ligne "mavenCentral()" par "jcenter()" 
-  * Dans le fichier gradle/wrapper/gradle-wrapper.properties, mettre le champs "distributionUrl" à la valeur "https\:%%//%%services.gradle.org/distributions/gradle-2.14.1-all.zip". 
- 
-Voir ici, pour plus de détails :  
- 
-  * https://developer.android.com/studio/build/building-cmdline.html 
-  * http://eqdn.tech/android-development-on-the-command-line 
-   
-==== Test du NDK==== 
- 
-// Quelques notes encore en vrac...// 
- 
-Pour faire au plus simple, j'ai installé l'environnement de développement Android Studio, qui contient le SDK et permet de facilement installer le NDK. Ensuite, je travaille en ligne de commande ! 
- 
-Pour utiliser les exemples NDK avec Gradle en ligne de commande, il faut positionner les variables d'environnement ANDROID_HOME et ANDROID_NDK_HOME sur les installations locales de SDK et du NDK respectivement.  
- 
-  export ANDROID_HOME=/opt/Android/sdk 
-  export ANDROID_NDK_HOME=/opt/Android/sdk/ndk-bundle 
-  export PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_NDK_HOME 
-   
-Ensuite on peut tester un petit exemple... 
- 
-  git clone https://github.com/googlesamples/android-ndk.git 
-  cd android-ndk/native-activity   
-  ./gradlew assembleDebug 
- 
-Puis on effectue le déploiement avec l'emulateur... 
- 
-  emulator -avd MyPhone 
-  abd devices 
-  ./gradlew installDebug 
- 
- 
-(...) 
- 
- 
-Pour ajouter du code C/C++ à son projet Android : 
- 
-  https://developer.android.com/studio/projects/add-native-code.html 
- 
-A propos de NativeActivity : 
- 
-  * https://developer.android.com/reference/android/app/NativeActivity.html 
-  * https://developer.android.com/ndk/samples/sample_na.html 
-  * https://github.com/googlesamples/android-ndk/tree/master/native-activity 
- 
-A propos de NDK : 
- 
-  * https://developer.android.com/ndk/index.html  
-  * https://developer.android.com/ndk/guides/index.html 
-  * http://www3.ntu.edu.sg/home/ehchua/programming/android/android_ndk.html 
- 
-Les exemples classiques : 
- 
-  * Exemples avec Gradle : https://github.com/googlesamples/android-ndk 
-  * Exemples avec Android.mk (ndk-build system) : https://github.com/googlesamples/android-ndk/tree/android-mk 
- 
-Pour récupérer les exemples classiques via github :  
- 
-  git clone https://github.com/googlesamples/android-ndk.git                 # branch master 
-  git clone -b android-mk  https://github.com/googlesamples/android-ndk.git  # branch android-mk   
- 
-====Android et SDL2 ==== 
- 
-On positionne correctement son environnement... 
- 
-  export ANDROID_HOME=/opt/Android/sdk 
-  export ANDROID_NDK_HOME=/opt/Android/sdk/ndk-bundle 
-  export PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_NDK_HOME 
-   
-Ensuite, on va récupérer SDL2 et préparer notre petite coquille en suivant ce tutoriel : http://www.dinomage.com/2013/01/howto-sdl-on-android/  
- 
-  cd /opt 
-  wget http://www.libsdl.org/release/SDL2-2.0.5.zip 
-  unzip SDL2-2.0.5.zip 
-  cp -rf SDL2-2.0.5/android-project my-android-project 
-  cd my-android-project 
-  ln -s /opt/SDL2-2.0.5 jni/SDL 
- 
-Commençons par mettre à jour le fichier "build.properties" en indiquant la //target// API que vous avez installé, "android-25" dans mon cas. 
- 
-Dans le fichier "jni/src/Android.mk", remplacez "YourSourceHere.c" par [[ http://www.dinomage.com/wp-content/uploads/2013/01/main.c | main.c ]] et ajoutez le fichier [[http://www.dinomage.com/wp-content/uploads/2013/01/image.bmp | image.bmp ]] dans un sous-répertoire 'assets'. Notez que les données contenues dans ce répertoire seront accessibles dans votre APK. 
- 
-  cp main.c jni/src                       
-  mkdir assets ; cp image.bmp assets/     
-   
-On compile et on installe tout ça... 
-   
-  ndk-build 
-  ant debug 
-  emulator -avd MyPhone 
-  ant debug  install 
-   
-Et ça marche !!!   
- 
-== Biblio == 
- 
- 
-  * SDL : https://wiki.libsdl.org + http://www.libsdl.org/ 
-    * https://hg.libsdl.org/SDL/file/ba1da2658d76/docs/README-android.md 
-  * Download SDL2 : http://www.libsdl.org/download-2.0.php 
-  * Quelques Tutoriels sur SDL : https://wiki.libsdl.org/Tutorials 
-  * Premier Tutoriel sur Android+SDL 
-    * Part 1 : http://www.dinomage.com/2013/01/howto-sdl-on-android/ 
-    * Part 2 : http://www.dinomage.com/2013/05/howto-sdl-on-android-part-2-platform-details/ 
-    * Part 3 : http://www.dinomage.com/2013/05/howto-sdl-on-android-part-3-native-libraries/ 
-  * Second Tutoriel sur Android+SDL 
-    * Part 1 : http://blog.stuff-o-matic.com/post/2013/09/07/Porting-a-C-game-to-Android%2C-the-case-of-Andy-s-Super-Great-Park 
-    * Part 2 : http://blog.stuff-o-matic.com/post/2013/09/15/ASGP-s-Android-Port-Part-II%3A-from-SDL-1.2-to-SDL-2. 
-    * Part 3 : http://blog.stuff-o-matic.com/post/2013/10/08/ASGP-s-Android-Port-Part-III%3A-from-OpenGL-Direct-Mode-to-GLES 
-    * Part 4 : http://blog.stuff-o-matic.com/post/2013/10/20/ASGP-s-Android-Port-Part-IV%3A-building-the-APK 
-  * Wiki SDL+Android : https://wiki.libsdl.org/Android 
-  * OpenGLES : http://www.learnopengles.com/calling-opengl-from-android-using-the-ndk/ 
- 
  
projtec/ndk.1484589988.txt.gz · Last modified: 2024/03/18 15:05 (external edit)