User Tools

Site Tools


android:helloworld

Android : Hello World

Hello World from Scratch

Considérons un petit exemple Android minimaliste, HelloWorld ! Je me suis librement inspiré de plusieurs tutoriels :

Notre projet HelloWorld nécessite quelques fichiers organisés selon l'arborescence suivante (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”).

src/main/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.hello"
    android:versionCode="1"
    android:versionName="1.0.0" >
 
    <application android:label="@string/app_name" android:icon="@drawable/icon">
        <activity android:name=".HelloActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>
res/values/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">MyHelloWorld</string>
</resources>

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.

src/main/res/layout/mylayout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:id="@+id/mytextview"
    android:layout_centerInParent="true"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:text="Click the Button"
    />
<Button
    android:layout_centerInParent="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:text="Button"
    android:onClick="sayHello"/> 
</LinearLayout>

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.

src/main/java/org/hello/HelloActivity.java
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 :

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) :

build.gradle
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 (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 :

build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="HelloWorldAnt" default="help">
 
  <property name="target" value="android-25" />
 
  <property environment="env" />
  <property name="sdk.dir" value="${env.ANDROID_HOME}" />
 
  <import file="${sdk.dir}/tools/ant/build.xml" />
 
</project>

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
android/helloworld.txt · Last modified: 2024/03/18 15:06 by 127.0.0.1