User Tools

Site Tools


Writing /net/www/auesnard/teaching/data/cache/c/c44412bcd364481bb150cf7c45d9d538.metadata failed
Writing /net/www/auesnard/teaching/data/meta/projtec/android.meta failed
projtec:android

This is an old revision of the document!


Android

L'objectif de ce petit tutoriel est de développer des applications Android en ligne de commande…

Installation

Nous allons commencer par installer le kit de développement Android, les Tools , le NDK et Gradle.

mkdir /opt/Android/
cd /opt/Android
wget https://dl.google.com/android/repository/tools_r25.2.3-linux.zip
wget https://dl.google.com/android/repository/android-ndk-r13b-linux-x86_64.zip
wget https://services.gradle.org/distributions/gradle-3.3-all.zip
unzip *.zip

Nous allons maintenant poursuivre l'installation avec le SDK Manager, en installant principalement le SDK (API 25). Attention à ne pas oublier d'accepter les licences au moment de l'installation !

tools/android sdk &  

Puis, on positionne toutes les variables d'environnement nécessaires : source env.sh.

env.sh
ROOT=/opt/Android
export ANDROID_HOME=$ROOT
export GRADLE_HOME=$ROOT/gradle-3.3
export ANDROID_NDK_HOME=$ROOT/android-ndk-r13b
export PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_NDK_HOME:$GRADLE_HOME/bin

Installation avec Android Studio

Une alternative facile à tout ce merdier consiste à installer Android Studio , dont le SDK Manager (plus puissant) permet d'installer tous les outils nécessaires comme Gradle, NDK, CMake, etc.

mkdir /opt/Android/
cd /opt/Android
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-*-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. Puis, on positionne toutes les variables d'environnement nécessaires : source env.sh.

env.sh
ROOT=/opt/Android
export ANDROID_HOME=$ROOT/sdk
export ANDROID_NDK_HOME=$ROOT/sdk/ndk-bundle
export PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_NDK_HOME

Tutoriels

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 le 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

Pour aller plus loin

projtec/android.1484756742.txt.gz · Last modified: 2024/03/18 15:05 (external edit)