SlideShare una empresa de Scribd logo
1 de 47
01

SHOWCASE

GERER UN PARC DE TELEPHONES

return xp++;
Pierre-Olivier Dybman

Edouard Marquez

!

!

+PierreOlivierDybman
(aka flappy beard)

+EdouardMarquez
(aka g123k)
02

SHOWCASE

GERER UN PARC DE TELEPHONES

QUI SOMMES NOUS ?
Mais qui est Sidereo ? Que faisons-nous ?

LES COMPOSANTS
d’une solution mobile

NOTRE CLIENT
COMMENT MODIFIER
Android pour ces besoins ?

PRINCIPALES DIFFICULTES
Et nos conclusions !
03

QUI

SOMMES NOUS ?

Besoin d'une stratégie mobile ? 

Attention à la marche ! 

Sidereo vous aidera à concevoir, développer et 

mettre en marché votre solution mobile.

Nos sujets

Nos compétences

Applicatif métier mobile

Étude, conseil et analyse

Gestion de parc

Gestion de projet

Gestion applicative

Développement et recueil des retours

Objets connectés
OS embarqués

utilisateur
Déploiement
Mise en marché
QUI

SOMMES NOUS ?

Humanoid

04
LES COMPOSANTS
D’UNE SOLUTION MOBILE

05
06

LES COMPOSANTS
App. Signature

Mobile Application Management (MAM)
Mobile Device Management (MDM)
FrameWork Android
Dalvik Virtual Machine (ou Android RunTime)
Librairies natives et noyau
GSM

WiFi

Sécurité

App. Système

Configuration

App. Utilisateur

Authentification

D’UNE SOLUTION MOBILE
06

LES COMPOSANTS
App. Signature

Mobile Application Management (MAM)
Mobile Device Management (MDM)
FrameWork Android
Dalvik Virtual Machine (ou Android RunTime)
Librairies natives et noyau
GSM

WiFi

Sécurité

App. Système

Configuration

App. Utilisateur

Authentification

D’UNE SOLUTION MOBILE
06

LES COMPOSANTS
App. Signature

Mobile Application Management (MAM)
Mobile Device Management (MDM)
FrameWork Android
Dalvik Virtual Machine (ou Android RunTime)
Librairies natives et noyau
GSM

WiFi

Sécurité

App. Système

Configuration

App. Utilisateur

Authentification

D’UNE SOLUTION MOBILE
06

LES COMPOSANTS
App. Signature

Mobile Application Management (MAM)
Mobile Device Management (MDM)
FrameWork Android
Dalvik Virtual Machine (ou Android RunTime)
Librairies natives et noyau
GSM

WiFi

Sécurité

App. Système

Configuration

App. Utilisateur

Authentification

D’UNE SOLUTION MOBILE
06

LES COMPOSANTS
App. Signature

Mobile Application Management (MAM)
Mobile Device Management (MDM)
FrameWork Android
Dalvik Virtual Machine (ou Android RunTime)
Librairies natives et noyau
GSM

WiFi

Sécurité

App. Système

Configuration

App. Utilisateur

Authentification

D’UNE SOLUTION MOBILE
ETUDE DE CAS

07

• Location de terminaux mobiles à court terme
• Calcul de la consommation voix et data
• Pas de SMS
• Localisation des terminaux, gestion des dégâts, etc.
• Environnement contraint pour l’utilisateur
• Embarquer des applications
08

ETUDE DE CAS
LES COMPOSANTS D’UNE
App. Signature

Mobile Application Management (MAM)
Mobile Device Management (MDM)
FrameWork Android
Dalvik Virtual Machine (ou Android RunTime)
Librairies natives et noyau
GSM

WiFi

Sécurité

App. Système

Configuration

App. Utilisateur

Authentification

SOLUTION MOBILE
09

COMMENT MODIFIER
ANDROID ?

INTRODUCTION : LE SERVEUR
- Base utilisateurs
- Tarifs & Consommation

Smartphone en
location

- Paiement
- Gestion des dommages
- Applications
- Contacts
- Numéros bloqués
- Push

Serveur
COMMENT MODIFIER
ANDROID ?

DIFFÉRENTS TYPES D’APPLICATION
Application utilisateur :


!

- Utilisation standard du
framework Android
- Peut remplacer des
briques de bases telles
que le launcher, le
composer, le clavier

10
COMMENT MODIFIER
ANDROID ?

DIFFÉRENTS TYPES D’APPLICATION
Application utilisateur :


!

- Utilisation standard du
framework Android
- Peut remplacer des
briques de bases telles
que le launcher, le
composer, le clavier

Application système : 


!

- Peut utiliser certaines
permissions particulières
(reboot, installation
silencieuse d’application,
…)
- Non désinstallable

10
10

COMMENT MODIFIER
ANDROID ?

DIFFÉRENTS TYPES D’APPLICATION
Application utilisateur :


!

- Utilisation standard du
framework Android
- Peut remplacer des
briques de bases telles
que le launcher, le
composer, le clavier

Application système : 


!

- Peut utiliser certaines
permissions particulières
(reboot, installation
silencieuse d’application,
…)
- Non désinstallable

Application signature :


!

- Non désactivable par
l’utilisateur
COMMENT MODIFIER
ANDROID ?

DIFFÉRENTS TYPES D’APPLICATION

10
COMMENT MODIFIER
ANDROID ?

PRÉEMBARQUER DES APPLICATIONS
• Avec le code source via un Makefile Android classique (Android.mk) :

!

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

!

LOCAL_SRC_FILES := $(call all-java-files-under, src)

!

LOCAL_PACKAGE_NAME := CityGuide
LOCAL_CERTIFICATE := platform

!

include $(BUILD_PACKAGE)

!
!

• Au format APK (dont on n’a pas le code source) :

!

PRODUCT_COPY_FILES += 
somewhere/ToiletsInParis.apk:system/app/ToiletsInParis.apk (< 4.4)
somewhere/ToiletsInParis.apk:system/priv-app/ToiletsInParis.apk (>= 4.4)

11
COMMENT MODIFIER
ANDROID ?

PRÉEMBARQUER DES APPLICATIONS
• Avec le code source via un Makefile Android classique (Android.mk) :

!

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

!

LOCAL_SRC_FILES := $(call all-java-files-under, src)

!

LOCAL_PACKAGE_NAME := CityGuide
LOCAL_CERTIFICATE := platform

!

include $(BUILD_PACKAGE)

!
!

• Au format APK (dont on n’a pas le code source) :

!

PRODUCT_COPY_FILES += 
somewhere/ToiletsInParis.apk:system/app/ToiletsInParis.apk (< 4.4)
somewhere/ToiletsInParis.apk:system/priv-app/ToiletsInParis.apk (>= 4.4)

11
COMMENT MODIFIER
ANDROID ?

Application “Découverte et paiement” :
• Impassable sans paiement
• Aucune fonctionnalité du téléphone accessible
• Lancée à chaque démarrage tant que le paiement n’est pas fait

12
COMMENT MODIFIER

13

ANDROID ?

DÉVELOPPER UNE APPLICATION DE DÉMARRAGE
BLOQUANTE
• C’est simple !
• Rajouter sur une Activity de l’AndroidManifest.xml :
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<action android:name="android.intent.action.DEVICE_INITIALIZATION_WIZARD"/>
<category android:name="android.intent.category.HOME"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
COMMENT MODIFIER

14

ANDROID ?

DÉVELOPPER UNE APPLICATION DE DÉMARRAGE
BLOQUANTE

• Mais il faut penser à désactiver l’application :
PackageManager packageManager = context.getPackageManager();

!
packageManager.setComponentEnabledSetting(
new ComponentName(“com.helloworld.app”, HelloWorldActivity.class),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
COMMENT MODIFIER

15

ANDROID ?

DESCENTE D’APPLICATION SILENCIEUSE
• Pour provoquer l’installation d’une
application sans demande de permission, il
faut être système
public final static String PM_UPDATE = "pm install -r";

!

public static String executeCommand(String command, String param) {
BufferedReader in = null;
try {
Process process = Runtime.getRuntime().exec(String.format("%s %s", command,
param));
} […]
COMMENT MODIFIER
ANDROID ?

MODIFIER LES APNS
• Il ne faut pas modifier le fichier dans le
framework, mais en créer un autre.
!

• Chez CyanogenMod, il est situé dans vendor/cm/
prebuild/common/etc :
<apns version="xx">
<apn carrier="xxx" mcc="xxx" mnc="xxx" apn="xxx" user="xxx" password="xx"
type=“xxx" … />
</apns>

16
COMMENT MODIFIER
ANDROID ?

Application “Rendu du téléphone” :
• Authentification distributeur
• Formulaire de vérification du téléphone à remplir par le distributeur
• Reset complet du téléphone
• Redémarrage avec optimisation des applications

17
COMMENT MODIFIER
ANDROID ?

POURQUOI UN RESET ?

18
COMMENT MODIFIER
ANDROID ?

COMMENT FAIRE UN RESET ?
• Il faut demander la permission système
android.permission.MASTER_CLEAR

19
COMMENT MODIFIER
ANDROID ?

COMMENT FAIRE UN RESET ?
• Il faut demander la permission système
android.permission.MASTER_CLEAR
!
!

• Et appeler cet Intent :
sendBroadcast(
new Intent(“android.intent.action.MASTER_CLEAR"));

19
COMMENT MODIFIER
ANDROID ?

GÉRER LES COMMUNICATIONS
• SMS en modifiant le framework
!

• Appels : plusieurs choix
– Directement dans le framework
– En interceptant l’Intent dans une application
!

• Internet via des règles iptables

20
COMMENT MODIFIER

21

ANDROID ?

COUPER LES SMS
• Les applications tierces utilisent le SmsManager
pour envoyer un message, qui lui même utilise le
IccSmsInterfaceManager.
public void sendTextMessage(String destinationAddress, String scAddress, String text,
PendingIntent sentIntent, PendingIntent deliveryIntent) {
[…]
ISms iccISms = ISms.Stub.asInterface(ServiceManager.getService("isms"));
if (iccISms != null) {
iccISms.sendText(ActivityThread.currentPackageName(), destinationAddress,
scAddress, text, sentIntent, deliveryIntent);
} […]
COMMENT MODIFIER
ANDROID ?

COUPER LES SMS
• On note plus particulièrement ces
méthodes :
!

• sendData(…)
• sendText(…)
• sendTextWithPriority(…)
• …

22
COMMENT MODIFIER

23

ANDROID ?

COUPER LES SMS
public void sendData(String destAddr, String scAddr, int destPort, byte[] data, PendingIntent sentIntent,
PendingIntent deliveryIntent) {

!
	

!

!
}

mPhone.getContext().enforceCallingPermission("android.permission.SEND_SMS", 	 	
"Sending SMS message”);
if (Rlog.isLoggable("SMS", Log.VERBOSE)) {
log("sendData: destAddr=" + destAddr + " scAddr=" + scAddr + " destPort=" + destPort + " data='"+
HexDump.toHexString(data) + "' sentIntent=" + sentIntent + " deliveryIntent=" + deliveryIntent)
}
mDispatcher.sendData(destAddr, scAddr, destPort, data, sentIntent, deliveryIntent);
COMMENT MODIFIER

23

ANDROID ?

COUPER LES SMS
public void sendData(String destAddr, String scAddr, int destPort, byte[] data, PendingIntent sentIntent,
PendingIntent deliveryIntent) {

!
	

!

!
}

mPhone.getContext().enforceCallingPermission("android.permission.SEND_SMS", 	 	
"Sending SMS message”);
if (Rlog.isLoggable("SMS", Log.VERBOSE)) {
log("sendData: destAddr=" + destAddr + " scAddr=" + scAddr + " destPort=" + destPort + " data='"+
HexDump.toHexString(data) + "' sentIntent=" + sentIntent + " deliveryIntent=" + deliveryIntent)
}
mDispatcher.sendData(destAddr, scAddr, destPort, data, sentIntent, deliveryIntent);
COMMENT MODIFIER

23

ANDROID ?

COUPER LES SMS
public void sendData(String destAddr, String scAddr, int destPort, byte[] data, PendingIntent sentIntent,
PendingIntent deliveryIntent) {

!
	

!

!
}

mPhone.getContext().enforceCallingPermission("android.permission.SEND_SMS", 	 	
"Sending SMS message”);
if (Rlog.isLoggable("SMS", Log.VERBOSE)) {
log("sendData: destAddr=" + destAddr + " scAddr=" + scAddr + " destPort=" + destPort + " data='"+
HexDump.toHexString(data) + "' sentIntent=" + sentIntent + " deliveryIntent=" + deliveryIntent)
}
if (!blockSms()) {
mDispatcher.sendData(destAddr, scAddr, destPort, data, sentIntent, deliveryIntent);
}
COMMENT MODIFIER
ANDROID ?

COUPER LES APPELS
• Application interceptant l’intent

!

<intent-filter>
<action android:name="android.intent.action.ANSWER"/>
<action android:name="android.intent.action.PHONE_STATE"/>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>

!
!

• Mais ne la rendant pas au système
setResultData(null);

!
!

• Inconvénient : priorité d’interception
• Solution : modifier le framework pour changer l’intent levée par un appel

24
COMMENT MODIFIER
ANDROID ?

COUPER LES APPELS
• Application interceptant l’intent

!

<intent-filter priority=“xx”>
<action android:name="android.intent.action.ANSWER"/>
<action android:name="android.intent.action.PHONE_STATE"/>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>

!
!

• Mais ne la rendant pas au système
setResultData(null);

!
!

• Inconvénient : priorité d’interception
• Solution : modifier le framework pour changer l’intent levée par un appel

24
COMMENT MODIFIER
ANDROID ?

FACTURER LES APPELS
• On enregistre un BroadcastReceiver pour qu’il reçoive les événements relatifs
aux appels :

!

<intent-filter android:priority=“0">
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>

!

• Un appel suit forcément cette séquence, sinon il n’a pas abouti/l’utilisateur l’a
annulé avant :
• Action de l’Intent vaut Intent.ACTION_NEW_OUTGOING_CALL
• Puis en fonction du CallState du TelephonyManager
• TelephonyManager.CALL_STATE_OFFHOOK
• TelephonyManager.CALL_STATE_IDLE

25
COMMENT MODIFIER
ANDROID ?

COUPER INTERNET
• Règles iptables
!

• Problème : on filtre par IP mais ici la gestion du
Push pose un problème :

!

– Soit on coupe tout, mais on ne reçoit plus de
communication du SI
– Soit on whitelist les serveurs de GCM mais dans ce
cas, on reçoit tous les pushs, pas juste les notres

• Solution : filtrer par application

26
COMMENT MODIFIER
ANDROID ?

COUPER INTERNET
Maps
Uid : 1

GoogleServices
Framework
Uid : 2

TrafficManager
Uid : 3

Paris City Guide
Uid : 4

27
COMMENT MODIFIER
ANDROID ?

COUPER INTERNET
Maps
Uid : 1

GoogleServices
Framework
Uid : 2

TrafficManager
Uid : 3

Paris City Guide
Uid : 4

27
COMMENT MODIFIER

28

ANDROID ?

COUPER INTERNET
• 1) On initialise iptables
!
iptables --flush
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT DROP

-A : ajouter une règle en fin de liste
-P : indiquer une policy
-j : indiquer une décision
-m : règle/correspondance
--sport : port source
--dport : port de destination
28

COMMENT MODIFIER
ANDROID ?

COUPER INTERNET

-A : ajouter une règle en fin de liste
-P : indiquer une policy
-j : indiquer une décision
-m : règle/correspondance
--sport : port source
--dport : port de destination

• 2) On crée des meta-interfaces
!
iptables -N mtm

!
iptables -N mtm-wifi
iptables -N mtm-3g
28

COMMENT MODIFIER
ANDROID ?

COUPER INTERNET

-A : ajouter une règle en fin de liste
-P : indiquer une policy
-j : indiquer une décision
-m : règle/correspondance
--sport : port source
--dport : port de destination

• 3) On associe ces metas-interfaces aux
interfaces réseau
!
iptables -A mtm -o wlan+ -j mtm-wifi
iptables -A mtm -o tiwlan+ -j mtm-wifi…

!
iptables -A mtm -o rmnet+ -j mtm-3g…
28

COMMENT MODIFIER
ANDROID ?

COUPER INTERNET

-A : ajouter une règle en fin de liste
-P : indiquer une policy
-j : indiquer une décision
-m : règle/correspondance
--sport : port source
--dport : port de destination

• 4) On définit les exceptions
!
iptables -A mtm-wifi -m owner --uid-owner uid -j RETURN
iptables -A mtm-3g -m owner --uid-owner uid -j RETURN
COMMENT MODIFIER

28

ANDROID ?

COUPER INTERNET
• 5) On termine par
!
iptables -P OUTPUT ACCEPT

-A : ajouter une règle en fin de liste
-P : indiquer une policy
-j : indiquer une décision
-m : règle/correspondance
--sport : port source
--dport : port de destination
COMMENT MODIFIER
ANDROID ?

PRINCIPALES DIFFICULTÉS
• Choisir une bonne base (AOSP ?
CyanogenMod ?)
• Modifier le moins de choses possibles
• Gérer les sources d’Android
• Faible documentation
• Temps pour tester
• Samsung ;)

29
30

SHOWCASE

GERER UN PARC DE TELEPHONES

QR
&

C’EST À VOTRE TOUR !

Más contenido relacionado

Destacado

Javier muñoz gutiérrez actividad 2 diapositivas_ppt.docx
Javier muñoz gutiérrez actividad 2 diapositivas_ppt.docxJavier muñoz gutiérrez actividad 2 diapositivas_ppt.docx
Javier muñoz gutiérrez actividad 2 diapositivas_ppt.docxJavier Muñoz Gutiérrez
 
Es posible la revolución educativa sin la integración de herramientas tecnoló...
Es posible la revolución educativa sin la integración de herramientas tecnoló...Es posible la revolución educativa sin la integración de herramientas tecnoló...
Es posible la revolución educativa sin la integración de herramientas tecnoló...Maribelav
 
Автоматизация передачи оперативной информации
Автоматизация  передачи оперативной информацииАвтоматизация  передачи оперативной информации
Автоматизация передачи оперативной информацииSixSigmaOnline
 
3 вида мышления
3 вида мышления3 вида мышления
3 вида мышленияSixSigmaOnline
 
[BUS444-Strategic Management] McDonald's Case Study Analysis
[BUS444-Strategic Management] McDonald's Case Study Analysis[BUS444-Strategic Management] McDonald's Case Study Analysis
[BUS444-Strategic Management] McDonald's Case Study Analysishaiyen261092
 
Jornada nacional de vacunacion
Jornada nacional de vacunacionJornada nacional de vacunacion
Jornada nacional de vacunacionzeusg
 

Destacado (7)

Javier muñoz gutiérrez actividad 2 diapositivas_ppt.docx
Javier muñoz gutiérrez actividad 2 diapositivas_ppt.docxJavier muñoz gutiérrez actividad 2 diapositivas_ppt.docx
Javier muñoz gutiérrez actividad 2 diapositivas_ppt.docx
 
Es posible la revolución educativa sin la integración de herramientas tecnoló...
Es posible la revolución educativa sin la integración de herramientas tecnoló...Es posible la revolución educativa sin la integración de herramientas tecnoló...
Es posible la revolución educativa sin la integración de herramientas tecnoló...
 
Автоматизация передачи оперативной информации
Автоматизация  передачи оперативной информацииАвтоматизация  передачи оперативной информации
Автоматизация передачи оперативной информации
 
3 вида мышления
3 вида мышления3 вида мышления
3 вида мышления
 
McDonalds
McDonaldsMcDonalds
McDonalds
 
[BUS444-Strategic Management] McDonald's Case Study Analysis
[BUS444-Strategic Management] McDonald's Case Study Analysis[BUS444-Strategic Management] McDonald's Case Study Analysis
[BUS444-Strategic Management] McDonald's Case Study Analysis
 
Jornada nacional de vacunacion
Jornada nacional de vacunacionJornada nacional de vacunacion
Jornada nacional de vacunacion
 

Similar a Gérer un parc de téléphones (Droidcon Tunisia 2014)

Alphorm.com Formation Windev Mobile 19, Android
Alphorm.com Formation Windev Mobile 19, AndroidAlphorm.com Formation Windev Mobile 19, Android
Alphorm.com Formation Windev Mobile 19, AndroidAlphorm
 
Tech conf1 développement_natif_applications_mobiles
Tech conf1 développement_natif_applications_mobilesTech conf1 développement_natif_applications_mobiles
Tech conf1 développement_natif_applications_mobilesTelecomValley
 
La gestion des périphériques modernes avec System Center 2012 R2 Configuratio...
La gestion des périphériques modernes avec System Center 2012 R2 Configuratio...La gestion des périphériques modernes avec System Center 2012 R2 Configuratio...
La gestion des périphériques modernes avec System Center 2012 R2 Configuratio...MUG-Lyon Microsoft User Group
 
La nouvelle donne du mobile pour les devices professionnels mobility for bu...
La nouvelle donne du mobile pour les devices professionnels   mobility for bu...La nouvelle donne du mobile pour les devices professionnels   mobility for bu...
La nouvelle donne du mobile pour les devices professionnels mobility for bu...Tristan Verdier
 
Construire une application mobile avec un CMS
Construire une application mobile avec un CMSConstruire une application mobile avec un CMS
Construire une application mobile avec un CMSAgoraCMS
 
Parlons App Economie : du dev à l'usage
Parlons App Economie : du dev à l'usageParlons App Economie : du dev à l'usage
Parlons App Economie : du dev à l'usageLaFrenchMobile
 
chapitre-1-introduction-plateforme-android (2).pdf
chapitre-1-introduction-plateforme-android (2).pdfchapitre-1-introduction-plateforme-android (2).pdf
chapitre-1-introduction-plateforme-android (2).pdfolfaharrabi2
 
Les solutions mobiles (potentiel et enjeux)
Les solutions mobiles (potentiel et enjeux)Les solutions mobiles (potentiel et enjeux)
Les solutions mobiles (potentiel et enjeux)SCALA
 
Transitions et Animations – Donnez une nouvelle dimension à vos applications ...
Transitions et Animations – Donnez une nouvelle dimension à vos applications ...Transitions et Animations – Donnez une nouvelle dimension à vos applications ...
Transitions et Animations – Donnez une nouvelle dimension à vos applications ...Microsoft
 
Chapitre 1-introduction-plateforme-android
Chapitre 1-introduction-plateforme-androidChapitre 1-introduction-plateforme-android
Chapitre 1-introduction-plateforme-androidSalah Gharbi
 
Cellenza microservices - tour d'horizon - v0.1
Cellenza   microservices - tour d'horizon - v0.1Cellenza   microservices - tour d'horizon - v0.1
Cellenza microservices - tour d'horizon - v0.1Radoine Douhou
 
Xamarin.Forms [french]
Xamarin.Forms [french]Xamarin.Forms [french]
Xamarin.Forms [french]Laurent Duveau
 
Rapport app mobile ionic3 my gallery
Rapport app mobile ionic3 my galleryRapport app mobile ionic3 my gallery
Rapport app mobile ionic3 my galleryMOHAMMED MOURADI
 
10 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 810 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 8Microsoft
 
Google glass droidcon - DroidCon Paris 2014
Google glass droidcon - DroidCon Paris 2014Google glass droidcon - DroidCon Paris 2014
Google glass droidcon - DroidCon Paris 2014Paris Android User Group
 

Similar a Gérer un parc de téléphones (Droidcon Tunisia 2014) (20)

Alphorm.com Formation Windev Mobile 19, Android
Alphorm.com Formation Windev Mobile 19, AndroidAlphorm.com Formation Windev Mobile 19, Android
Alphorm.com Formation Windev Mobile 19, Android
 
Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4
 
Cours cordova & REST
Cours cordova & RESTCours cordova & REST
Cours cordova & REST
 
Tech conf1 développement_natif_applications_mobiles
Tech conf1 développement_natif_applications_mobilesTech conf1 développement_natif_applications_mobiles
Tech conf1 développement_natif_applications_mobiles
 
La gestion des périphériques modernes avec System Center 2012 R2 Configuratio...
La gestion des périphériques modernes avec System Center 2012 R2 Configuratio...La gestion des périphériques modernes avec System Center 2012 R2 Configuratio...
La gestion des périphériques modernes avec System Center 2012 R2 Configuratio...
 
La nouvelle donne du mobile pour les devices professionnels mobility for bu...
La nouvelle donne du mobile pour les devices professionnels   mobility for bu...La nouvelle donne du mobile pour les devices professionnels   mobility for bu...
La nouvelle donne du mobile pour les devices professionnels mobility for bu...
 
Construire une application mobile avec un CMS
Construire une application mobile avec un CMSConstruire une application mobile avec un CMS
Construire une application mobile avec un CMS
 
Parlons App Economie : du dev à l'usage
Parlons App Economie : du dev à l'usageParlons App Economie : du dev à l'usage
Parlons App Economie : du dev à l'usage
 
Apache Cordova 3.3 de zéro
Apache Cordova 3.3 de zéroApache Cordova 3.3 de zéro
Apache Cordova 3.3 de zéro
 
Formation mobile-cross-platform
Formation mobile-cross-platformFormation mobile-cross-platform
Formation mobile-cross-platform
 
chapitre-1-introduction-plateforme-android (2).pdf
chapitre-1-introduction-plateforme-android (2).pdfchapitre-1-introduction-plateforme-android (2).pdf
chapitre-1-introduction-plateforme-android (2).pdf
 
Les solutions mobiles (potentiel et enjeux)
Les solutions mobiles (potentiel et enjeux)Les solutions mobiles (potentiel et enjeux)
Les solutions mobiles (potentiel et enjeux)
 
Transitions et Animations – Donnez une nouvelle dimension à vos applications ...
Transitions et Animations – Donnez une nouvelle dimension à vos applications ...Transitions et Animations – Donnez une nouvelle dimension à vos applications ...
Transitions et Animations – Donnez une nouvelle dimension à vos applications ...
 
Chapitre 1-introduction-plateforme-android
Chapitre 1-introduction-plateforme-androidChapitre 1-introduction-plateforme-android
Chapitre 1-introduction-plateforme-android
 
Xamarin + mvvm cross
Xamarin + mvvm crossXamarin + mvvm cross
Xamarin + mvvm cross
 
Cellenza microservices - tour d'horizon - v0.1
Cellenza   microservices - tour d'horizon - v0.1Cellenza   microservices - tour d'horizon - v0.1
Cellenza microservices - tour d'horizon - v0.1
 
Xamarin.Forms [french]
Xamarin.Forms [french]Xamarin.Forms [french]
Xamarin.Forms [french]
 
Rapport app mobile ionic3 my gallery
Rapport app mobile ionic3 my galleryRapport app mobile ionic3 my gallery
Rapport app mobile ionic3 my gallery
 
10 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 810 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 8
 
Google glass droidcon - DroidCon Paris 2014
Google glass droidcon - DroidCon Paris 2014Google glass droidcon - DroidCon Paris 2014
Google glass droidcon - DroidCon Paris 2014
 

Gérer un parc de téléphones (Droidcon Tunisia 2014)

  • 1. 01 SHOWCASE GERER UN PARC DE TELEPHONES return xp++; Pierre-Olivier Dybman Edouard Marquez ! ! +PierreOlivierDybman (aka flappy beard) +EdouardMarquez (aka g123k)
  • 2. 02 SHOWCASE GERER UN PARC DE TELEPHONES QUI SOMMES NOUS ? Mais qui est Sidereo ? Que faisons-nous ? LES COMPOSANTS d’une solution mobile NOTRE CLIENT COMMENT MODIFIER Android pour ces besoins ? PRINCIPALES DIFFICULTES Et nos conclusions !
  • 3. 03 QUI SOMMES NOUS ? Besoin d'une stratégie mobile ? 
 Attention à la marche ! 
 Sidereo vous aidera à concevoir, développer et 
 mettre en marché votre solution mobile. Nos sujets Nos compétences Applicatif métier mobile Étude, conseil et analyse Gestion de parc Gestion de projet Gestion applicative Développement et recueil des retours Objets connectés OS embarqués utilisateur Déploiement Mise en marché
  • 6. 06 LES COMPOSANTS App. Signature Mobile Application Management (MAM) Mobile Device Management (MDM) FrameWork Android Dalvik Virtual Machine (ou Android RunTime) Librairies natives et noyau GSM WiFi Sécurité App. Système Configuration App. Utilisateur Authentification D’UNE SOLUTION MOBILE
  • 7. 06 LES COMPOSANTS App. Signature Mobile Application Management (MAM) Mobile Device Management (MDM) FrameWork Android Dalvik Virtual Machine (ou Android RunTime) Librairies natives et noyau GSM WiFi Sécurité App. Système Configuration App. Utilisateur Authentification D’UNE SOLUTION MOBILE
  • 8. 06 LES COMPOSANTS App. Signature Mobile Application Management (MAM) Mobile Device Management (MDM) FrameWork Android Dalvik Virtual Machine (ou Android RunTime) Librairies natives et noyau GSM WiFi Sécurité App. Système Configuration App. Utilisateur Authentification D’UNE SOLUTION MOBILE
  • 9. 06 LES COMPOSANTS App. Signature Mobile Application Management (MAM) Mobile Device Management (MDM) FrameWork Android Dalvik Virtual Machine (ou Android RunTime) Librairies natives et noyau GSM WiFi Sécurité App. Système Configuration App. Utilisateur Authentification D’UNE SOLUTION MOBILE
  • 10. 06 LES COMPOSANTS App. Signature Mobile Application Management (MAM) Mobile Device Management (MDM) FrameWork Android Dalvik Virtual Machine (ou Android RunTime) Librairies natives et noyau GSM WiFi Sécurité App. Système Configuration App. Utilisateur Authentification D’UNE SOLUTION MOBILE
  • 11. ETUDE DE CAS 07 • Location de terminaux mobiles à court terme • Calcul de la consommation voix et data • Pas de SMS • Localisation des terminaux, gestion des dégâts, etc. • Environnement contraint pour l’utilisateur • Embarquer des applications
  • 12. 08 ETUDE DE CAS LES COMPOSANTS D’UNE App. Signature Mobile Application Management (MAM) Mobile Device Management (MDM) FrameWork Android Dalvik Virtual Machine (ou Android RunTime) Librairies natives et noyau GSM WiFi Sécurité App. Système Configuration App. Utilisateur Authentification SOLUTION MOBILE
  • 13. 09 COMMENT MODIFIER ANDROID ? INTRODUCTION : LE SERVEUR - Base utilisateurs - Tarifs & Consommation Smartphone en location - Paiement - Gestion des dommages - Applications - Contacts - Numéros bloqués - Push Serveur
  • 14. COMMENT MODIFIER ANDROID ? DIFFÉRENTS TYPES D’APPLICATION Application utilisateur :
 ! - Utilisation standard du framework Android - Peut remplacer des briques de bases telles que le launcher, le composer, le clavier 10
  • 15. COMMENT MODIFIER ANDROID ? DIFFÉRENTS TYPES D’APPLICATION Application utilisateur :
 ! - Utilisation standard du framework Android - Peut remplacer des briques de bases telles que le launcher, le composer, le clavier Application système : 
 ! - Peut utiliser certaines permissions particulières (reboot, installation silencieuse d’application, …) - Non désinstallable 10
  • 16. 10 COMMENT MODIFIER ANDROID ? DIFFÉRENTS TYPES D’APPLICATION Application utilisateur :
 ! - Utilisation standard du framework Android - Peut remplacer des briques de bases telles que le launcher, le composer, le clavier Application système : 
 ! - Peut utiliser certaines permissions particulières (reboot, installation silencieuse d’application, …) - Non désinstallable Application signature :
 ! - Non désactivable par l’utilisateur
  • 17. COMMENT MODIFIER ANDROID ? DIFFÉRENTS TYPES D’APPLICATION 10
  • 18. COMMENT MODIFIER ANDROID ? PRÉEMBARQUER DES APPLICATIONS • Avec le code source via un Makefile Android classique (Android.mk) : ! LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) ! LOCAL_SRC_FILES := $(call all-java-files-under, src) ! LOCAL_PACKAGE_NAME := CityGuide LOCAL_CERTIFICATE := platform ! include $(BUILD_PACKAGE) ! ! • Au format APK (dont on n’a pas le code source) : ! PRODUCT_COPY_FILES += somewhere/ToiletsInParis.apk:system/app/ToiletsInParis.apk (< 4.4) somewhere/ToiletsInParis.apk:system/priv-app/ToiletsInParis.apk (>= 4.4) 11
  • 19. COMMENT MODIFIER ANDROID ? PRÉEMBARQUER DES APPLICATIONS • Avec le code source via un Makefile Android classique (Android.mk) : ! LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) ! LOCAL_SRC_FILES := $(call all-java-files-under, src) ! LOCAL_PACKAGE_NAME := CityGuide LOCAL_CERTIFICATE := platform ! include $(BUILD_PACKAGE) ! ! • Au format APK (dont on n’a pas le code source) : ! PRODUCT_COPY_FILES += somewhere/ToiletsInParis.apk:system/app/ToiletsInParis.apk (< 4.4) somewhere/ToiletsInParis.apk:system/priv-app/ToiletsInParis.apk (>= 4.4) 11
  • 20. COMMENT MODIFIER ANDROID ? Application “Découverte et paiement” : • Impassable sans paiement • Aucune fonctionnalité du téléphone accessible • Lancée à chaque démarrage tant que le paiement n’est pas fait 12
  • 21. COMMENT MODIFIER 13 ANDROID ? DÉVELOPPER UNE APPLICATION DE DÉMARRAGE BLOQUANTE • C’est simple ! • Rajouter sur une Activity de l’AndroidManifest.xml : <intent-filter> <action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.DEVICE_INITIALIZATION_WIZARD"/> <category android:name="android.intent.category.HOME"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter>
  • 22. COMMENT MODIFIER 14 ANDROID ? DÉVELOPPER UNE APPLICATION DE DÉMARRAGE BLOQUANTE • Mais il faut penser à désactiver l’application : PackageManager packageManager = context.getPackageManager(); ! packageManager.setComponentEnabledSetting( new ComponentName(“com.helloworld.app”, HelloWorldActivity.class), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
  • 23. COMMENT MODIFIER 15 ANDROID ? DESCENTE D’APPLICATION SILENCIEUSE • Pour provoquer l’installation d’une application sans demande de permission, il faut être système public final static String PM_UPDATE = "pm install -r"; ! public static String executeCommand(String command, String param) { BufferedReader in = null; try { Process process = Runtime.getRuntime().exec(String.format("%s %s", command, param)); } […]
  • 24. COMMENT MODIFIER ANDROID ? MODIFIER LES APNS • Il ne faut pas modifier le fichier dans le framework, mais en créer un autre. ! • Chez CyanogenMod, il est situé dans vendor/cm/ prebuild/common/etc : <apns version="xx"> <apn carrier="xxx" mcc="xxx" mnc="xxx" apn="xxx" user="xxx" password="xx" type=“xxx" … /> </apns> 16
  • 25. COMMENT MODIFIER ANDROID ? Application “Rendu du téléphone” : • Authentification distributeur • Formulaire de vérification du téléphone à remplir par le distributeur • Reset complet du téléphone • Redémarrage avec optimisation des applications 17
  • 27. COMMENT MODIFIER ANDROID ? COMMENT FAIRE UN RESET ? • Il faut demander la permission système android.permission.MASTER_CLEAR 19
  • 28. COMMENT MODIFIER ANDROID ? COMMENT FAIRE UN RESET ? • Il faut demander la permission système android.permission.MASTER_CLEAR ! ! • Et appeler cet Intent : sendBroadcast( new Intent(“android.intent.action.MASTER_CLEAR")); 19
  • 29. COMMENT MODIFIER ANDROID ? GÉRER LES COMMUNICATIONS • SMS en modifiant le framework ! • Appels : plusieurs choix – Directement dans le framework – En interceptant l’Intent dans une application ! • Internet via des règles iptables 20
  • 30. COMMENT MODIFIER 21 ANDROID ? COUPER LES SMS • Les applications tierces utilisent le SmsManager pour envoyer un message, qui lui même utilise le IccSmsInterfaceManager. public void sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent) { […] ISms iccISms = ISms.Stub.asInterface(ServiceManager.getService("isms")); if (iccISms != null) { iccISms.sendText(ActivityThread.currentPackageName(), destinationAddress, scAddress, text, sentIntent, deliveryIntent); } […]
  • 31. COMMENT MODIFIER ANDROID ? COUPER LES SMS • On note plus particulièrement ces méthodes : ! • sendData(…) • sendText(…) • sendTextWithPriority(…) • … 22
  • 32. COMMENT MODIFIER 23 ANDROID ? COUPER LES SMS public void sendData(String destAddr, String scAddr, int destPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) { ! ! ! } mPhone.getContext().enforceCallingPermission("android.permission.SEND_SMS", "Sending SMS message”); if (Rlog.isLoggable("SMS", Log.VERBOSE)) { log("sendData: destAddr=" + destAddr + " scAddr=" + scAddr + " destPort=" + destPort + " data='"+ HexDump.toHexString(data) + "' sentIntent=" + sentIntent + " deliveryIntent=" + deliveryIntent) } mDispatcher.sendData(destAddr, scAddr, destPort, data, sentIntent, deliveryIntent);
  • 33. COMMENT MODIFIER 23 ANDROID ? COUPER LES SMS public void sendData(String destAddr, String scAddr, int destPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) { ! ! ! } mPhone.getContext().enforceCallingPermission("android.permission.SEND_SMS", "Sending SMS message”); if (Rlog.isLoggable("SMS", Log.VERBOSE)) { log("sendData: destAddr=" + destAddr + " scAddr=" + scAddr + " destPort=" + destPort + " data='"+ HexDump.toHexString(data) + "' sentIntent=" + sentIntent + " deliveryIntent=" + deliveryIntent) } mDispatcher.sendData(destAddr, scAddr, destPort, data, sentIntent, deliveryIntent);
  • 34. COMMENT MODIFIER 23 ANDROID ? COUPER LES SMS public void sendData(String destAddr, String scAddr, int destPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) { ! ! ! } mPhone.getContext().enforceCallingPermission("android.permission.SEND_SMS", "Sending SMS message”); if (Rlog.isLoggable("SMS", Log.VERBOSE)) { log("sendData: destAddr=" + destAddr + " scAddr=" + scAddr + " destPort=" + destPort + " data='"+ HexDump.toHexString(data) + "' sentIntent=" + sentIntent + " deliveryIntent=" + deliveryIntent) } if (!blockSms()) { mDispatcher.sendData(destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); }
  • 35. COMMENT MODIFIER ANDROID ? COUPER LES APPELS • Application interceptant l’intent ! <intent-filter> <action android:name="android.intent.action.ANSWER"/> <action android:name="android.intent.action.PHONE_STATE"/> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> </intent-filter> ! ! • Mais ne la rendant pas au système setResultData(null); ! ! • Inconvénient : priorité d’interception • Solution : modifier le framework pour changer l’intent levée par un appel 24
  • 36. COMMENT MODIFIER ANDROID ? COUPER LES APPELS • Application interceptant l’intent ! <intent-filter priority=“xx”> <action android:name="android.intent.action.ANSWER"/> <action android:name="android.intent.action.PHONE_STATE"/> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> </intent-filter> ! ! • Mais ne la rendant pas au système setResultData(null); ! ! • Inconvénient : priorité d’interception • Solution : modifier le framework pour changer l’intent levée par un appel 24
  • 37. COMMENT MODIFIER ANDROID ? FACTURER LES APPELS • On enregistre un BroadcastReceiver pour qu’il reçoive les événements relatifs aux appels : ! <intent-filter android:priority=“0"> <action android:name="android.intent.action.NEW_OUTGOING_CALL"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> ! • Un appel suit forcément cette séquence, sinon il n’a pas abouti/l’utilisateur l’a annulé avant : • Action de l’Intent vaut Intent.ACTION_NEW_OUTGOING_CALL • Puis en fonction du CallState du TelephonyManager • TelephonyManager.CALL_STATE_OFFHOOK • TelephonyManager.CALL_STATE_IDLE 25
  • 38. COMMENT MODIFIER ANDROID ? COUPER INTERNET • Règles iptables ! • Problème : on filtre par IP mais ici la gestion du Push pose un problème : ! – Soit on coupe tout, mais on ne reçoit plus de communication du SI – Soit on whitelist les serveurs de GCM mais dans ce cas, on reçoit tous les pushs, pas juste les notres • Solution : filtrer par application 26
  • 39. COMMENT MODIFIER ANDROID ? COUPER INTERNET Maps Uid : 1 GoogleServices Framework Uid : 2 TrafficManager Uid : 3 Paris City Guide Uid : 4 27
  • 40. COMMENT MODIFIER ANDROID ? COUPER INTERNET Maps Uid : 1 GoogleServices Framework Uid : 2 TrafficManager Uid : 3 Paris City Guide Uid : 4 27
  • 41. COMMENT MODIFIER 28 ANDROID ? COUPER INTERNET • 1) On initialise iptables ! iptables --flush iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT DROP -A : ajouter une règle en fin de liste -P : indiquer une policy -j : indiquer une décision -m : règle/correspondance --sport : port source --dport : port de destination
  • 42. 28 COMMENT MODIFIER ANDROID ? COUPER INTERNET -A : ajouter une règle en fin de liste -P : indiquer une policy -j : indiquer une décision -m : règle/correspondance --sport : port source --dport : port de destination • 2) On crée des meta-interfaces ! iptables -N mtm ! iptables -N mtm-wifi iptables -N mtm-3g
  • 43. 28 COMMENT MODIFIER ANDROID ? COUPER INTERNET -A : ajouter une règle en fin de liste -P : indiquer une policy -j : indiquer une décision -m : règle/correspondance --sport : port source --dport : port de destination • 3) On associe ces metas-interfaces aux interfaces réseau ! iptables -A mtm -o wlan+ -j mtm-wifi iptables -A mtm -o tiwlan+ -j mtm-wifi… ! iptables -A mtm -o rmnet+ -j mtm-3g…
  • 44. 28 COMMENT MODIFIER ANDROID ? COUPER INTERNET -A : ajouter une règle en fin de liste -P : indiquer une policy -j : indiquer une décision -m : règle/correspondance --sport : port source --dport : port de destination • 4) On définit les exceptions ! iptables -A mtm-wifi -m owner --uid-owner uid -j RETURN iptables -A mtm-3g -m owner --uid-owner uid -j RETURN
  • 45. COMMENT MODIFIER 28 ANDROID ? COUPER INTERNET • 5) On termine par ! iptables -P OUTPUT ACCEPT -A : ajouter une règle en fin de liste -P : indiquer une policy -j : indiquer une décision -m : règle/correspondance --sport : port source --dport : port de destination
  • 46. COMMENT MODIFIER ANDROID ? PRINCIPALES DIFFICULTÉS • Choisir une bonne base (AOSP ? CyanogenMod ?) • Modifier le moins de choses possibles • Gérer les sources d’Android • Faible documentation • Temps pour tester • Samsung ;) 29
  • 47. 30 SHOWCASE GERER UN PARC DE TELEPHONES QR & C’EST À VOTRE TOUR !