Příručka pro vývojáře sady Microsoft Intune App SDK pro Android
Sada Microsoft Intune App SDK pro Android umožňuje začlenit zásady ochrany aplikací Intune (označované také jako zásady APP nebo MAM) do nativní aplikace Java/Kotlin pro Android. Aplikace spravovaná Intune je aplikace integrovaná se sadou Intune App SDK. Intune správci můžou zásady ochrany aplikací snadno nasadit do aplikace spravované Intune, když Intune aplikaci aktivně spravuje.
Důležité
Intune pravidelně vydává aktualizace sady Intune App SDK. Doporučujeme přihlásit se k odběru aktualizací v úložištích sady Intune App SDK, abyste mohli aktualizaci začlenit do cyklu vydávání verzí softwaru a zajistili, že vaše aplikace podporují nejnovější nastavení zásad ochrany aplikací.
Před každým hlavním vydáním operačního systému naplánujte povinné aktualizace sady App SDK Intune, abyste zajistili, že vaše aplikace poběží hladce, protože aktualizace operačního systému můžou způsobit zásadní změny. Pokud neaktualizujete na nejnovější verzi před vydáním hlavního operačního systému, může se vám podcházet riziko, že dojde k zásadní změně nebo nebudete moct na aplikaci použít zásady ochrany aplikací.
Tok procesu
Následující diagram znázorňuje tok procesu sady Intune App SDK pro Android:
Goals fáze
Průvodce obsahuje podrobnější informace o architektuře sady Intune App SDK, informace o neobvyklých krocích integrace a další užitečný obsah.
Podrobnější informace o sadě SDK
Nahrazení tříd a metod
Sada Intune App SDK se prostřednictvím nástrojů pro sestavení snaží minimalizovat integrační zátěž vývojářů pro Android. Před sestavením nástrojů museli vývojáři provést všechna nahrazení ručně.
Poznámka
Aplikace se teď musí integrovat s nástroji pro sestavení sady SDK, které budou provádět všechna tato nahrazení automaticky.
Základní třídy Androidu jsou nahrazeny odpovídajícími ekvivalenty MAM, aby bylo možné Intune správu.
Třídy sady SDK žijí mezi základní třídou Androidu a vlastní odvozenou verzí této třídy.
Aktivita aplikace může například skončit s hierarchií dědičnosti, která vypadá takto: AppSpecificActivity
rozšíření rozšiřuje MAMActivity
.Activity
Vrstva MAM filtruje volání systémových operací, aby vaší aplikaci bez problémů poskytla spravovaný pohled na svět.
Kromě základních tříd mohou mít některé třídy, které vaše aplikace používá, aniž by odvozovaly (např. MediaPlayer
) také požadované ekvivalenty MAM a některá volání metod musí být také nahrazena.
V následující tabulce je uvedeno mnoho nahrazení MAM.
Základní třída Androidu | Nahrazení sady Intune App SDK |
---|---|
android.app.Activity | MAMActivity |
android.app.ActivityGroup | MAMActivityGroup |
android.app.AliasActivity | MAMAliasActivity |
android.app.Application | MAMApplication |
android.app.Dialog | MamDialog |
android.app.AlertDialog.Builder | MAMAlertDialogBuilder |
android.app.DialogFragment | MAMDialogFragment |
android.app.ExpandableListActivity | MAMExpandableListActivity |
android.app.Fragment | MAMFragment |
android.app.IntentService | MAMIntentService |
android.app.LauncherActivity | MAMLauncherActivity |
android.app.ListActivity | MAMListActivity |
android.app.ListFragment | MAMListFragment |
android.app.NativeActivity | MAMNativeActivity |
android.app.PendingIntent | MAMPendingIntent |
android.app.Service | MAMService |
android.app.TabActivity | MAMTabActivity |
android.app.TaskStackBuilder | MAMTaskStackBuilder |
android.app.backup.BackupAgent | MAMBackupAgent |
android.app.backup.BackupAgentHelper | MAMBackupAgentHelper |
android.app.backup.FileBackupHelper | MAMFileBackupHelper |
android.app.backup.SharePreferencesBackupHelper | MAMSharedPreferencesBackupHelper |
android.app.job.JobService | MAMJobService |
android.content.BroadcastReceiver | MAMBroadcastReceiver |
android.content.ContentProvider | MAMContentProvider |
android.os.Binder | MAMBinder (nutné pouze v případě, že binder není vygenerován z rozhraní jazyka AIDL (Android Interface Definition Language) |
android.media.MediaPlayer | MAMMediaPlayer |
android.media.MediaMetadataRetriever | MAMMediaMetadataRetriever |
android.media.MediaRecorder | MAMMediaRecorder |
android.provider.DocumentsProvider | MAMDocumentsProvider |
android.preference.PreferenceActivity | MAMPreferenceActivity |
android.widget.PopupWindow | NABÍDKA MAMPopup |
android.widget.PopupWindow | MAMPopupWindow |
android.widget.ListPopupWindow | MAMListPopupWindow |
android.widget.TextView | MAMTextView |
android.widget.AutoCompleteTextView | MAMAutoCompleteTextView |
android.widget.CheckedTextView | MAMCheckedTextView |
android.widget.EditText | MAMEditText |
android.inputmethodservice.ExtractEditText | MAMExtractEditText |
android.widget.MultiAutoCompleteTextView | MAMMultiAutoCompleteTextView |
android.view.LayoutInflater | MAMLayoutInflater |
android.view.ViewGroup | MAMViewGroup |
android.view.SurfaceView | MAMSurfaceView |
android.opengl.GLSurfaceView | MAMGLSurfaceView |
android.widget.VideoView | MAMVideoView |
Přejmenované metody
V mnoha případech byla metoda dostupná ve třídě Androidu v náhradní třídě MAM označena jako konečná.
V tomto případě náhradní třída MAM poskytuje podobně pojmenovanou metodu (obecně s MAM
příponou ), kterou byste měli místo toho přepsat.
Například při odvození z MAMActivity místo přepsání onCreate()
a volání super.onCreate()
musí Activity
přepsat onMAMCreate()
a volat super.onMAMCreate()
.
Kompilátor Javy by měl vynucovat konečná omezení, aby se zabránilo náhodnému přepsání původní metody místo ekvivalentu MAM.
Zabalené systémové služby
U některých tříd systémových služeb je nutné volat statickou metodu v zabalené třídě MAM místo přímého vyvolání požadované metody v instanci služby.
Například volání se getSystemService(ClipboardManager.class).getPrimaryClip()
musí stát voláním .MAMClipboardManager.getPrimaryClip(getSystemService(ClipboardManager.class)
Opět platí, že požadovaný modul plug-in sestavení automaticky provede tyto náhrady.
Třída Androidu | Nahrazení sady Intune App SDK |
---|---|
android.content.ClipboardManager | MAMClipboard |
android.content.ContentProviderClient | MAMContentProviderClientManagement |
android.content.ContentResolver | MAMContentResolverManagement |
android.content.pm.PackageManager | MAMPackageManagement |
android.app.DownloadManager | MAMDownloadManagement |
android.print.PrintManager | MAMPrintManagement |
android.view.View | MAMViewManagement |
android.view.DragEvent | MAMDragEventManagement |
android.view.LayoutInflater | MAMLayoutInflaterManagement |
android.app.NotificationManager | MAMNotificationManagement |
android.app.blob.BlobStoreManager | MAMBlobStoreManager |
android.app.blob.BlobStoreManager.Session | MAMBlobStoreManager.Session |
Některé třídy mají většinu svých metod zabalené, například , , a jiné třídy mají zabalené pouze jednu nebo dvě metody, DownloadManager
například , PrintManager
, PrintHelper
, View
, DragEvent
a NotificationManagerCompat
NotificationManager
.PackageManager
ContentResolver
ContentProviderClient
ClipboardManager
MDM a registrace MAM
Jak je popsáno v části Registrace ve fázi 4 vs. Registrace, sada Intune App SDK "zaregistruje" účty, které vaše aplikace zaregistruje, aby byl tento účet chráněný zásadami. Po úspěšné registraci se účet stane spravovaným a na tento účet by se teď měly použít zásady MAM.
Termín "registrace" může také odkazovat na proces povolení Správa zařízení (MDM) iniciovaný koncovým uživatelem. Registrace MDM je zcela oddělená od registrace zásad ochrany aplikací.
Aplikace integrovaná se sadou SDK může mít účet zaregistrovaný pro zásady ochrany aplikací, aniž by byl tento účet zaregistrovaný pro Správa zařízení. Stejně tak může uživatel zaregistrovat zařízení pro Správa zařízení, aniž by měl aplikace integrované se sadou SDK s účty zaregistrované pro zásady ochrany aplikací.
Když vývojáři a správci odkazují na registraci, obvykle odkazují na registraci MDM, protože registrace zásad ochrany aplikací je pro vývojáře i koncové uživatele z velké části neviditelná. Další podrobnosti o registraci mdm najdete v tématu Registrace zařízení s Androidem .
Tipy pro integraci
Principy protokolů Portál společnosti
Portál společnosti protokoly obsahují informace, které technici Microsoftu používají k vyšetřování problémů. Některé protokoly můžou být užitečné i pro vývojáře, kteří integrují sadu SDK.
Soubor DiagnosticsInfo-scrubbed.log
obsahuje zejména informace o tom, které aplikace spravuje MAM, a podrobnosti o zásadách PolicyDB Information
MAM v části .
Každá spravovaná aplikace má v oddílu PolicyDB Information
záznam.
Tady byste měli hledat název balíčku vaší aplikace, abyste ověřili, že zásady MAM jsou správně zacílené na vaši aplikaci.
Pokud tady nevidíte název balíčku vaší aplikace, znamená to, že se na přihlášený účet nepoužijí zásady MAM.
Popis jednotlivých nastavení zásad MAM najdete v tématu Nastavení zásad ochrany aplikací pro Android v Microsoft Intune. Popis toho, jak se tato nastavení zobrazí v protokolech Portál společnosti, najdete v tématu Kontrola protokolů ochrany klientských aplikací. Pokud se zásady MAM nevynucují podle očekávání, doporučujeme zkontrolovat Portál společnosti protokoly nebo diagnostické uživatelské rozhraní, ověřit, že je vaše aplikace spravovaná zásadami MAM, a ověřit, že nastavení zásad mají očekávané hodnoty.
Protokoly Portál společnosti můžete shromažďovat jedním z následujících způsobů:
- Prostřednictvím Portál společnosti
- Otevření aplikace Portál společnosti
- Výběr nabídky se třemi tečkami v pravém horním rohu
- Vyberte Nastavení.
- V části Diagnostické protokoly vyberte Uložit protokoly.
- Postupujte podle výzvy a zvolte výstupní adresář pro uložení protokolů Portál společnosti.
- Pomocí
adb shell pull
příkazu natáhněte protokoly ze zařízení s Androidem na místní počítač.
- [Pro přístup k protokolům spravovaných aplikací použijte Microsoft Edge pro Android. Zobrazí se uživatelské rozhraní pro shromažďování protokolů Portál společnosti a zobrazení diagnostiky MAM.
- Voláním
MAMPolicyManager.showDiagnostics(context)
zobrazíte stejné uživatelské rozhraní pro shromažďování protokolů Portál společnosti.
Rychlé testování se změnou zásad
Při vývoji a testování integrace sady Intune App SDK vaší aplikace můžete často měnit nastavení zásad ochrany aplikací pro testovacího uživatele.
Ve výchozím nastavení se integrované aplikace budou ve službě Intune informovat o aktualizovaných zásadách každých 30 minut, pokud jsou aktivní. Tomuto čekání se můžete vyhnout a vynutit přihlášení přes Portál společnosti:
- Spusťte Portál společnosti. Nemusíte se přihlašovat.
- Vyberte ... ikona nabídky.
- Vyberte Nastavení.
- Přejděte k nastavení s názvem Zásady správy.
- Stiskněte tlačítko Synchronizovat.
Tím se okamžitě naplánuje ohlášení rezervace a načte se aktuální zásady cílené na vaši aplikaci a účet.
Řešení potíží s migrací na AndroidX
Pokud jste před využitím AndroidX integrovali sadu Intune App SDK, může při migraci na AndroidX dojít k chybě podobné této:
incompatible types: android.support.v7.app.ActionBar cannot be converted to androidx.appcompat.app.ActionBar
K těmto chybám může dojít, protože vaše aplikace odkazuje na starší třídy podpory sady SDK. Třídy podpory MAM zabalí třídy podpory Androidu, které se přesunuly do AndroidX. Pokud chcete s těmito chybami bojovat, nahraďte všechny odkazy na třídy podpory MAM jejich ekvivalenty AndroidX. Toho lze dosáhnout tak, že nejprve odeberete závislosti knihovny podpory MAM ze souborů sestavení Gradle. Příslušné řádky budou vypadat přibližně takto:
implementation "com.microsoft.intune.mam:android-sdk-support-v4:$intune_mam_version"
implementation "com.microsoft.intune.mam:android-sdk-support-v7:$intune_mam_version"
Potom opravte výsledné chyby v době kompilace nahrazením všech odkazů na třídy MAM v com.microsoft.intune.mam.client.support.v7
balíčcích a com.microsoft.intune.mam.client.support.v4
jejich ekvivalenty AndroidX.
Například odkazy na MAMAppCompatActivity
by měly být změněny AppCompatActivity
na AndroidX .
Jak je popsáno výše, modul plug-in nebo nástroj pro sestavení MAM automaticky přepíše třídy v knihovnách AndroidX příslušnými ekvivalenty MAM v době kompilace.
Omezení a zvláštní případy
Výchozí registrace
Vaše aplikace se může ke zásadám ochrany aplikací registrovat alternativně prostřednictvím zjednodušeného procesu označovaného jako výchozí registrace. Tato funkce je primárně určená k podpoře privátních obchodních aplikací, které nemají integrovaný protokol MSAL.
Upozornění
Výchozí registrace má významné kompromisy a nedoporučuje se. Aplikace využívající výchozí registraci nepodporují podmíněný přístup, nevyužívají výhod jednotného přihlašování se službami Microsoftu a nemůžou je používat Intune účty. Pokud se vaše aplikace dodává do veřejného obchodu s aplikacemi, výchozí registrace se nepodporuje.
Výchozí registrace přinutí koncového uživatele nainstalovat Portál společnosti a dokončit tok registrace MAM před povolením uživatelů do vaší aplikace.
Poznámka
Výchozí registrace podporuje suverénní cloud.
Následujícím postupem povolte výchozí registraci:
Pokud vaše aplikace integruje MSAL nebo potřebujete povolit jednotné přihlašování, nakonfigurujte MSAL. Pokud ne, můžete tento krok přeskočit.
Povolte výchozí registraci přidáním následující hodnoty do manifestu pod
<application>
značku:<meta-data android:name="com.microsoft.intune.mam.DefaultMAMServiceEnrollment" android:value="true" />
Povolte požadované zásady MAM přidáním následující hodnoty do manifestu pod
<application>
značku:<meta-data android:name="com.microsoft.intune.mam.MAMPolicyRequired" android:value="true" />
Izolované procesy
Sada Intune App SDK nemůže použít ochranu na izolované procesy.
Podpora izolovaných procesů (android:isolatedProcess
) vyžaduje přidání značky metadat níže.
Upozornění
Přidáním těchto metadat aplikace deklaruje, že izolovaný proces nemůže vystavit data organizace. Za to zodpovídá vaše aplikace.
<meta-data android:name="com.microsoft.intune.mam.AllowIsolatedProcesses" android:value="true" />
Omezení vlastních snímků obrazovky
Pokud vaše aplikace obsahuje funkci vlastního zachycení obrazovky, která obchází omezení na úrovni FLAG_SECURE
AndroiduWindow
, musíte před povolením úplného přístupu k této funkci zkontrolovat zásady zachycení obrazovky.
Pokud například vaše aplikace používá k vykreslení aktuálního zobrazení do souboru PNG vlastní vykreslovací modul, musíte nejprve zkontrolovat AppPolicy.getIsScreenCaptureAllowed()
.
Pokud vaše aplikace neobsahuje žádné vlastní funkce nebo funkce pro pořizování snímků obrazovky od jiných výrobců, nemusíte provádět žádnou akci, která by omezila pořizování snímků obrazovky.
Zásady zachycení obrazovky se automaticky vynucuje na Window
úrovni všech integrovaných aplikací MAM.
Všechny pokusy operačního systému nebo jiné aplikace o zachycení objektu Window
ve vaší aplikaci se podle potřeby zablokují.
Pokud se například uživatel pokusí zachytit obrazovku vaší aplikace prostřednictvím integrovaných funkcí snímku obrazovky nebo nahrávání obrazovky v Androidu, bude zachycení automaticky omezeno bez účasti vaší aplikace.
Omezení vynucení zásad
Použití překladačů obsahu: Zásady Intune "přenos nebo příjem" můžou blokovat nebo částečně blokovat použití překladače obsahu pro přístup k poskytovateli obsahu v jiné aplikaci. To způsobí,
openOutputStream
žeContentResolver
metody vrátí hodnotu null nebo vyvolají hodnotu selhání (například vyvolajíFileNotFoundException
, pokud jsou blokované). Aplikace může zjistit, jestli příčinou selhání zápisu dat prostřednictvím překladače obsahu byly zásady (nebo zásady), a to pomocí volání:MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowed(contentURI);
nebo pokud není přidružená žádná aktivita:
MAMPolicyManager.getCurrentThreadPolicy().getIsSaveToLocationAllowed(contentURI);
V tomto druhém případě se aplikace s více identitou musí postarat o správné nastavení identity vlákna (nebo předání explicitní identity volání
getPolicyForIdentity
).
Exportované služby
Soubor AndroidManifest.xml, který je součástí sady INTUNE App SDK, obsahuje MAMNotificationReceiverService, což musí být exportovaná služba, aby Portál společnosti mohla posílat oznámení do spravované aplikace. Služba zkontroluje volajícího, aby se ujistila, že oznámení může posílat jenom Portál společnosti.
Omezení reflexe
Některé základní třídy MAM (například MAMActivity
, MAMDocumentsProvider
) obsahují metody (založené na původních základních třídách Androidu), které používají parametry nebo návratové typy, které se nacházejí pouze nad určitými úrovněmi rozhraní API.
Z tohoto důvodu nemusí být vždy možné použít reflexi k výčtu všech metod komponent aplikace.
Toto omezení se neomezuje na MAM, jedná se o stejné omezení, které by se použilo, kdyby aplikace sama implementovala tyto metody ze základních tříd Androidu.
Robolectric
Testování chování sady Intune App SDK v robolectricu se nepodporuje. Existují známé problémy se spuštěním sady SDK v nástroji Robolectric kvůli chování, které se vyskytuje v nástroji Robolectric a které přesně nenapodobuje chování na skutečných zařízeních nebo emulátorech.
Pokud potřebujete otestovat aplikaci v nástroji Robolectric, doporučeným alternativním řešením je přesunout logiku třídy aplikace do pomocného nástroje a vytvořit soubor APK pro testování jednotek s třídou aplikace, která nedědí z MAMApplication.