Cours 3 TDM
Cours 3 TDM
Nadia Elouali!
[email protected]
2018-2019
Chapitre III : Développement d’applications mobiles sous
Android
!
‣ Outils de développement
!
‣ Bases d’une application Android
!
Interface et Ressources
Application et Activité (cycle de vie)
Gestion des listes
Barre d’action et menus + widgets avancés
!
‣ Persistance des données
SQLite
!2
Développement d’applications mobiles sous Android
‣ Outils de développement
Eclipse
Android Studio
• Depuis 2014, Google officialise Android Studio (IDE IntelliJ ayant subi
l'intégration de fonctionnalités de développement Android) qui devient
alors l'IDE officiel pour Android.
!3
Développement d’applications mobiles sous Android
‣ Outils de développement
(ADT)
http://www.android-dev.fr/presentation_de_android_studio_et_comparatif_avec_adt !4
!5
Développement d’applications mobiles sous Android
‣ Outils de développement
Android Studio
‣ Outils de développement
Android Studio
!6
!7
Développement d’applications mobiles sous Android
‣ Outils de développement
Android Studio
‣ Platform-tools
‣ Outils de développement
Android Studio
‣ Platform-tools
‣ The Android Debug Bridge (ADB)
Android Debug Bridge (adb) est un outil qui nous permet de communiquer
avec un périphérique. Il facilite diverses actions de l'appareil, telles que
l'installation et le débogage d'applications, et fournit un accès à un shell Unix
que nous pouvons utiliser pour exécuter diverses commandes sur un
appareil.
!9
Développement d’applications mobiles sous Android
‣ Outils de développement
Android Studio
‣ Platform-tools
‣ Fastboot
‣ Systrace
Systrace nous permet de collecter et d'inspecter les informations de tous les
processus en cours d'exécution sur le périphérique au niveau du système. Il
combine les données du noyau Android, telles que le planificateur de
processeur, l’activité du disque et les threads d’une application, pour générer
un rapport. Cela permet de détecter les fuites d’énergie par exemple.
!10
Développement d’applications mobiles sous Android
‣ Outils de développement
Android Studio
‣ Platform-tools ‣ Systrace
!11
Développement d’applications mobiles sous Android
‣ Outils de développement
Android Studio
‣ Platforms
• Chaque version d’Android, dénotée par son API level, apporte des
améliorations et supprime des dispositifs obsolètes.
!12
Développement d’applications mobiles sous Android
‣ Outils de développement
Android Studio
‣ Platforms
‣ Outils de développement
Android Studio
‣ Platforms
‣ Outils de développement
Android Studio
‣ Platforms
• Chaque application exige aussi « Target API » (on indique au système que
nous avons développé et testé l’application pour cette platform). Si la
platform cible n’est pas installée, on ne peut donc pas construire ou tester
l’app (message d’erreur demandant l’installation).
‣ SDK tools
!15
!16
Développement d’applications mobiles sous Android
‣ Outils de développement
Android Studio
‣ SDK tools
‣ Android Emulator
‣ Outils de développement
Android Studio
‣ Utilisation du AVD Manager Tools -> Android -> AVD Manager
!18
Développement d’applications mobiles sous Android
‣ Outils de développement
Android Studio
‣ SDK tools
Tools -> Android -> SDK Manager , ou bien
‣ SDK Manager
Il nous aide à télécharger les outils, plates-formes et autres composants du
SDK nécessaires au développement de nos applications.
!19
Développement d’applications mobiles sous Android
‣ Outils de développement
Android Studio
‣ SDK tools
‣ SDK tools
build.gradle
‣ ProGuard
• Pour que le fichier APK soit aussi petit que possible, nous pouvons activer
la réduction afin de supprimer le code et les ressources inutilisés.
!
• La réduction de code est possible avec ProGuard, qui détecte et supprime
les classes, les champs, les méthodes et les attributs inutilisés d’une
application packagée, y compris ceux des bibliothèques utilisées.
!21
Développement d’applications mobiles sous Android
‣ Outils de développement
Android Studio
‣ SDK tools ‣ ProGuard
• La réduction de code ralentit le temps de build, on ne doit donc éviter si
possible de l’utiliser sur les versions de débogage. Cependant, il est
important de l’activer pour la création de APK final.
un « shrink » évolué : détecte
les paramètres inutilisés des
méthodes, le code mort à
l’intérieur des méthodes, etc.
https://blog.octo.com/demystifier-proguard-pour-les-developpeurs-android/
Développement d’applications mobiles sous Android
‣ Outils de développement
Android Studio
‣ Build-tools
Comme leur nom l'indique, ils représentent les composants nécessaires pour
créer les applications Android.
Cela inclut par exemple :
!
• l'outil « zipalign » qui optimise l'application pour utiliser une mémoire
minimale lors de l'exécution avant de générer le fichier APK final,
• dx (l’outil qui convertit les fichiers .java à des fichiers .dex (Dalvik
Executable))
• aapt (Android packaging tool pour créer .APK)
• « apksigner » qui signe l'APK (pour vérification ultérieure)
• etc.
!22
!23
Développement d’applications mobiles sous Android
‣ Outils de développement
Android Studio
๏ Signature d’une application
✦ Pour signer une application sous Android, il est nécessaire de disposer d’un
KeyStore, un gardien des clés (il centralisera l'ensemble des clefs pour
signer nos applications)
https://www.youtube.com/watch?v=uF6oAI9ugMg
Développement d’applications
mobiles sous Android
‣ Outils de développement
Android Studio
‣ Gradle
‣ Outils de développement
Android Studio
‣ Gradle (moteur de production)
‣ Outils de développement
Android Studio
‣ Gradle
• Gradle comme la plus part des outils de build doit garantir l’automatisation
: une simple commande doit pouvoir lancer tout le process de build et
rendre invisible toute la complexité.
!27
!28
Développement d’applications mobiles sous Android
‣ Outils de développement
Android Studio
‣ Gradle
‣ Outils de développement
Android Studio
‣ Gradle
‣ Outils de développement
!30
!31
Développement d’applications mobiles sous Android
‣ Outils de développement
Android Studio
‣ Gradle
‣ Outils de développement
Que fait cette icône dans Android Studio?
Et celle là ?
‣ Outils de développement
Est-ce qu’on peut utiliser Gradle avec Eclipse ?
!
‣ Outils de développement
!
‣ Bases d’une application Android
!
Interface et Ressources
Application et Activité (cycle de vie)
Gestion des listes
Barre d’action et menus + widgets avancés
!
‣ Persistance des données
SQLite
Développement d’applications mobiles sous Android
‣ Bases d’une application Android
Interface et Ressources : Activity
!39
Développement d’applications mobiles sous Android
‣ Bases d’une application Android
Interface et Ressources : La classe R
Cette classe contient un unique public, static et final int. Il s'agit par
conséquent d'une constante, à laquelle n'importe quelle autre classe peut
accéder sans avoir à créer d'objet de type R ni de type layout par exemple.
!40
Développement d’applications mobiles sous Android
‣ Bases d’une application Android
Interface et Ressources :
interface par programme vs programme et ressources
• Il est possible de créer une interface par programme (java/kotlin
uniquement)
<TextView
android:id="@+id/txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text"
/>
<Button
android:id="@+id/b2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/b2"
android:layout_below="@id/txt"
/>
!45
Développement d’applications mobiles sous Android
‣ Bases d’une application Android
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/tp"/>
EditText et=(EditText)findViewById(R.id.et);
String name= et.getText().toString();
!51
Développement d’applications mobiles sous Android
‣ Bases d’une application Android
• Une case qui peut être dans deux états : cochée ou pas (hérite de Button)
<CheckBox
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Oui"
android:checked="true" />
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false"/>
</RadioGroup>
!54
Développement d’applications mobiles sous Android
‣ Bases d’une application Android
• Permet d'afficher les ressources image, par exemple les ressources Bitmap
ou Drawable.
<ImageView
android:id="@+id/monIm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"
/>
im.setVisibility(View.INVISIBLE); im.setImageResource(R.drawable.icon);
!55
Développement d’applications mobiles sous Android
‣ Bases d’une application Android
ImageView vs ImageButton ?
Autres méthodes ?
!59
!60
Développement d’applications mobiles sous Android
‣ Bases d’une application Android
identification
le rattache à un <resources> du style
autre pour héritage <style name="Monstyle"
des propriétés non parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">#010101</item>
définies ici <item name="android:typeface">serif</item>
</style>
</resources>
Police
Développement d’applications mobiles sous Android
‣ Bases d’une application Android
• Un thème est un style appliqué à toute une application (il faut le spécifier
dans le fichier AndroidManifest.xml )
<application
android:allowBackup="true"
android:icon="@mipmap/tp"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="false"
android:theme="@style/Monstyle">
!61
Développement d’applications mobiles sous Android
‣ Bases d’une application Android
android:hint="Exemple" ?
<EditText
android:hint affiche un texte android:layout_width="wrap_content"
android:layout_height="wrap_content"
d'indication (pas pris en
android:hint="Exemple"
compte par l'EditText en tant android:inputType="textMultiLine"
que valeur) android:lines="5"
/>
!62
Développement d’applications mobiles sous Android
‣ Bases d’une application Android
!63
Développement d’applications mobiles sous Android
‣ Bases d’une application Android
!64
Développement d’applications mobiles sous Android
‣ Bases d’une application Android
if(checkBox.isChecked()){}
Quel est l’attribut qui permet de spécifier le type d’entré dans un EditText ?
android:inputType
!65
!67
Développement d’applications mobiles sous Android
‣ Bases d’une application Android
!68
Développement d’applications mobiles sous Android
‣ Bases d’une application Android
• LinearLayout
!
• RelativeLayout
!
• TableLayout
!
• GridLayout
!
• FrameLayout
!
• ScrollView
!69
Développement d’applications mobiles sous Android
‣ Bases d’une application Android
Paramètres généraux
Paramètres généraux
• 1dp est équivalent à un pixel physique sur un écran de 160 dpi (Dots Per
Inch - définit le nombre d'informations constituant une ligne d'un pouce) qui
est la densité de base prise en charge par le système pour un écran de
densité "moyenne".
px = dp * (dpi / 160)
!72
Développement d’applications mobiles sous Android
‣ Bases d’une application Android
Paramètres généraux
px = dp * (dpi / 160)
px = 1 * (240 / 160)
px = 1,5
!73
Développement d’applications mobiles sous Android
‣ Bases d’une application Android
Paramètres généraux
px = dp * (dpi / 160)
!74
Développement d’applications mobiles sous Android
‣ Bases d’une application Android
Interface et Ressources : Disposition
Autres paramètres géométriques
Il est possible de modifier l’espacement des vues :
!
• Padding espace entre le texte et les bords, géré par chaque vue
• Margin espace autour des bords, géré par les groupes
Développement d’applications mobiles sous Android
‣ Bases d’une application Android
Ce layout se charge de mettre les vues sur une même ligne, selon une certaine
orientation. L'attribut pour préciser cette orientation est android:orientation.
On peut lui donner deux valeurs :
• vertical pour que les composants soient placés de haut en bas (en
colonne)
• horizontal pour que les composants soient placés de gauche à droite (en
ligne).
!75
!76
Développement d’applications mobiles sous Android
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_margin="50dp"
>
!
<LinearLayout
! android:layout_width="match_parent"
! android:layout_height="wrap_content"
! android:orientation="horizontal"
! android:layout_margin="50dp">
! <TextView
! android:id="@+id/txt2"
! android:layout_width="wrap_content"
! android:layout_height="wrap_content"
! android:text="Exemple"
! android:textColor="@color/colorPrimary"
! android:layout_marginRight="10dp"/>
! <Button
! android:id="@+id/b1"
! android:layout_width="wrap_content"
! android:layout_height="wrap_content"
! android:text="OK"
! />
!
</LinearLayout>
!
<ImageView
! android:id="@+id/im1"
! android:layout_width="wrap_content"
! android:layout_height="wrap_content"
! android:src="@drawable/tchina"
! />
</LinearLayout>
<LinearLayout !77
android:orientation= "horizontal"
android:layout_width= "match_parent"
android:layout_height= "match_parent"
>
<TextView
android:text= "red"
android:gravity= "center_horizontal"
android:background= "#aa0000"
android:layout_width= "wrap_content"
android:layout_height= "match_parent"
android:layout_weight= "1"
/>
<TextView
android:text= "green"
android:gravity= "center_horizontal"
android:background= "#00aa00"
android:layout_width= "wrap_content"
android:layout_height= "match_parent"
android:layout_weight= "1"
/>
<TextView
android:text= "blue"
android:gravity= "center_horizontal"
android:background= "#0000aa"
android:layout_width= "wrap_content"
android:layout_height= "match_parent"
android:layout_weight= "1"
/>
<TextView
android:text= "yellow"
android:gravity= "center_horizontal"
android:background= "#aaaa00"
android:layout_width= "wrap_content"
android:layout_height= "match_parent"
android:layout_weight= "1"
/>
</LinearLayout>
!78
Développement d’applications mobiles sous Android
‣ Bases d’une application Android
Layout Weight :
!79