Intune App SDK för Android – Kom igång med MAM
Med Microsoft Intune App SDK för Android kan du införliva Intune appskyddsprinciper (även kallade APP- eller MAM-principer) i din interna Java/Kotlin Android-app. Ett Intune-hanterat program är ett program som är integrerat med Intune App SDK. Intune administratörer kan enkelt distribuera appskyddsprinciper till din Intune-hanterade app när Intune aktivt hanterar appen.
Obs!
Den här guiden är uppdelad i flera olika steg. Börja med att granska steg 1: Planera integreringen.
Steg 3: Komma igång med MAM
Steg Goals
- Ladda ned Intune App SDK.
- Lär dig vilka filer som ingår i Intune App SDK.
- Referera till Intune App SDK i ditt program.
- Konfigurera Intune App Gradle Build Plugin ELLER använd kommandoradsverktyget.
- Bekräfta att Intune App SDK ingår korrekt i din version.
Bakgrund
Nu när programmet har integrerat MSAL är det dags att ladda ned Intune App SDK och inkludera det i programmets byggprocess.
En stor del av integreringen av Intune App SDK ersätter Android-standardklasser och metodanrop med Intune versioner av dessa klasser och metodanrop. SDK innehåller byggverktyg som automatiskt gör de flesta av dessa ersättningar åt dig. Om du vill veta mer om den här ersättningslogik kan du läsa avsnittet om klass- och metodbyten i tillägget.
Ladda ned Intune App SDK
Information om hur du laddar ned SDK finns i Ladda ned SDK-filerna.
Vad finns i SDK: et?
Intune App SDK består av följande filer:
- Microsoft. Intune. MAM. SDK.aar: SDK-komponenterna, förutom JAR-filerna för supportbiblioteket.
- com.microsoft.intune.mam.build.jar: Ett Gradle-plugin-program som hjälper dig att integrera SDK:t.
- CHANGELOG.md: Innehåller en post med ändringar som gjorts i varje SDK-version.
- THIRDPARTYNOTICES.TXT: Ett attributionsmeddelande som bekräftar tredjeparts- och/eller OSS-kod som kommer att kompileras till din app.
-
Microsoft. Intune. MAM. SDK. DownlevelStubs.aar: Denna AAR innehåller stubs för Android-systemklasser som endast finns på nyare enheter men som refereras av metoder i MAMActivity. Nyare enheter ignorerar dessa stub-klasser. Denna AAR är bara nödvändig om din app utför reflektion över klasser som härleds från
MAMActivity
, och de flesta appar behöver inte inkludera den. AAR innehåller ProGuard-regler för att undanta alla dess klasser.
Referera till Intune appbibliotek
Intune App SDK är ett Android-standardbibliotek utan externa beroenden. Microsoft. Intune. MAM. SDK.aar innehåller både de gränssnitt som krävs för att aktivera appskyddsprinciper och den kod som krävs för att samverka med Microsoft Intune Företagsportal appen.
Android Studio
Microsoft. Intune. MAM. SDK.aar måste anges som en Android-biblioteksreferens. Om du vill lägga till det här beroendet i din version följer du Lägga till din AAR eller JAR som ett beroende från Android-dokumentationen.
Visual Studio
NuGet-paketet Intune App SDK för .NET MAUI – Android måste läggas till som ett beroende.
Följ processen för att installera och hantera paket i Visual Studio med Hjälp av NuGet-pakethanteraren.
Microsoft.Intune. MAM. SDK.aar är bunden till att skapa C#-referenser som är begränsade till Microsoft.Intune.Mam
namnområdet.
ProGuard
Ditt program kan redan använda ProGuard (eller någon annan krympande/fördunkkningsmekanism) som ett byggsteg. Intune App SDK har ProGuard-konfigurationsregler som måste ingå i det byggsteget. Inklusive . AAR i din version, enligt beskrivningen ovan, integrerar automatiskt SDK:ts konfiguration i ProGuard-steget, så att de nödvändiga klassfilerna behålls. Om du har inkluderat . AAR, ingen annan ändring krävs.
Microsoft Authentication Library (MSAL) levereras med en egen ProGuard-konfiguration. Mer information finns i MSAL-dokumentationen om din app integrerar MSAL.
Skapa verktyg
SDK tillhandahåller byggverktyg (ett plugin-program för Gradle-versioner, mål för .NET-versioner och ett kommandoradsverktyg) som utför MAM-ersättningar automatiskt. De här verktygen transformerar klassfilerna som genereras av Java-kompilering. de ändrar inte den ursprungliga källkoden. Du måste använda antingen Gradle-plugin-programmet, .NET NuGet-paketet eller kommandoradsverktyget.
Enbart byggverktyget räcker inte för att helt integrera ditt program. Verktygen utför endast klass- och metodbyten . De utför inte några mer komplexa SDK-integreringar som multiidentitet, registrering för appskyddsprincip, princip för att begränsa dataöverföring mellan appar och enheter eller molnlagringsplatser eller MSAL-konfiguration, som måste slutföras innan din app är helt Intune aktiverad. Granska noggrant resten av den här dokumentationen för integreringspunkter som är relevanta för din app.
Påverkan på felsökning
Byggverktyget utför ersättningar efter kompileringen, vilket ändrar vissa metodnamn. Det innebär att felsökning av brytpunkter som angetts för metodnamn kan påverkas och inte stoppas som förväntat. Radnummer brytpunkter påverkas inte.
MAM i stacken
Eftersom Intune App SDK-integreringen är starkt beroende av klass- och metodbyten börjar du se mam
alla stackspårningar.
När din app inte har med ett konto som är mål för appskyddsprinciper ligger all denna MAM-kod vilande: MAMActivity
fungerar identiskt Activity
med , onMAMCreate
fungerar identiskt onCreate
med osv. När du ser mam
i en stack kontrollerar du först:
- Är kontot mål för appskyddsprinciper?
- Är Intune-företagsportal installerat?
Om inte svaret på båda är "ja" fungerar MAM-koden som enkel genomströmning.
Vilket verktyg behöver jag?
Om du skapar din app med Gradle kan du läsa Integrera med Gradle Build-plugin-programmet
Om du skapar din app med .NET MAUI läser du Integrera med .NET MAUI-målen.
Om du skapar din app med inget av ovanstående kan du läsa Integrera med kommandoradsverktyget.
Integrera med Gradle Build-plugin-programmet
Plugin-programmet Intune App SDK distribueras som en del av SDK:t som GradlePlugin/com.microsoft.intune.mam.build.jar.
För att plugin-programmet ska kunna identifieras av Gradle måste det läggas till i buildscript
klassökvägen.
Plugin-programmet är beroende av Javassist, som också måste läggas till. Mer information om det javassistiska beroendet finns i Beroenden.
Lägg till dessa i klassökvägen genom att lägga till följande i roten 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")
}
}
Om du sedan vill tillämpa plugin-programmet lägger du till följande i build.gradle
filen för din app och dynamiska funktionsmoduler:
apply plugin: 'com.microsoft.intune.mam'
Som standard fungerar plugin-programmet på project
beroenden och externa bibliotek.
Testkompilering påverkas inte.
Obs!
Från och med 8.0-Intune App SDK går det inte längre att bearbeta bibliotek selektivt. Alla bibliotek bearbetas.
Beroenden
Obs!
Du måste använda version 3.6.1 eller senare av Plugin-programmet Android Gradle och version 5.6.4 eller senare av Gradle.
Gradle-plugin-programmet har ett beroende av Javassist, som måste göras tillgängligt för Gradles beroendematchning. Javassist används enbart vid byggtiden när plugin-programmet körs och ingen Javassist-kod läggs till i din app.
Obs!
Javassist-versioner kanske inte är bakåtkompatibla. I allmänhet bör du använda den exakta version som förväntas av Intune App SDK:
- Intune App SDK ≥ 10.0.0 kräver Javassist 3.29.2-GA
- Intune App SDK ≥ 7.0.0 kräver Javassist 3.27.0-GA
- Intune App SDK < 7.0.0 kräver Javassist 3.22.0-GA
När du använder MAM SDK 8.0.0+ måste du dessutom se till att följande anges i Gradle-konfigurationen:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
Undantag
Ytterligare konfigurationer kan tillhandahållas för att undanta specifika komponenter i din app från omskrivningar. Undantag är främst användbara för komponenter som inte är relevanta för MAM (dvs. inte hanterar eller visar företagsdata).
Undantag kan konfigureras för olika omfång:
-
excludeProjects
tillåter exkludering av en lista över Gradle-projekt. Dessa undantag är användbara för projekt som inte samverkar med Android-bibliotek eller system-API:er och/eller inte hanterar företagsdata. Till exempel kan ett projekt som uteslutande innehåller intern kod för att utföra nätverksåtgärder på låg nivå vara en bra kandidat. Om ett projekt har ett brett gränssnitt med Android-bibliotek eller system-API:er bör dessa undantag undvikas. -
excludeClasses
tillåter exkludering av en lista över klasser. Dessa undantag är användbara för klasser som inte hanterar eller presenterar företagsdata. Till exempel är välkomstskärmar och onboardingsActivity
bra kandidater. Observera att en klass inte kan uteslutas om någon av dess superklasser bearbetas. -
excludeVariants
möjliggör exkluderande projektvarianter. Dessa undantag kan referera till antingen ett fullständigt variantnamn eller en enda smak. De är särskilt användbara om du vill skapa en icke-MAM-smak av din app. Om din app till exempel har byggtyperdebug
ochrelease
med smakerna {noMAM
,MAM
} och {mock
,production
} kan du ange följande:-
noMAM
för att utesluta alla varianter med noMAM-smak eller -
noMAMMockDebug
för att endast utesluta den exakta varianten.
-
Försiktighet
Undantag bör inte tas lättvindigt. Felaktig tillämpning av undantag kan leda till allvarliga dataläckor i din app. Verifiera alltid effekten av eventuella undantag som du tillämpar.
Exempel på partiell build.gradle med undantag
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']
}
Detta skulle ha följande effekter:
-
:product:FooLib
skrivs inte om eftersom den ingår iexcludeProjects
-
:product:foo-project
skrivs om, förutomcom.contoso.SplashActivity
, som hoppas över eftersom den finns iexcludeClasses
-
com.microsoft.bar:baz.1.0.0
skrivs om eftersom alla externa bibliotek ingår för bearbetning. - Varianter med smaken
noMAM
skrivs inte om.
Rapportering
Build-plugin-programmet kan generera en HTML-rapport över de ändringar som den gör.
Om du vill begära generering av den här rapporten anger du report = true
i konfigurationsblocket intunemam
.
Om den genereras skrivs rapporten till outputs/logs
i byggkatalogen.
intunemam {
report = true
}
Kontroll
Build-plugin-programmet kan köra ytterligare verifiering för att söka efter möjliga fel i bearbetningsklasser. Dessa kontroller hjälper till att skydda mot potentiella körningsfel som orsakas av plugin-program.
Om du vill begära verifiering utförs i bygget anger du verify = true
i konfigurationsblocket intunemam
.
Detta kan lägga till flera sekunder till den tid det tar för plugin-programmets uppgift.
intunemam {
verify = true
}
I allmänhet representerar ett verifieringsfel en bugg i plugin-programmet för bygget. Om du vill ha hjälp med ett fel eskalerar du problemet med Microsoft-supporten. Om du inte har något Microsoft-supportkontrakt öppnar du ett GitHub-problem.
Inkrementella versioner
Om du vill aktivera stöd för att skapa stegvis anger du incremental = true
i konfigurationsblocket intunemam
.
Den här funktionen ökar byggprestandan genom att endast bearbeta de indatafiler som har ändrats.
Standardkonfigurationen för incremental
är false
.
intunemam {
incremental = true
}
Konfiguration av modul för dynamisk funktion
Dynamiska funktionsmoduler skapas separat från appprojektet. Därför måste dynamiska funktionsmoduler också tillämpa Plugin-programmet för Gradle-kompileringen.
På grund av tekniska begränsningar i DE API:er som används av Gradle-plugin-programmet måste appklasser bearbetas på nytt när du transformerar modulklasser för dynamiska funktioner. För att säkerställa att detta kan göras bör alla funktionsmoduler konfigureras med samma inställningar som den app som den är utformad för.
Om en app till exempel exkluderar en klass bör modulen för dynamiska funktioner även undanta den klassen.
Integrera med .NET MAUI-målen
Intune App SDK-målen distribueras som en del av SDK:t som Microsoft.Intune. Maui. Essentials.android.targets.
Målen importeras automatiskt till ditt program vid kompileringstillfället när Intune App SDK för .NET MAUI – Android NuGet-paketet har lagts till.
Integrera med kommandoradsverktyget
Kommandoradsverktyget är tillgängligt i BuildTool
mappen för SDK-släppet.
Den utför samma funktion som Gradle-plugin-programmet/.NET-målen som beskrivs ovan, men kan integreras i anpassade byggsystem.
Eftersom det är mer allmänt är det mer komplext att anropa, så Gradle-plugin-programmet/.NET-målen bör användas när det är möjligt.
Använda Command-Line-verktyget
Kommandoradsverktyget kan anropas med hjälp av de hjälpskript som finns i BuildTool\bin
katalogen.
Verktyget förväntar sig följande parametrar.
Parameter | Obligatoriskt | Beskrivning |
---|---|---|
--input |
Ja | En semikolonavgränsad lista över jar-filer och kataloger för klassfiler som ska ändras. Detta bör innehålla alla jars/kataloger som du tänker skriva om. |
--output |
Ja | En semikolonavgränsad lista över jar-filer och kataloger som de ändrade klasserna ska lagras i. Det bör finnas en utdatapost per indatapost och de bör anges i ordning. |
--classpath |
Ja | Byggklassökvägen. Detta kan innehålla både jar-filer och klasskataloger. |
--processed |
Nej | En semikolonavgränsad lista över jar-filer och kataloger som innehåller klasser som redan har bearbetats av ett tidigare anrop av byggverktyget. |
--excludeClasses |
Nej | En semikolonavgränsad lista som innehåller namnen på de klasser som ska undantas från omskrivning. |
--report |
Nej | Katalog som du vill skriva en HTML-rapport om ändrade klasser till. Om inget anges skrivs ingen rapport. |
Det valfria --processed
alternativet används för att aktivera inkrementella versioner.
Den uppsättning filer/kataloger som anges här bör vara åtskilda från indata- och klassökvägslistorna.
Tips
På Unix-liknande system är semikolon en kommandoavgränsare. Undvik att gränssnittet delar upp kommandon genom att undvika varje semikolon med eller omsluta den fullständiga parametern inom citattecken.
Exempel på Command-Line tool-anrop
> 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
Detta skulle ha följande effekter:
- katalogen skrivs
product-foo-project
om tillmam-build\product-foo-project
-
bar.jar
skrivs om tillmam-build\libs\bar.jar
-
zap.jar
skrivs inte om eftersom den bara visas i--classpath
- Klassen
com.contoso.SplashActivity
skrivs inte om även om den finns i--input
Varning
Build-verktyget stöder för närvarande inte aar-filer.
Om byggsystemet inte redan extraherar classes.jar
när du hanterar aar-filer måste du göra det innan du anropar byggverktyget.
Ange MAMApplication
Om din app skapar en underklass av android.app.Application
omvandlas programklassen av build-plugin-verktyget/kommandoradsverktyget.
Om din app inte är underklass android.app.Application
måste du ange "com.microsoft.intune.mam.client.app.MAMApplication"
som attribut i taggen "android:name"
AndroidManifest.xml<application>
.
Rekommenderade metodtips för Android
- Använd de senaste Android SDK-byggverktygen.
- Ta bort alla onödiga och oanvända bibliotek (till exempel android.support.v4).
När du har utfört automatiska ersättningar underhåller Intune App SDK fortfarande det kontrakt som tillhandahålls av Android-API:et. Feltillstånd kan dock utlösas oftare på grund av principtillämpning. Dessa metodtips för Android minskar sannolikheten för fel:
- Android SDK-funktioner som kan returneras
null
har nu högre sannolikhet attnull
returnera . Se till attnull
kontroller skyddar dessa funktionsanrop. - Funktioner som kan kontrolleras, till exempel
clipboardManager.getPrimaryClipDescription()
, måste kontrolleras via deras MAM-ersättnings-API:er, till exempelMAMClipboard.getPrimaryClipDescription(clipboardManager)
. - Alla härledda funktioner måste anropa sina superklassversioner.
- Undvik att använda api:et på ett tvetydigt sätt. Om du till exempel använder
Activity.startActivityForResult
utan att kontrollerarequestCode
kommer det att orsaka konstigt beteende.
Tjänster
Principtillämpning kan påverka Android-tjänstens interaktioner.
Metoder som upprättar en bunden tjänstanslutning, till exempel Context.bindService
kan misslyckas på grund av underliggande principtillämpning i Service.onBind
och kan resultera i ServiceConnection.onNullBinding
eller ServiceConnection.onServiceDisconnected
.
Att interagera med en etablerad bunden tjänst kan utlösa en SecurityException
på grund av principtillämpning i Binder.onTransact
.
Klienter med bundna tjänster uppmanas starkt att söka efter undantag som genereras av tjänsten i stället för att låta undantag spridas till resten av klientprogrammet.
Avslutsvillkor
När du antingen har konfigurerat plugin-programmet eller integrerat kommandoradsverktyget i byggprocessen kontrollerar du att det körs:
- Se till att bygget kompileras och byggs korrekt.
-
report
Konfigurera flaggan och öppna sedan rapportdokumentet och bekräfta att klass- och metodbyten sker:- Om du använder plugin-programmet följer du stegen i Rapportering.
- Ta med flaggan om du använder kommandoradsverktyget
--report
.
- Om du använder plugin-programmet konfigurerar du
verify
flaggan och ser till att den inte genererar fel. Se Verifiering. - Dubbelkolla alla undantag (
excludeProjects
,excludeClasses
ochexcludeVariants
) i build.gradle. Bekräfta att varje undantag är nödvändigt och inte hanterar skyddade data. Historiskt sett har många dataläckagefel inträffat på grund av överaggressiva undantag. -
Utan att Intune-företagsportal installerat startar du den kompilerade appen, loggar in med en Microsoft Entra användare som inte är mål för appskyddsprincipen och bekräftar att appen fungerar som förväntat.
- Logga ut och upprepa det här testet med Intune-företagsportal installerat.
Vanliga frågor och svar
Min app integrerade tidigare SDK utan plugin-programmet build; hur kan jag använda plugin-programmet för bygget?
Äldre versioner av Intune App SDK innehöll inget automatiserat sätt att utföra klass- och metodbyten, och utvecklare behövde utföra dessa ersättningar manuellt i källkoden. Om din app tidigare hade integrerats på det här sättet är det säkert att använda plugin-programmet för bygget (eller kommandoradsverktyget) utan några ändringar i källkoden. Ditt projekt måste fortfarande lista MAM SDK som ett beroende.
Nästa steg
När du har slutfört alla avslutsvillkor fortsätter du till steg 4: MAM-integrering Essentials.