Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
Le SDK d’application Microsoft Intune pour Android vous permet d’incorporer des stratégies de protection des applications Intune dans votre application Android Java/Kotlin native. Ces stratégies sont également appelées stratégies GAM. Une application gérée par Intune est une application intégrée au Kit de développement logiciel (SDK) Intune App. Lorsque Intune gère activement l’application, Intune administrateurs peuvent facilement déployer des stratégies de protection des applications sur votre application gérée par Intune.
Remarque
Ce guide est divisé en plusieurs étapes distinctes. Commencez par passer en revue l’étape 1 : Planifiez l’intégration.
Étape 3 : Prise en main avec GAM
Objectifs de la scène
- Téléchargez le Kit de développement logiciel (SDK) d’application Intune.
- Découvrez quels fichiers sont inclus dans le SDK d’application Intune.
- Référencez le Kit de développement logiciel (SDK) de l’application Intune dans votre application.
- Configurez le plug-in de génération Gradle de l’application Intune ou utilisez l’outil de génération de ligne de commande.
- Vérifiez que le SDK d’application Intune est correctement inclus dans votre build.
Arrière-plan
Maintenant que votre application a intégré MSAL, il est temps de télécharger le Kit de développement logiciel (SDK) d’application Intune et de l’inclure dans le processus de génération de votre application.
Une grande partie de l’intégration du kit de développement logiciel (SDK) de l’application Intune remplace les classes et les appels de méthode Android standard par des versions Intune de ces classes et appels de méthode. Le Kit de développement logiciel (SDK) inclut des outils de génération qui effectuent automatiquement la plupart de ces remplacements pour vous. Si vous souhaitez en savoir plus sur cette logique de remplacement, consultez la section sur les remplacements de classes et de méthodes de l’annexe.
Télécharger le Kit de développement logiciel (SDK) d’application Intune
Pour télécharger le Kit de développement logiciel (SDK), consultez Télécharger les fichiers du Kit de développement logiciel (SDK).
Que contient le Kit de développement logiciel (SDK) ?
Le SDK de l’application Intune se compose des fichiers suivants :
- Microsoft. Intune. MAM. SDK.aar : composants du Kit de développement logiciel (SDK), à l’exception des fichiers JAR de la bibliothèque de support.
- com.microsoft.intune.mam.build.jar : Un plug-in Gradle, qui facilite l’intégration du Kit de développement logiciel (SDK).
- CHANGELOG.md : fournit un enregistrement des modifications apportées dans chaque version du Kit de développement logiciel (SDK).
-
Microsoft. Intune. MAM. SDK. DownlevelStubs.aar : ce Archive Android (AAR) contient des stubs pour les classes système Android qui ne sont présentes que sur les appareils plus récents, mais qui sont référencées par des méthodes dans MAMActivity. Les appareils plus récents ignorent ces classes de stub. Cet AAR est nécessaire uniquement si votre application effectue une réflexion sur les classes dérivées de
MAMActivityet que la plupart des applications n’ont pas besoin de l’inclure. L’AAR contient des règles ProGuard pour exclure toutes ses classes.
Référencement des bibliothèques d’applications Intune
Le SDK de l’application Intune est une bibliothèque Android standard sans dépendances externes. Microsoft. Intune. MAM. SDK.aar contient les interfaces nécessaires à l’activation des stratégies de protection des applications. Il contient également le code nécessaire pour interagir avec l’application Microsoft Intune Portail d'entreprise.
Android Studio
Microsoft. Intune. MAM. SDK.aar doit être spécifié comme référence de bibliothèque Android. Pour ajouter cette dépendance à votre build, suivez Ajouter votre AAR ou JAR en tant que dépendance à partir de la documentation Android.
Visual Studio
Le package Intune App SDK for .NET MAUI - Android NuGet doit être ajouté en tant que dépendance.
Suivez le processus d’installation et de gestion des packages dans Visual Studio à l’aide du gestionnaire de package NuGet.
Microsoft.Intune. MAM. SDK.aar est lié à la création de références C# limitées à l’espace Microsoft.Intune.Mam de noms.
ProGuard
Votre application utilise peut-être déjà ProGuard (ou tout autre mécanisme de réduction/obfuscation) en tant qu’étape de génération. Le kit de développement logiciel (SDK) de l’application Intune comporte des règles de configuration ProGuard qui doivent être incluses dans cette étape de génération. Y compris le fichier . AAR dans votre build, comme décrit précédemment, intègre automatiquement la configuration du SDK dans l’étape ProGuard, de sorte que les fichiers de classe nécessaires sont conservés. Si vous incluez le fichier . AAR, aucun autre changement n’est nécessaire.
La bibliothèque d’authentification Microsoft (MSAL) est fournie avec sa propre configuration ProGuard. Si votre application intègre MSAL, reportez-vous à la documentation MSAL pour plus de détails.
Outils de génération
Le Kit de développement logiciel (SDK) fournit des outils de génération (un plug-in pour les builds Gradle, des cibles pour les builds .NET et un outil en ligne de commande) qui effectuent automatiquement des remplacements MAM. Ces outils transforment les fichiers de classe générés par la compilation Java ; ils ne modifient pas le code source original. Vous devez utiliser le plug-in Gradle, le package NuGet .NET ou l’outil en ligne de commande.
Les outils de génération seuls ne suffisent pas à intégrer complètement votre application. Les outils effectuent uniquement des remplacements de classe et de méthode. Ils n’effectuent pas d’intégrations SDK plus complexes telles que Multi-Identity, Inscription à la stratégie de protection des applications, Stratégie de limitation du transfert de données entre les applications et les emplacements de stockage d’appareil ou cloud, ou Configuration MSAL. Vous devez terminer ces intégrations avant que votre application soit entièrement compatible avec Intune. Examinez attentivement le reste de cette documentation pour rechercher les points d’intégration pertinents pour votre application.
Débogage
Les outils de construction effectuent des remplacements après la compilation. Ces remplacements modifient les noms de certaines méthodes. Par conséquent, les points d’arrêt de débogage définis sur les noms de méthode peuvent être affectés. Ils peuvent ne pas s’arrêter comme prévu. Les points d’arrêt du numéro de ligne ne sont pas affectés.
GAM dans la pile
L’intégration du Kit de développement logiciel (SDK) de l’application Intune repose largement sur les remplacements de classes et de méthodes. En raison de cette dépendance, vous voyez mam partout dans vos traces de pile.
Lorsque votre application n’a pas de compte ciblé par des stratégies de protection des applications, tout ce code MAM reste dormant. Par exemple, MAMActivity fonctionne de la même manière et ActivityonMAMCreate fonctionne de la même manière que onCreate.
Chaque fois que vous voyez mam dans une pile, commencez par vérifier la case activée :
- Le compte est-il ciblé par des stratégies de protection des applications ?
- Le Portail d’entreprise Intune est-il installé ?
À moins que la réponse aux deux questions ne soit « oui », le code MAM agit comme un simple transfert.
De quel outil ai-je besoin ?
Si vous générez votre application avec Gradle, consultez Intégration avec le plug-in de génération Gradle
Si vous générez votre application avec .NET MAUI, consultez Intégration avec les cibles .NET MAUI.
Si vous ne générez votre application avec aucun des outils précédents, consultez Intégration avec l’outil en ligne de commande.
Intégration avec le plug-in de build Gradle
Le plug-in du SDK de l’application Intune est distribué dans le cadre du SDK sous le nom de GradlePlugin/com.microsoft.intune.mam.build.jar.
Pour que le plugin soit reconnu par Gradle, il doit être ajouté au chemin d’accès buildscript aux classes.
Le plugin dépend de Javassist, qui doit également être ajouté. Pour plus d’informations sur la dépendance Javassist, consultez Dépendances.
Pour les ajouter au chemin d’accès aux classes, ajoutez ce qui suit à votre racine build.gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "org.javassist:javassist:3.29.2-GA"
classpath files("$PATH_TO_MAM_SDK/GradlePlugin/com.microsoft.intune.mam.build.jar")
}
}
Ensuite, pour appliquer le plug-in, ajoutez ce qui suit au build.gradle fichier pour votre application et les modules de fonctionnalité dynamique :
apply plugin: 'com.microsoft.intune.mam'
Par défaut, le plug-in fonctionne sur project des dépendances et des bibliothèques externes.
La compilation des tests n’est pas affectée.
Remarque
À partir du SDK d’application Intune 8.0, il n’est plus possible de traiter les bibliothèques de manière sélective. Toutes les bibliothèques sont traitées.
Dépendances
Le plug-in Gradle a une dépendance sur Javassist, qui doit être mise à la disposition de la résolution des dépendances de Gradle. Javassist est utilisé uniquement au moment de la construction lors de l’exécution du plug-in et aucun code Javassist n’est ajouté à votre application.
| SDK GAM | Javassist Version |
|---|---|
| ≥ 10.0.0 | 3.29.2-GA |
| ≥ 7.0.0 | 3.27.0-GA |
| < 7.0.0 | 3.22.0-GA |
Remarque
Les versions de Javassist peuvent ne pas être rétrocompatibles. En règle générale, vous devez utiliser la version exacte attendue par le SDK d’application Intune.
Matrice de compatibilité
Le plug-in de build du Kit de développement logiciel (SDK) MAM s’aligne sur les exigences de build Android et les tables de compatibilité. Les versions non répertoriées ici peuvent fonctionner ou non.
| SDK GAM | Android Version | Gradle | Plug-in Android Gradle | Kotlin Version | Java Version |
|---|---|---|---|---|---|
| 10.0.0 | 14 | 8.2 | 8.2.2 | 1.9.25 | 17 |
| 11.0.0 | 15 | 8.7 | 8.6.1 | 2.0.21 | 17 |
| 12.0.0 | 16 | 8.11.1 | 8.9.1 | 2.1.21 | 17 |
Exclusions
D’autres configurations peuvent être fournies pour exclure des réécritures des composants spécifiques de votre application. Les exclusions sont principalement utiles pour les composants qui ne sont pas pertinents pour la gestion des applications (c’est-à-dire qui ne gèrent pas ou n’affichent pas de données d’entreprise).
Les exclusions peuvent être configurées pour différentes étendues :
-
excludeProjectspermet d’exclure une liste de projets Gradle. Ces exclusions sont utiles pour les projets qui n’interagissent pas avec les bibliothèques Android ou les API système. Elles sont également utiles pour les projets qui ne traitent pas de données d’entreprise. Par exemple, un projet qui contient exclusivement du code natif pour effectuer des opérations réseau de bas niveau peut être un bon candidat. Si un projet s’interface largement avec des bibliothèques Android ou des API système, évitez ces exclusions. -
excludeClassesPermet d’exclure une liste de classes. Ces exclusions sont utiles pour les classes qui ne gèrent pas ou ne présentent pas de données d’entreprise. Par exemple, les écrans de démarrage et les intégrationsActivitysont de bons candidats. Une classe ne peut pas être exclue si l’une de ses superclasses est traitée. -
excludeVariantsPermet d’exclure des variantes de projet. Ces exclusions peuvent faire référence soit à un nom de variante complet, soit à une seule saveur. Elles sont particulièrement utiles si vous souhaitez créer une version non MAM de votre application. Par exemple, si votre application a des typesdebugde build etreleaseavec les saveurs {noMAM,MAM} et {mock,production}, vous pouvez spécifier :-
noMAMpour exclure toutes les variantes avec le type noMAM ou -
noMAMMockDebugpour exclure uniquement cette variante exacte.
-
Attention
Les exclusions ne doivent pas être prises à la légère. Une application incorrecte des exclusions peut entraîner de graves fuites de données dans votre application. Validez toujours l’effet de toute exclusion que vous appliquez.
Exemple de build.gradle partiel avec exclusions
apply plugin: 'com.microsoft.intune.mam'
dependencies {
implementation project(':product:FooLib')
implementation project(':product:foo-project')
implementation "com.microsoft.bar:baz:1.0.0"
// Include the MAM SDK
implementation files("$PATH_TO_MAM_SDK/Microsoft.Intune.MAM.SDK.aar")
}
intunemam {
excludeProjects = [':product:FooLib']
excludeClasses = ['com.contoso.SplashActivity']
excludeVariants = ['noMAM']
}
Cela aurait les effets suivants :
-
:product:FooLibn’est pas réécrit parce qu’il est inclus dansexcludeProjects -
:product:foo-projectest réécrite, à l’exception decom.contoso.SplashActivity, qui est ignoré car il est dansexcludeClasses -
com.microsoft.bar:baz.1.0.0est réécrite, car toutes les bibliothèques externes sont incluses pour le traitement. - Les variantes avec la
noMAMsaveur ne sont pas réécrites.
Reporting
Le plugin de construction peut générer un rapport html des modifications qu’il apporte.
Pour demander la génération de ce rapport, spécifiez-le report = true dans le bloc de intunemam configuration.
S’il est généré, le rapport est écrit outputs/logs dans le répertoire de build.
intunemam {
report = true
}
Vérification
Le plug-in de génération peut exécuter d’autres vérifications pour rechercher d’éventuelles erreurs dans le traitement des classes. Ces vérifications permettent de vous protéger contre les défaillances d’exécution potentielles induites par le plug-in.
Pour demander que la vérification soit effectuée dans votre build, spécifiez verify = true dans le bloc de intunemam configuration.
Cela peut ajouter plusieurs secondes au temps nécessaire à la tâche du module.
intunemam {
verify = true
}
Généralement, un échec de vérification représente un bogue dans le plug-in de génération. Pour obtenir de l’aide en cas d’échec, transmettez le problème au support Microsoft. Si vous n’avez pas de contrat de support Microsoft, ouvrez un problème GitHub.
Builds incrémentielles
Pour activer la prise en charge de la génération incrémentielle, spécifiez incremental = true dans le bloc de intunemam configuration.
Cette fonctionnalité augmente les performances de génération en traitant uniquement les fichiers d’entrée qui changent.
La configuration par défaut est incrementalfalse.
intunemam {
incremental = true
}
Configuration du module de fonctionnalité dynamique
Les modules de fonctionnalités dynamiques sont générés séparément du projet d’application. Par conséquent, les modules de fonctionnalités dynamiques doivent également appliquer le plug-in de construction Gradle.
Le plug-in Gradle présente des limites techniques dans les API qu’il utilise. En raison de ces limitations, les classes d’application doivent être retraitées lors de la transformation des classes de modules de fonctionnalités dynamiques. Pour vous assurer que ce retraitement peut être effectué, configurez tous les modules de fonctionnalités avec les mêmes paramètres que l’application.
Par exemple, si une application exclut une classe, le module de fonctionnalité dynamique doit également exclure cette classe.
Intégration aux cibles MAUI .NET
Les cibles du SDK d’application Intune sont distribuées dans le cadre du SDK en tant que Microsoft.Intune. Maui.Essentials.android.targets.
Les cibles sont automatiquement importées dans votre application au moment de la compilation une fois le package Intune App SDK for .NET MAUI - Android NuGet ajouté.
Intégration avec l’outil de génération en ligne de commande
L’outil de génération en ligne de commande est disponible dans le BuildTool dossier du dépôt du kit de développement logiciel (SDK).
Il remplit la même fonction que le plugin Gradle et les cibles .NET détaillées ci-dessus. Toutefois, l’outil en ligne de commande peut être intégré à des systèmes de génération personnalisés.
Étant donné que l’outil est plus générique, il est plus complexe à invoquer. Utilisez le plug-in Gradle ou les cibles .NET dans la mesure du possible.
Utilisation de l’outil Command-Line
L’outil en ligne de commande peut être invoqué à l’aide des scripts d’assistance fournis situés dans le BuildTool\bin répertoire.
L’outil attend les paramètres suivants.
| Paramètre | Obligatoire | Description |
|---|---|---|
--input |
Oui | Liste délimitée par des points-virgules de fichiers JAR et de répertoires de fichiers de classe à modifier. Incluez tous les fichiers JAR et répertoires que vous avez l’intention de réécrire. |
--output |
Oui | Liste délimitée par des points-virgules de fichiers et de répertoires JAR pour stocker les classes modifiées. Fournissez une entrée de sortie par entrée d’entrée, répertoriée dans le même ordre. |
--classpath |
Oui | Chemin d’accès de classe de build. Il peut contenir à la fois des fichiers JAR et des répertoires de classe. |
--processed |
Non | Liste délimitée par des points-virgules de fichiers JAR et de répertoires contenant des classes qui ont déjà été traitées par un appel précédent de l’outil de génération. |
--excludeClasses |
Non | Une liste délimitée par des points-virgules contenant les noms des classes qui doivent être exclues de la réécriture. |
--report |
Non | Répertoire pour écrire un rapport HTML sur les classes modifiées à. Si cela n’est pas spécifié, aucun rapport n’est écrit. |
L’option facultative --processed est utilisée pour activer les builds incrémentielles.
L’ensemble de fichiers/répertoires répertoriés ici doit être disjoint des listes d’entrée et de chemin d’accès aux classes.
Conseil
Sur les systèmes de type Unix, le point-virgule est un séparateur de commande. Pour éviter que l’interpréteur de commandes ne divise les commandes, assurez-vous d’échapper chaque point-virgule avec '' ou d’envelopper le paramètre complet entre guillemets.
Exemple Command-Line appel d’outil
> BuildTool\bin\BuildTool.bat --input build\product-foo-project;libs\bar.jar --output mam-build\product-foo-project;mam-build\libs\bar.jar --classpath build\zap.jar;libs\Microsoft.Intune.MAM.SDK\classes.jar;%ANDROID_SDK_ROOT%\platforms\android-27\android.jar --excludeClasses com.contoso.SplashActivity
Cela aurait les effets suivants :
- Le
product-foo-projectrépertoire est réécrit enmam-build\product-foo-project -
bar.jarest réécrit enmam-build\libs\bar.jar -
zap.jarn’est pas réécrit, car il est uniquement répertorié dans--classpath - La
com.contoso.SplashActivityclasse n’est pas réécrite, même si elle est dans--input
Avertissement
L’outil de génération ne prend actuellement pas en charge les fichiers aar.
Si votre système de génération n’extrait classes.jar pas déjà lors du traitement des fichiers aar, extrayez-le avant d’appeler l’outil de génération.
Définition de MAMApplication
Si votre application crée une sous-classe de , le plug-in de génération ou l’outil en ligne de android.app.Applicationcommande transforme votre classe d’application.
Si votre application ne sous-classe android.app.Applicationpas , vous devez définir "com.microsoft.intune.mam.client.app.MAMApplication" comme attribut dans la "android:name" balise de <application> votre AndroidManifest.xml.
Recommandations sur Android
- Utilisez les outils de génération du SDK Android les plus récents.
- Supprimez toutes les bibliothèques inutiles et inutilisées (par exemple, android.support.v4).
Après avoir effectué des remplacements automatiques, le SDK d’application Intune conserve toujours le contrat fourni par l’API Android. Toutefois, des conditions d’échec peuvent être déclenchées plus fréquemment suite à l’application de la stratégie. Ces meilleures pratiques Android réduisent le risque d’échec :
- Les fonctions du SDK Android qui peuvent être renvoyées
nullont désormais une plus grande probabilité de renvoyernull. Assurez-vous quenullles vérifications protègent ces appels de fonction. - Les fonctionnalités qui peuvent être vérifiées, telles que
clipboardManager.getPrimaryClipDescription(), doivent être vérifiées via leurs API de remplacement MAM, telles queMAMClipboard.getPrimaryClipDescription(clipboardManager). - Toutes les fonctions dérivées doivent appeler leurs versions de super classe.
- Évitez toute utilisation de l’API de manière ambiguë. Par exemple, l’utilisation
Activity.startActivityForResultsans vérifier provoque unrequestCodecomportement étrange.
Services
L’application de la stratégie peut affecter les interactions du service Android.
Les méthodes qui établissent une connexion de service liée peuvent Context.bindService échouer en raison de l’application de la stratégie sous-jacente dans Service.onBind et peuvent entraîner ou ServiceConnection.onNullBindingServiceConnection.onServiceDisconnected.
L’interaction avec un service lié établi peut générer un SecurityException en raison de l’application de la stratégie dans Binder.onTransact.
Les clients des services liés sont encouragés à vérifier la présence d’exceptions générées par le service à la case activée. Ne laissez pas les exceptions se propager au reste de l’application cliente.
Critères de sortie
Une fois que vous avez configuré le plug-in de génération ou intégré l’outil en ligne de commande dans votre processus de génération, vérifiez qu’il s’exécute correctement :
- Assurez-vous que votre build est compilée et générée correctement.
- Configurez l’indicateur
report, puis ouvrez le document de rapport et confirmez que des remplacements de classe et de méthode ont lieu :- Si vous utilisez le plug-in, suivez les étapes de la section Rapports.
- Si vous utilisez l’outil en ligne de commande, incluez l’indicateur
--report.
- Si vous utilisez le plug-in, configurez l’indicateur
verifyet assurez-vous qu’il ne produit pas d’erreurs. Voir Vérification. - Doublez case activée toutes les exclusions (
excludeProjects,excludeClasses, etexcludeVariants) dans build.gradle. Vérifiez que chaque exclusion est nécessaire et ne concerne pas les données protégées. Historiquement, de nombreuses erreurs de fuite de données se produisent en raison d’exclusions trop agressives. -
Sans le Portail d’entreprise Intune installé, lancez votre application compilée. Connectez-vous avec un utilisateur de Microsoft Entra qui n’est pas ciblé par la stratégie de protection des applications. Vérifiez que l’application fonctionne comme prévu.
- Déconnectez-vous et répétez ce test avec le Portail d’entreprise Intune installé.
FAQ
Mon application intégrait auparavant le SDK sans le plug-in de construction ; comment puis-je utiliser le plug-in de construction ?
Les anciennes versions du SDK d’application Intune n’incluaient aucun moyen automatisé d’effectuer des remplacements de classe et de méthode. Les développeurs devaient effectuer ces remplacements manuellement dans le code source. Si votre application est intégrée de cette façon, vous pouvez appliquer le plug-in de génération ou l’outil de génération en ligne de commande en toute sécurité. Vous n’avez pas besoin de modifier le code source. Votre projet doit toujours répertorier le SDK GAM en tant que dépendance.
Étapes suivantes
Une fois que vous avez rempli tous les critères de sortie, passez à l’étape 4 : Notions de base sur l’intégration de la gestion des applications mobiles.