82
#DevoxxFR La boîte à outils du développeur Android de 2016 Gautier Mechling @Nilhcem 1

The 2016 Android Developer Toolbox [DEVOXX]

  • Upload
    nilhcem

  • View
    443

  • Download
    2

Embed Size (px)

Citation preview

Page 1: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

La boîte à outils du développeur Android de 2016

Gautier Mechling @Nilhcem

1

Page 2: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Présentation

2

@Nilhcem

Gautier Mechling

Développeur passionnné

Page 3: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

happn

3

"Retrouvez qui vous croisez"

Cette vidéo est une oeuvre de pure fiction. Toute ressemblance avec des situations réelles ou des personnes existantes ne saurait être que carrément fortuite, ma gueule.

Page 4: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR 4

Parlons de…

Page 5: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

La boîte à outils du développeur Android de 2016

Gautier Mechling @Nilhcem

5

Page 6: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

L’explication

6

Page 7: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

L’explication

7

“Quel homme !"

“Grand et fort !”

“Retenez moi,je vais m'évanouir"

“Si beau ! il ferait pas partie du JUG par hasard ?"

Page 8: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

L’explication

8

“Bon c’est chaud là…”

“Pas de tests ? Même pas 1 ou 2 qui échouent ?"

“Retenez moi,je vais m'évanouir"

“Comment ils ont pu concevoir ÇA ?”

Page 9: The 2016 Android Developer Toolbox [DEVOXX]

“Use the right tools for the right job"

(comme ils disent les américains)

Page 10: The 2016 Android Developer Toolbox [DEVOXX]

YOLO

Page 11: The 2016 Android Developer Toolbox [DEVOXX]
Page 12: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Gradle

12

(Avec le plugin Android)

Page 13: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Build Variants

13

Page 14: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

U+2020

14

https://github.com/JakeWharton/u2020

Page 15: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Menu de Debug

15

https://github.com/google/iosched

Page 16: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Application de Debug

16

• Afficher les informations de build

• Changer de serveur à la volée

• Afficher les logs

• Envoyer des rapports de bugs

• etc.

Page 17: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

L'application DevoxxFR

17

https://github.com/Nilhcem/devoxxfr-2016

Page 18: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Mesurer

18

Page 19: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Android Studio 2.0

Onglet : Android Monitor

19

Page 20: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR 20

Page 21: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Détecter les fuites mémoire

21

Page 22: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR 22

Page 23: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Leak Canary

23

https://www.github.com/square/leakcanary

Page 24: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Takthttps://github.com/wasabeef/Takt

compile 'jp.wasabeef:takt:1.0.2'

public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); Takt.stock(this).play(); }}

24

Page 25: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Hugo

25

https://www.github.com/JakeWharton/hugo

Préfixer les classes / methodes avec:@DebugLog

Résultat :DevoxxApp V ⇢ onCreate() V ⇢ initGraph() V ⇠ initGraph [13ms] V ⇢ initLogger() V ⇠ initLogger [1ms] V ⇠ onCreate [73ms]

Page 26: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Pidcat

26

https://github.com/JakeWharton/pidcat

$ pidcat com.nilhcem.devoxxfr

Page 27: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

AndroidDevMetricshttps://github.com/frogermcs/AndroidDevMetrics

apply plugin: 'com.frogermcs.androiddevmetrics'

public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); AndroidDevMetrics.initWith(this); }}

27

Page 28: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Outils d’analyse statique de code

28

Page 29: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Analyse statique

29

- Lint

- PMD

- Checkstyle

- Findbugs

- Infer

Page 30: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

SonarQube

30

Page 31: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Dockerfile SonarQube

31

FROM java:8MAINTAINER Nilhcem

RUN DEBIAN_FRONTEND=noninteractive apt updateRUN DEBIAN_FRONTEND=noninteractive apt install -y wget unzipRUN wget -q https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-5.4.zipRUN unzip -qq sonarqube-5.4.zip -d /opt/RUN rm sonarqube-5.4.zip

EXPOSE 9000CMD ["/opt/sonarqube-5.4/bin/linux-x86-64/sonar.sh", “console"]

Ensuite lancer :

$ docker build -t nilhcem/sonarqube . $ docker run -p 9000:9000 -d nilhcem/sonarqube

Page 32: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

SonarQube : Configuration Gradle

32

apply plugin: 'org.sonarqube'

sonarqube { properties { def appProject = project(':app') def appProjectBuildDir = appProject.buildDir

property 'sonar.projectKey', 'devoxxfr' property 'sonar.projectName', 'DevoxxFR 2016' property 'sonar.projectVersion', appProject.android.defaultConfig.versionName

property 'sonar.host.url', 'http://docker:9000' property 'sonar.sources', 'src' property 'sonar.sourceEncoding', 'UTF-8' property 'sonar.java.binaries', 'build'

property 'sonar.exclusions', '**/*Test.java' property 'sonar.core.codeCoveragePlugin', 'jacoco' property 'sonar.jacoco.reportPath', "$appProjectBuildDir/jacoco/testProductionDebugUnitTest.exec" property 'sonar.junit.reportsPath', "$appProjectBuildDir/test-results/productionDebug" }}$ gradlew :app:assembleProductionDebug :app:testProductionDebugUnitTest :app:sonarqube

Page 33: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR 33

Page 34: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR 34

Page 35: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Tester

35

Page 36: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Mock Server

36

Page 37: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

NodeJS + Express

37

/* Initialisation */ var fs = require('fs'); var express = require('express'); var app = express();app.set('port', process.env.PORT || 8080); var port = app.get('port');

/* Service web : liste des speakers */app.get('/speakers', function(req, res) { res.type('application/json; charset=utf8'); res.status(200).send(fs.readFileSync('data/speakers.json', 'utf8')); });

/* Autres services à mocker */// ...

/* Démarrage du serveur */app.listen(port, function () { console.log('Express server listening on port ' + port); });

Page 38: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Simuler une réponse lente

38

sleep(2000);

function sleep(durationMillis) { var now = new Date().getTime(); while(new Date().getTime() < now + durationMillis) { // do nothing }}// SVP ne prenez pas ce slide en photo, j’en suis pas fier

Page 39: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Exemple

https://github.com/Nilhcem/devoxxfr-2016/tree/master/mockserver

$ npm install $ node server.js

Ensuite, aller sur http://localhost:8990/

39

Page 40: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Hosts Editor

40

Page 41: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Débugueur HTTP

41

Page 42: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Web Debugging Proxies

42

- mitmproxy

- Fiddler

- Charles proxy

Page 43: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Charles Proxy

43

• Simuler une connexion lente/instable

• Répéter des requêtes

• Vérifier les réponses

• Ajouter des points d’arrêt pour :

• Annuler un appel HTTP(s)

• Éditer une requête

• Éditer une réponse

Page 44: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Annuler une requête

44

Page 45: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Éditer une réponse

45

Page 46: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Analyser

46

Page 47: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Options développeurs

47

Page 48: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Afficher les contours

48

Page 49: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Conflits GPU (overdraw)

49

Page 50: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

hierarchyviewer

50

https://developer.android.com/tools/performance/hierarchy-viewer/setup.html#hvproto-variable http://developer.android.com/tools/debugging/debugging-ui.html

$ export ANDROID_HVPROTO=ddm $ exec ${ANDROID_HOME}/tools/monitor

Page 51: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

uiautomatorviewer

51

Page 52: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Animations

52

Page 53: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Animations

Faire un screencast :$ adb shell screenrecord /sdcard/demo.mp4 $ adb pull /sdcard/demo.mp4

VLC :Appuyer sur la touche E du clavier pour voir les frames une par une

53

Page 54: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

apktool + dex2jar + JD-GUI

54

http://ibotpeaches.github.io/Apktoolhttps://github.com/pxb1988/dex2jarhttp://jd.benow.ca

Page 55: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

jadx

55

https://github.com/skylot/jadx

Page 56: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Stetho

56

Page 57: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Stetho - UI

57

Page 58: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Stetho - Réseau

58

Page 59: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Stetho - Ressources

59

Page 60: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Stetho - Dumpapp

60

Page 61: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Stetho - Dumpapp

61

Page 62: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Stetho - Dumpapp

62

Page 63: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

D’autres exemples avec dumpapp

63

Page 64: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Autres exemples dumpapp

64

$ dumpapp accessToken invalidate

$ dumpapp accessToken show fce1235425dcdeadbeef8cafebabe42

$ dumpapp clipboard get Hello

$ dumpapp clipboard set "Text to copy" $ dumpapp onTrimMemory $ dumpapp openIntent scheme://open/speaker/3

$ dumpapp gcmToken uHyMKnEQ:APA91bEHZ6afFLQQMzKgSDjp5y_0397usitPqj_Bp02

$ dumpapp geolocData Location[fused 22.5430883,114.1043205 acc=21 et=+21m5s492ms]

$ dumpapp runningServices com.example.LocationService

Page 65: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR 65

http://code.tutsplus.com/tutorials/debugging-android-apps-with-facebooks-stetho--cms-24205

class AppDumperPlugin implements DumperPlugin { @Override public String getName() { return "my_plugin_name"; }

@Override public void dump(DumperContext dumpContext) throws DumpException { PrintStream writer = dumperContext.getStdout(); String commandName = (args.isEmpty()) ? "" : args.remove(0);

if (commandName.equals("test")) { out.println("Hello, World!"); } }}

Dumpapp - Création d’un plugin

Page 66: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR 66

Dumpapp - Création d’un plugin

Page 67: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR 67

ActivityProvider dans un graph de dépendance en debug

@Singleton public class ActivityProvider implements Application.ActivityLifecycleCallbacks { private Activity currentActivity;

@Inject public ActivityProvider(Application app) { app.registerActivityLifecycleCallbacks(this); }

public Activity getCurrentActivity() { return currentActivity; }

@Override public void onActivityResumed(Activity activity) { currentActivity = activity; }

@Override public void onActivityPaused(Activity activity) { currentActivity = null; } }

Dumpapp - Création d’un plugin

Page 68: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Dumpapp - Création d’un plugin

68

AppDumperPlugin.java:

private void displayCurrentSessionData(PrintStream writer) { Activity activity = activityProvider.getCurrentActivity(); if (activity instanceof SessionDetailsActivity) { try { // Use reflection to access private "session" field Field field = SessionDetailsActivity.class.getDeclaredField("session"); field.setAccessible(true); Session session = (Session) field.get(activity); writer.println(new GsonBuilder().setPrettyPrinting().create().toJson(session)); } catch (Exception e) { writer.println(e.getMessage()); } }}

Page 69: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Stetho - Console + Rhino

69

Page 70: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Ah oui, il y a aussi tous ces autres outils que je voulais présenter mais je crois qu’en fait, il nous

reste plus vraiment trop de temps et c’est bien dommage parce

qu’ils sont aussi importants et puis

70

Page 71: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR 71

# Ouvrir un deep link adb shell am start -a android.intent.action.VIEW -d "scheme://app/deep/linking"

# Lister les services qui tournent actuellement sur l'appareil adb shell dumpsys activity services

# Récupérer le chemin de l’apk d’une application installée adb shell pm path app.package.name

# Supprimer les données de l'app adb shell pm clean app.package.name

# Prendre un screenshot adb shell screencap -p | perl -pe '\''s/\x0D\x0A/\x0A/g'\'' > screen.png

# Coller le texte du clipboard de son ordi vers son appareil android pbpaste | sed "s/%/%%/g" | sed "s/ /\%\s/g" | xargs adb shell input text

ADB + Shell

Page 72: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Postman

72

https://www.getpostman.com/

Page 73: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Lockito

73

Page 74: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Fill RAM

74

https://play.google.com/store/apps/details?id=com.tspoon.androidtoolbelt

Page 75: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

MethodsCount

75

http://www.methodscount.com/https://github.com/mihaip/dex-method-counts

Page 76: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Vysor

76

http://www.vysor.io/

Page 77: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

En conclusion

77

Page 78: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Choisir selon vos besoins et préférences

78

Page 79: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

La boîte à outils du développeur Android de 2016

Gautier Mechling @Nilhcem

79

Page 80: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

La boîte à outils du développeur Android de 2016

Gautier Mechling @Nilhcem

80

NUL

Page 81: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Exempled’une boîte à outils pour Android

Gautier Mechling @Nilhcem

81

Page 82: The 2016 Android Developer Toolbox [DEVOXX]

#DevoxxFR

Merci

https://twitter.com/Nilhcem https://github.com/Nilhcem/devoxxfr-2016

http://www.slideshare.net/Nilhcem/the-2016-android-developer-toolbox-devoxx

82