Table des matières

Introduction

J'ai effectué quelques développements d'application android sous eclipse. Néamoins, eclipse n'est plus à jour et le plugin dédié aux développements d'applications android n'est plus supporté/maintenu depuis 2013.

J'ai réussi, avec beaucoup de difficulté (2020/03), à développer ma dernière appli, aerobic, via eclipse et maven. Néamoins, quand j'ai voulu déployer sur le playstore, j'ai été confronté à plusieurs obstacles :

AS est l'éditeur qui est dorénavant l'incontournable pour tous les dev android. Eclipse est 'has been'. En effet, en essayant d'importer quelques projets gradle effectué sous AS, j'ai énormément galéré pour réussir à les structurer correctement pour qu'ils soient correctement compris par eclipse, à les rendre compilables. Plus d'information dans le fichier word, à la racine de mon projet aerobic (sous gitlab).

<AndroidSdk>\build-tools\22.0.1\zipalign.exe -f -v 4 ./external/signed/aerobic.trainer.signed.apk ./external/signed/aerobic.trainer.signed.zipaligned.apk

Je n'ai jamais réussi, à partir d'eclipse à produire un apk que je puisse pousser sur le playstore.

Android SDK

C'est le kit de développement d'Android ; c'est un ensemble d'outils et de librairies de dev. Il inclut :

  1. sqlite3

C'est sur ce kit que sont pluggé les IDE de dev android, comme eclipse en premier lieu, puis Android Studio maintenant.

Remarque : sur mon pc, Eclipse et Android Studio utilisent le même Android SDK !! Et les mêmes AVD, heureusement

Voir plus bas ce qu'est un AVD

Référence : https://fr.wikipedia.org/wiki/Android_SDK

SDK Manager

Il permet de récupérer en local ou supprimer les librairies android, et qui seront utilisées builder les projets android ou pour lancer des AVD. Plus précisément, il s'agit des :

….

AVD Manager

Description

Les AVD pour Android Vitual Device, simulent un téléphone, une tablette, ou autre dispositif réel.

L'AVD manager permet de créer des AVD sur notre PC. Chaque AVD dispose est en gros un n-uplet définissant :

Chaque exécution d'une application android (APK) se fait en choisissant l'AVD. QEMU lance alors l'AVD choisi, puis l'APK du projet (buildé auparavant), est déployé sur l'AVD, puis exécuté. Toute ces étapes se font de manière automatique, il suffit de choisir un AVD existant, puis de lancer l'exécution.

On peut éxécuter l'APK en mode deboggage, ce qui permet de mettre des points d'arrêt dans notre code source.

….….

Contenu d'un dossier d'AVD

Par défaut, chaque création d'AVD est couplé à la création d'un dossier <UserHomeFolder>\.android\avd\<AndroidVirtualDevice's name>.avd

Remarques :

Prerequis

aar : qu'est ce que c'est

An Android library is structurally the same as an Android app module. It can include everything needed to build an app, including source code, resource files, and an Android manifest.

However, instead of compiling into an APK that runs on a device, an Android library compiles into an Android Archive (AAR) file that you can use as a dependency for an Android app module.

Unlike JAR files, AAR files can contain Android resources and a manifest file, which allows you to bundle in shared resources like layouts and drawables in addition to Java classes and methods.

Développemement android sous eclipse

Android Development Tools (ADT)

Plugin de base qu'utilise eclipse pour la génération de projet Android sous Eclipse

La plupart des projet android que j'ai faite sous eclipse n'utilisaient que ADT.

J'ai, sur mon dernier projet (aerobic, sous gitlab ), voulu utiliser maven pour tirer des dépendances disponibles sur les repository maven(/gradle). Mais comme expliqué dans la section Introduction, j'ai galéré, et en voici sans doute les raisons :

Android Development Toolkit (ADT) : is a plugin for the Eclipse IDE that is designed to give you a powerful, integrated environment in which to build Android applications. Its package is com.android.ide.eclipse

Last plugin version seems to be ADT 9.0.0, release in 2011. So it seems that ADT is no more supported : see https://developer.android.com/studio/tools/sdk/eclipse-adt

This last web page tells to developers :

  1. the Eclipse ADT plugin has many known bugs and potential security bugs that will not be fixed.
  2. to migrate ASAP to Android Studio (another IDE).

m2e-android

Android for Maven Eclipse connector is an Maven Eclipse (m2e) plug-in that adds maven support for Android Developer Tools (ADT) and the Maven Android Plugin

Ce connector permettait de tirer les dépendances.

Par contre, il fallait que ces dépendances soient des jar : Eclipse n'arrivait pas à utiliser/exploiter les dépendances de type aar, qu'il téléchargeait : il les voyait comme des jars ; l'artifact pullé par maven fournissait un jar. Et quant on essayait de forcer le type de dépendance en aar, il téléchargeait bien l'aar, mais ne savait comment l'expoiter …

Ceci fut un gros obstacles qui m'a fait perdre beaucoup de temps.

problème eclipse pour faire marcher un projet android créé avec Android Studio

Reference : https://stackoverflow.com/questions/60960336/does-eclipse-photon-has-problems-dealing-with-aar-eclipse-generally-how-to-d?noredirect=1#comment107859476_60960336

android-maven-plugin

Il permet, indépendamment d'eclipse et d'ADT, de pouvoir builder les projets Android grace au fichier de build maven pom.xml, comme pour un projet java classique. Ce plugin est (était) beaucoup utilisé par les développeur :

Il est toujours disponible sur mavencentral : com.simpligility.maven.plugins:android-maven-plugin:4.1.1

Voir mon projet eclipse aerobic pour plus de précision.

Ce qu'il y a de dingue, c'est que le build maven se passait très bien, même avec des dépendances AAR utilisées par le code source, mais Eclipse était complètement incapable de bien exploiter les dépendances AAR, donc ne compilait pas. =⇒ Il a fallu que :

  1. je récupère le code source du fichier aar (apng)
  2. je tente et que je réussisse à le réorganiser sous eclipse, pour pouvoir le lire
  3. que je récupère les dépendances les plus importantes, qui heureusement étaient des jars)
  4. que je récupère les sources du projet qui m'intéresse, et que je les copie dans mon projet, en des adaptant (noms de package).

Bref

⇒ Il est quasiment certain que tout ceci aie été beaucoup plus rapide en utilisant Android Studio, qui lui comprend et exploite parfaitement les AAR (librairies android).

Développemement android sous android studio

Tout se passe bien à partir du moment où on maitrise l'utilisation du gestionnaire de build gradle.

Les plus d'Android Studio

screen resolution, résolution dpi, et density pixels

http://www.nicolasaguenot.com/nicoandco/index.php?post/2011/11/30/Les-diff%C3%A9rentes-unit%C3%A9s-de-mesures-Android https://blog.mindorks.com/understanding-density-independent-pixel-sp-dp-dip-in-android

Resolution : dpi = Dots (count) Per Inchs

DPI naming convention

^ Density Bucket ^ Screen Density ^

ldpi 120 dpi
mdpi 160 dpi
hdpi 240 dpi
xhdpi 320 dpi
xxhdpi 480 dpi
xxxhdpi 640 dpi

Conversion between dpi and dip

- Screen1 Screen2 Screen3 Screen4 Screen5 Screen6 Screen7 Screen8 (Redmi 8)
Physical Width 1.5 inches 1.5 inches 4 inches 4 inches 5 inches rsqr(sqr(2) + sqr(3.3333))= 3.88 7.07 rsqr(sqr(5.9375)+sqr(2.812)) = 5.93 inch
Dots Per Inch (“dpi”) 160 240 240 320 256 240 320 256
Pixels (=width*dpi) 240 360 960 1280 1280 480×800 1200×1920 1520×720
fd : Density report = dpi / 160 1.0 1.5 1.5 2 1.6 1.5 2 1.6
Density (Independent) (“dip” or “dp” or “dps”) = Pixels = Pixels / fd 240/1=240 360/1.5=240 960/1.5=640 1280/2=640 1280/1.6=800 320×533 600×960 950×450
Scale-independent pixels (sip or sp) Depends on user font size settings “ ” “ ” “ ” “

⇒ For each screen, defined by its WidthPixel and its WidthInch : its dpi is WidthPixel / WidthInch, hence :

nbDp = WidthPixel / fd = Pixels / (dpi / 160) = Pixels * 160 / dpi = Pixels * 160 / ( WidthPixel / WidthInch ) = 160 * WidthInch

nbDp ←→ WidthPixel =⇒ 1 dp ←→ WidthPixel / nbDp =⇒ 1 dp ←→ WidthPixel / (WidthPixel / fd) = fd real pixels

Utilisation d'Android Studio et Astuces

Piloter l'AVD et fournir un filebrowser

adb devices
adb push "<host path to file to upload to avd>" /storage/sdcard/aerobic
adb shell

adb shell permet d'ouvrir une session shell (en root) sur le device émulé.

 adb install <Path/to/uneAppli.apk>

Dans tous les cas, pour en installer un sur le device, (comme TotalCommander), démarrer votre AVD, puis exécuter la commande suivante:

adb install <Path/to/TotalCommander.apk>

En cas de bug, d'applis qui crash, logcat !

Ce qu'affiche Android Studio (ou eclipse) quand on debogue, c'est fait avec la commande logcat :

cd <android-sdk-install-folder>/platform-tools/
./adb.exe logcat

Il suffit donc de connecter son appareil android sur le pc, de s'assurer que le device est bien connu d'adb, puis d'exécuter la commande ci-dessus, puis de réexécuter l'application.

Lancer l'application sur un vrai appareil

Dans android studio, si un appareil réel est connecté au PC en adb (adb devices le référence bien), alors il est visible dans la liste des Devices disponibles pour l'exécution. Testé avec succès avec mon Xiami Redmi 8. Lors de l'exécution sur AS, l'appli est buildé, puis installée sur le device (si elle c'est une nouvelle version), puis elle est lancée en mode debug.

Gradle

où sont placées les dépendances
<UserHomeDir>\.gradle\caches\modules-2\files-2.1\com.android.support\appcompat-v7\25.3.1\fb12db83b0687efd651695c5f6d03f0d293238f5

arbre de dépendence

./gradlew <yourmodule>:dependencies

Additionally, if you want to check if something is compile, testCompile, androidTestCompile, implementation, testImplementation, or androidTestImplementation dependency as well, you can do so with the configuration parameter like this:

./gradlew app:dependencies --configuration implementation
./gradlew app:dependencies --configuration testImplementation 
./gradlew app:dependencies --configuration androidTestImplementation

Gérer les sons (mp3, wav)

Voir : http://supertos.free.fr/supertos.php?page=1263, http://supertos.free.fr/supertos.php?page=1263

Publier une application sous le playstore

Prerequis

Il faut se créer un compte développeur et s'inscrire (cout = 25euros, mais pour la vie)

Après toute les étapes se passe sur une IHM web, nommée la Google Play Console, qui permet d'accéder à toutes ses applications android developpées et poussées sur le playstore. On sélectionne alors l'application que l'on veut faire évoluer (nouvelle release), puis un menu à gauche permet de suivre les étapes jusqu'au déploiement de la nouvelle release.

A savoir, qu'il faut remplir un ensemble de ces étapes avant de pouvoir demander le déploiment d'une release sur le playstore.

Enfin, cette 'console' web a aussi mis en place des processus de tests de chaque nouvelle release, (qu'on peut ignorer, plutôt prévue pour des équipes de travail), et une gestion de chaque release avec un ensemble d'artifacts livrés (pas forcément qu'un seul APK ou AAB …

Remarque : Mon compte google pour le développement d'applications android est : and.xavier.marquis@gmail.com

Il est nécessaire, pour garantir l'authenticité de votre identité de signer votre APK ou AAB. Un How-To est disponible ici : https://developer.android.com/studio/publish/app-signing#sign_release

J'ai stocké dans mon M (administration_xxx.tc) :

This file has been generated by Android Studio ; it is generated when checking an option when building and generating a signed AAB (Android App Bundle) or APK.

format AAB : Android App Bundle

Android App Bundle is a publishing format that :

  1. includes all your app’s compiled code and resources
  2. defers APK generation and signing to Google Play.

Google Play uses your app bundle to generate and serve optimized APKs for each device configuration, so only the code and resources that are needed for a specific device are downloaded to run your app. You no longer have to build, sign, and manage multiple APKs to optimize support for different devices, and users get smaller, more-optimized downloads.