====== Android : Hello World ======
==== Hello World from Scratch ====
Considérons un petit exemple Android minimaliste, //HelloWorld// ! Je me suis librement inspiré de plusieurs tutoriels :
* http://czak.pl/2016/01/13/minimal-android-project.html
* https://spring.io/guides/gs/gradle-android
* https://code.tutsplus.com/tutorials/android-from-scratch-building-your-first-android-application--cms-26024
* https://developer.android.com/training/basics/firstapp/index.html
Notre projet //HelloWorld// nécessite quelques fichiers organisés selon l'arborescence suivante ({{android:HelloWorld-v1.zip}}) :
├── build.gradle
└── src
└── main
├── AndroidManifest.xml
├── java
│ └── org
│ └── hello
│ └── HelloActivity.java
└── res
├── drawable
│ └── icon.png
├── layout
│ └── mylayout.xml
└── values
└── strings.xml
Le fichier //AndroidManifest.xml// contient les informations de haut-niveau de l'application Android. Dans ce cas, l'application a pour //label// la valeur définie dans le fichier ressource "res/values/strings.xml", c'est-à-dire "MyHelloWorld". Et son icône est définie par le fichier ressource "res/drawable/icon.png" (au format hdpi, 72 x 72 px). Son //activity// est défini dans la classe //HelloActivity// du package //org.hello//. La section //intent-filter// précise qu'il s'agit de l'activity principale initiant notre application ("android.intent.action.MAIN"), qui sera affichée dans l'//Application Launcher// du smartphone ("android.intent.category.LAUNCHER").
MyHelloWorld
Le fichier //mylayout.xml// est un fichier XML qui décrit le //layout// de votre //activity//, c'est-à-dire l'agencement de l'interface graphique de votre application. Celle-ci contient essentiellement composé d'un //TextView// et d'un //Button//. Le champs //id// permet de faire référence au //TextView// dans le code grâce à la méthode //findViewById()//. Concernant le //Button//, on définit une methode callback //sayHello()// qui sera appelé sur l'évènement //onClick//.
La classe //HelloActivity// (du fichier //HelloActivity.java//) définit le point d'entrée de notre application Android (ou plutôt de son //activity// principale). La compilation génère une classe //R.java// qui fait référence le layout //R.layout.mylayout// et ses identifiants comme //R.id.mytextview//. Notons que tous les éléments visuels comme //Button// ou //TextView// hérite de la classe //View//.
package org.hello;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.view.View;
public class HelloActivity extends Activity {
private TextView textview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mylayout);
textview = (TextView) findViewById(R.id.mytextview);
}
@Override
public void onStart() {
super.onStart();
}
public void sayHello(View view) {
textview.setText("Hello World!");
}
}
__Nota Bene __ :
* Structure du Projet : https://developer.android.com/studio/projects/index.html
* Version du plugin Gradle : https://developer.android.com/studio/releases/gradle-plugin.html
* Syntaxe du fichier //build.gradle// : https://developer.android.com/studio/build/index.html
* Intro au fichier //AndroidManifest.xml// : https://developer.android.com/guide/topics/manifest/manifest-intro.html
* Les ressources : https://developer.android.com/guide/topics/resources/providing-resources.html
==== Compilation avec Gradle ====
A la racine du projet, le fichier //build.gradle// permet à l'outil //Gradle// de construire votre application Android. Voici donc le fichier minimaliste mis à jour pour utiliser la version du SDK (25), des build-tools (25.0.2) et du plugin Gradle 2.2.3 compatible à la version de Gradle que j'ai installé (3.3) :
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
}
}
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
}
Pour compiler tout ça et le déployer sur un émulateur //MyPhone// (en supposant que vous avez déjà configuré le device //MyPhone// grâce à la commande //android avd//), il faut :
emulator -avd MyPhone
gradle installDebug
Il ne reste plus qu'à démarrer l'application HelloWorld sur votre émulateur... Et c'est tout !
Afin de pouvoir compiler l'application sans //Gradle// installé sur une machine, il est recommandé d'utiliser //Gradle Wrapper// qui génére un script d'installation portable (//gradlew//).
gradle wrapper
./gradlew installDebug
==== Compilation avec Ant ====
Si l'on préfère utiliser l'outil //Ant// plutôt que //Gradle// pour compiler son application //Android//, il n'y a pas grand chose qui change... En gros, il faut écrire un fichier //build.xml// pour Ant (à la place de //build.gradle//) et modifier un peu l'organisation du projet, comme indiqué ci-dessous ({{android:HelloWorldAnt-v1.zip}}).
├── AndroidManifest.xml
├── build.xml
├── res
│ ├── drawable
│ │ └── icon.png
│ ├── layout
│ │ └── mylayout.xml
│ └── values
│ └── strings.xml
└── src
└── org
└── hello
└── HelloActivity.java
Voici donc un fichier //build.xml// minimaliste pour notre projet :
Et c'est tout... Il ne reste plus qu'à compiler ce projet. Attention à ne pas oublier de positionner la variable d'environnement ANDROID_HOME.
ant debug install