6. ACTIVITÉ DE DEBUG
Inspirée de U+2020
Afficher les informations de build
Changer de serveur à la volée
Afficher les logs
Envoyer des rapports de bugs
etc.
28. NODEJS + EXPRESS
/* Setup */
var fs = require('fs');
var express = require('express');
var app = express();
app.set('port', process.env.PORT || 8080);
var port = app.get('port');
/* 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 web */
// ...
/* Démarrer le serveur */
app.listen(port, function () {
console.log('Express server listening on port ' + port);
});
29. NODEJS + EXPRESS
Simuler une réponse lente
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
30. EXEMPLE
Ensuite, aller sur :
https://github.com/Nilhcem/devfestnantes-2016
/tree/master/mockserver
$ npm install
$ npm start
http://localhost:8990/
34. CHARLES PROXY
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
46. ANIMATIONS
Faire un screencast (API 19+) :
VLC :
$ adb shell screenrecord /sdcard/demo.mp4
$ adb pull /sdcard/demo.mp4
Appuyer sur la touche 'E' du clavier
pour voir les frames une par une
60. DUMPAPP - CRÉATION D'UN PLUGIN
(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;
}
}
61. DUMPAPP - CRÉATION D'UN PLUGIN
AppDumperPlugin.java
private void displayCurrentSessionData(PrintStream writer) {
Activity activity = activityProvider.getCurrentActivity();
if (activity instanceof SessionDetailsActivity) {
try {
// Un peu de réflection pour accéder au membre privé "session"
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());
}
}
}
64. ADB + SHELL
# 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/x0Dx0A/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