Android 用アプリ SDK のIntune - MAM の概要
Microsoft Intune App SDK for Android を使用すると、Intuneアプリ保護ポリシー (APP または MAM ポリシーとも呼ばれます) をネイティブの Java/Kotlin Android アプリに組み込むことができます。 Intuneマネージド アプリケーションは、Intune App SDK と統合されたアプリケーションです。 Intune管理者は、アプリをアクティブに管理する場合に、Intuneマネージド アプリにアプリ保護ポリシー Intune簡単にデプロイできます。
注:
このガイドは、いくつかの異なるステージに分かれています。 まず、「 ステージ 1: 統合を計画する」を確認します。
ステージ 3: MAM を使用したはじめに
ステージ Goals
- Intune App SDK をダウンロードします。
- Intune App SDK に含まれるファイルについて説明します。
- アプリケーションで Intune App SDK を参照します。
- Intune App Gradle Build Plugin を構成するか、コマンド ライン ビルド ツールを利用します。
- Intune App SDK がビルドに適切に含まれていることを確認します。
背景
アプリケーションで MSAL が正常に統合されたので、Intune App SDK をダウンロードし、アプリケーションのビルド プロセスに含めます。
Intune App SDK を統合する大部分は、標準の Android クラスとメソッド呼び出しを、これらのクラスとメソッド呼び出しのIntuneバージョンに置き換えることです。 SDK には、これらの代わりのほとんどを自動的に作成するビルド ツールが含まれています。 この置換ロジックの詳細については、付録のクラスとメソッドの置換に関するセクションを参照してください。
Intune App SDK をダウンロードする
SDK をダウンロードするには、「 SDK ファイルのダウンロード」を参照してください。
SDK の内容
Intune App SDK は、次のファイルで構成されます。
- Microsoft。Intune。MAM。SDK.aar: サポート ライブラリ JAR ファイルを除く SDK コンポーネント。
- com.microsoft.intune.mam.build.jar: Sdk の統合に役立つ Gradle プラグイン。
- CHANGELOG.md: 各 SDK バージョンで行われた変更の記録を提供します。
- THIRDPARTYNOTICES.TXT: アプリにコンパイルされるサード パーティのコードまたは OSS コードを認識する属性通知。
-
Microsoft。Intune。MAM。SDK。DownlevelStubs.aar: この AAR には、新しいデバイスにのみ存在するが、MAMActivity のメソッドによって参照される Android システム クラスのスタブが含まれています。 新しいデバイスでは、これらのスタブ クラスは無視されます。 この AAR は、アプリが
MAMActivity
から派生したクラスに対してリフレクションを実行し、 ほとんどのアプリがそれを含める必要がない場合にのみ必要です。 AAR には、すべてのクラスを除外する ProGuard ルールが含まれています。
Intune アプリ ライブラリの参照
Intune App SDK は、外部の依存関係を持たない標準の Android ライブラリです。 Microsoft。Intune。MAM。SDK.aar には、アプリ保護ポリシーを有効にするために必要なインターフェイスと、Microsoft Intune ポータル サイト アプリとの相互運用に必要なコードの両方が含まれています。
Android Studio
Microsoft。Intune。MAM。SDK.aar は、Android ライブラリ参照として指定する必要があります。 この依存関係をビルドに追加するには、Android ドキュメントの 依存関係として AAR または JAR を追加 するに従います。
Visual Studio
Intune App SDK for .NET MAUI - Android NuGet パッケージを依存関係として追加する必要があります。
「NuGet パッケージ マネージャーを使用して Visual Studio でパッケージをインストールおよび管理する」のプロセスに従います。
Microsoft.Intune。MAM。SDK.aar は、Microsoft.Intune.Mam
名前空間をスコープとする C# 参照を作成するためにバインドされています。
ProGuard
アプリケーションでは、ビルド ステップとして ProGuard (またはその他の圧縮/難読化メカニズム) が既に使用されている場合があります。 Intune App SDK には、そのビルド ステップに含まれている必要がある ProGuard 構成規則があります。 を含む 。 上記のように、ビルド内の AAR によって SDK の構成が ProGuard ステップに自動的に統合されるため、必要なクラス ファイルが保持されます。 が正しく含まれている場合は 、 を指定します。AAR、他の変更は必要ありません。
Microsoft Authentication Library (MSAL) には、独自の ProGuard 構成が付属しています。 アプリが MSAL を統合している場合は、 MSAL のドキュメント を参照して詳細を確認してください。
ビルド ツール
SDK には、MAM の置換を自動的に実行するビルド ツール (Gradle ビルドのプラグイン、.NET ビルドのターゲット、およびコマンド ライン ツール) が用意されています。 これらのツールは、Java コンパイルによって生成されたクラス ファイルを変換します。元のソース コードは変更されません。 Gradle プラグイン、.NET NuGet パッケージ、またはコマンド ライン ツールを使用する必要があります。
ビルド ツールだけでは、アプリケーションを完全に統合するだけでは十分ではありません。 ツールでは 、クラスとメソッドの置換 のみが実行されます。 マルチ ID、アプリ保護ポリシーの登録、アプリとデバイスまたはクラウドストレージの場所間のデータ転送を制限するためのポリシー、アプリが完全にIntune有効になる前に完了する必要がある MSAL 構成など、より複雑な SDK 統合は実行されません。 アプリに関連する統合ポイントについては、このドキュメントの残りの部分を慎重に確認してください。
デバッグへの影響
ビルド ツールはコンパイル後に置換を実行します。これにより、いくつかのメソッド名が変更されます。 その結果、メソッド名に設定されたデバッグ ブレークポイントが影響を受け、期待どおりに停止しない可能性があります。 行番号ブレークポイントは影響を受けません。
スタック内の MAM
Intune App SDK 統合はクラスとメソッドの置換に大きく依存するため、スタック トレース全体でmam
が表示されるようになります。
アプリがアプリ保護ポリシーを対象とするアカウントを持っていない場合、この MAM コードはすべて休止状態になります。MAMActivity
はActivity
と同じように動作し、onMAMCreate
はonCreate
と同じように動作します。スタックにmam
が表示されるたびに、最初にチェック。
- アカウントはアプリ保護ポリシーを対象としていますか?
- Intune ポータル サイトはインストールされていますか?
両方に対する回答が "はい" でない限り、MAM コードは単純なパススルーとして機能します。
必要なツールは何ですか?
Gradle を使用してアプリをビルドする場合は、「Gradle ビルド プラグインとの統合」を参照してください。
.NET MAUI を使用してアプリをビルドする場合は、「.NET MAUI ターゲットとの統合」を参照してください。
上記のどちらも使用してアプリをビルドする場合は、「 コマンド ライン ツールとの統合」を参照してください。
Gradle ビルド プラグインとの統合
Intune App SDK プラグインは、GradlePlugin/com.microsoft.intune.mam.build.jar として SDK の一部として配布されます。
プラグインを Gradle によって認識するには、 buildscript
クラスパスに追加する必要があります。
プラグインは Javassist に依存します。これも追加する必要があります。 Javassist 依存関係の詳細については、「 依存関係」を参照してください。
これらをクラスパスに追加するには、ルート 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")
}
}
次に、プラグインを適用するには、アプリと動的機能モジュールの build.gradle
ファイルに次を追加します。
apply plugin: 'com.microsoft.intune.mam'
既定では、プラグインは project
の依存関係と外部ライブラリで動作します。
テスト コンパイルは影響を受けません。
注:
8.0 Intune App SDK 以降では、ライブラリを選択的に処理することはできなくなります。 すべてのライブラリが処理されます。
依存関係
注:
バージョン 3.6.1 以降の Android Gradle プラグインとバージョン 5.6.4 以降の Gradle を使用している必要があります。
Gradle プラグインは Javassist に依存しており、Gradle の依存関係解決で使用できるようにする必要があります。 Javassist は、プラグインを実行するときにビルド時にのみ使用され、Javassist コードはアプリに追加されません。
注:
Javassist バージョンは下位互換性がない可能性があります。 一般に、Intune App SDK で想定されている正確なバージョンを使用する必要があります。
- Intune App SDK ≥ 10.0.0 には Javassist 3.29.2-GA が必要です
- Intune App SDK ≥ 7.0.0 には Javassist 3.27.0-GA が必要です
- Intune App SDK < 7.0.0 には Javassist 3.22.0-GA が必要です
さらに、MAM SDK 8.0.0 以降を使用する場合は、Gradle 構成で次が設定されていることを確認する必要があります。
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
除外
アプリ内の特定のコンポーネントを書き換えから除外するために、追加の構成が提供される場合があります。 除外は、MAM に関連しないコンポーネント (つまり、会社のデータを処理したり表示したりしない) に主に役立ちます。
除外は、さまざまなスコープに対して構成できます。
-
excludeProjects
では、Gradle プロジェクトの一覧を除外できます。 これらの除外は、Android ライブラリやシステム API とインターフェイスしないプロジェクトや、企業データを処理しないプロジェクトに役立ちます。 たとえば、低レベルのネットワーク操作を実行するためのネイティブ コードのみを含むプロジェクトが適している可能性があります。 プロジェクトが Android ライブラリまたはシステム API と広く連携する場合は、これらの除外を回避する必要があります。 -
excludeClasses
では、クラスの一覧を除外できます。 これらの除外は、企業データを処理または提示しないクラスに役立ちます。 たとえば、スプラッシュ 画面やオンボードActivity
が適しています。 いずれかのスーパークラスが処理されている場合、クラスを除外できないことに注意してください。 -
excludeVariants
では、プロジェクトバリアントを除外できます。 これらの除外は、完全なバリアント名または単一のフレーバーを参照できます。 これらは、アプリの MAM 以外のフレーバーを構築する場合に特に便利です。 たとえば、アプリにビルドの種類debug
があり、フレーバー {noMAM
、MAM
} と {mock
、 {production
} を含むrelease
がある場合は、次のように指定できます。-
noMAM
noMAM フレーバーまたは -
noMAMMockDebug
を使用して、その正確なバリアントのみを除外します。
-
注意
除外は軽視しないでください。 除外を誤って適用すると、アプリで重大なデータ リークが発生する可能性があります。 適用する除外の影響を常に検証します。
除外を含む部分 build.gradle の例
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']
}
これにより、次の効果が得られます。
-
:product:FooLib
に含まれているため、書き換えられませんexcludeProjects
-
:product:foo-project
は、com.contoso.SplashActivity
を除いて書き換えられます。これは、excludeClasses
-
com.microsoft.bar:baz.1.0.0
は、すべての外部ライブラリが処理用に含まれているため、書き換えられます。 -
noMAM
フレーバーを持つバリアントは書き換えられません。
Reporting
ビルド プラグインは、行った変更の HTML レポートを生成できます。
このレポートの生成を要求するには、intunemam
構成ブロックでreport = true
を指定します。
生成された場合、レポートはビルド ディレクトリ内の outputs/logs
に書き込まれます。
intunemam {
report = true
}
検証
ビルド プラグインは、追加の検証を実行して、処理クラスで発生する可能性のあるエラーを探すことができます。 これらのチェックは、プラグインによって発生する可能性のあるランタイム エラーから保護するのに役立ちます。
ビルドで検証が実行されていることを要求するには、intunemam
構成ブロックでverify = true
を指定します。
これにより、プラグインのタスクにかかった時間に数秒かかる場合があります。
intunemam {
verify = true
}
一般に、検証エラーはビルド プラグインのバグを表します。 障害に関するサポートについては、Microsoft サポートに関する問題をエスカレートします。 Microsoft サポート 契約がない場合は、 GitHub の問題を開きます。
増分ビルド
増分ビルドのサポートを有効にするには、intunemam
構成ブロックでincremental = true
を指定します。
この機能により、変更された入力ファイルのみを処理することで、ビルドのパフォーマンスが向上します。
incremental
の既定の構成はfalse
。
intunemam {
incremental = true
}
動的機能モジュールの構成
動的機能モジュールは、アプリ プロジェクトとは別に構築されます。 そのため、動的機能モジュールは Gradle ビルド プラグインを適用する必要もあります。
Gradle プラグインで使用される API の技術的な制限により、動的フィーチャ モジュール クラスを変換するときにアプリ クラスを再処理する必要があります。 これを確実に行うには、すべての機能モジュールを、それが設計されているアプリと同じ設定で構成する必要があります。
たとえば、アプリがクラスを除外する場合、動的機能モジュールはそのクラスも除外する必要があります。
.NET MAUI ターゲットとの統合
Intune App SDK ターゲットは、MICROSOFT.Intune として SDK の一部として配布されます。マウイ 島。Essentials.android.targets。
ターゲットは、Intune App SDK for .NET MAUI - Android NuGet パッケージが追加されると、コンパイル時にアプリケーションに自動的にインポートされます。
コマンド ライン ビルド ツールとの統合
コマンド ライン ビルド ツールは、SDK ドロップの BuildTool
フォルダーで使用できます。
上で詳しく説明した Gradle プラグイン/.NET ターゲットと同じ関数を実行しますが、カスタム ビルド システムに統合できます。
一般的であるため、呼び出す方が複雑になるため、Gradle プラグイン/.NET ターゲットは可能な限り使用する必要があります。
Command-Line ツールの使用
コマンド ライン ツールは、 BuildTool\bin
ディレクトリにある指定されたヘルパー スクリプトを使用して呼び出すことができます。
このツールでは、次のパラメーターが必要です。
パラメーター | 必須 | 説明 |
---|---|---|
--input |
はい | 変更する jar ファイルとクラス ファイルのディレクトリのセミコロン区切りリスト。 これには、書き換える予定のすべての jars/ディレクトリが含まれている必要があります。 |
--output |
はい | 変更されたクラスを格納する jar ファイルとディレクトリのセミコロン区切りリスト。 入力エントリごとに 1 つの出力エントリがあり、順番に一覧表示する必要があります。 |
--classpath |
はい | ビルド クラスパス。 これには、jar とクラスディレクトリの両方が含まれる場合があります。 |
--processed |
いいえ | ビルド ツールの以前の呼び出しによって既に処理されているクラスを含む jar ファイルとディレクトリのセミコロン区切りリスト。 |
--excludeClasses |
いいえ | 書き換えから除外する必要があるクラスの名前を含むセミコロン区切りリスト。 |
--report |
いいえ | 変更されたクラスに関する HTML レポートを書き込むディレクトリ。 指定しない場合、レポートは書き込まれません。 |
オプションの --processed
オプションは、増分ビルドを有効にするために使用されます。
ここに一覧表示されているファイル/ディレクトリのセットは、入力リストとクラスパス リストと一緒に不整合である必要があります。
ヒント
Unix に似たシステムでは、セミコロンはコマンド区切り記号です。 シェルがコマンドを分割しないようにするには、各セミコロンを '' でエスケープするか、完全なパラメーターを引用符で囲んでください。
ツールの呼び出し Command-Line 例
> 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
これにより、次の効果が得られます。
-
product-foo-project
ディレクトリが に書き換えられます。mam-build\product-foo-project
-
bar.jar
に書き換えられます。mam-build\libs\bar.jar
-
zap.jar
が書き換 えられない のは、--classpath
-
com.contoso.SplashActivity
クラスは、 にある場合でも書き換えされません--input
警告
ビルド ツールは現在、aar ファイルをサポートしていません。
aar ファイルを扱うときにビルド システムがまだ classes.jar
を抽出していない場合は、ビルド ツールを呼び出す前に、それを行う必要があります。
MAMApplication の設定
アプリが android.app.Application
のサブクラスを作成する場合、ビルド プラグイン/コマンド ライン ツールによってアプリケーション クラスが変換されます。
アプリでandroid.app.Application
をサブクラス化しない場合は、AndroidManifest.xml の<application>
タグの"android:name"
属性として"com.microsoft.intune.mam.client.app.MAMApplication"
を設定する必要があります。
推奨される Android のベスト プラクティス
- 最新の Android SDK ビルド ツールを使用します。
- 不要なライブラリと未使用のライブラリ (android.support.v4 など) をすべて削除します。
自動置換を実行した後も、Intune App SDK は Android API によって提供されるコントラクトを維持します。 ただし、ポリシーの適用の結果として、エラー状態がより頻繁にトリガーされる場合があります。 これらの Android のベスト プラクティスは、失敗の可能性を減らします。
-
null
を返すことができる Android SDK 関数は、null
を返す可能性が高くなりました。null
チェックでこれらの関数呼び出しが保護されていることを確認します。 -
clipboardManager.getPrimaryClipDescription()
など、チェックできる機能は、MAMClipboard.getPrimaryClipDescription(clipboardManager)
などの MAM 置換 API を通じて確認する必要があります。 - 派生関数は、スーパー クラス バージョンを呼び出す必要があります。
- あいまいな方法で API を使用しないでください。 たとえば、
requestCode
を確認せずにActivity.startActivityForResult
を使用すると、奇妙な動作が発生します。
サービス
ポリシーの適用は、Android サービス の操作に影響する可能性があります。
Context.bindService
などのバインドされたサービス接続を確立するメソッドは、Service.onBind
の基になるポリシーの適用により失敗し、ServiceConnection.onNullBinding
またはServiceConnection.onServiceDisconnected
になる可能性があります。
確立されたバインドされたサービスと対話すると、Binder.onTransact
でのポリシーの適用により、SecurityException
がスローされる可能性があります。
バインドされたサービスのクライアントは、例外をクライアント アプリケーションの残りの部分に伝達するのではなく、サービスによってスローされる例外をチェックすることを強くお勧めします。
終了条件
ビルド プラグインを構成するか、コマンド ライン ツールをビルド プロセスに統合した後、正常に実行されていることを検証します。
- ビルドが正常にコンパイルされ、ビルドされていることを確認します。
-
report
フラグを構成し、レポート ドキュメントを開き、クラスとメソッドの置換が発生していることを確認します。- プラグインを使用している場合は、「 レポート」の手順に従います。
- コマンド ライン ツールを使用する場合は、
--report
フラグを含めます。
- プラグインを使用している場合は、
verify
フラグを構成し、エラーが発生しないようにします。 「 検証」を参照してください。 - build.gradle のすべての除外 (
excludeProjects
、excludeClasses
、excludeVariants
) をダブルチェックします。 各除外が必要であり、保護されたデータを処理しないことを確認します。 これまで、多くのデータ リーク エラーが発生しました。これは、過度に積極的な除外が原因です。 -
Intune ポータル サイトがインストールされていない場合は、コンパイル済みアプリを起動し、App Protection Policy を対象としないMicrosoft Entra ユーザーとログインし、そのアプリが期待どおりに機能することを確認します。
- ログアウトし、インストールされているIntune ポータル サイトでこのテストを繰り返します。
FAQ
私のアプリは以前にビルドプラグインなしで SDK を統合しました。ビルド プラグインを使用するにはどうすればよいですか?
以前のバージョンの Intune App SDK には、クラスとメソッドの置換を実行するための自動化された方法が含まれていませんでした。開発者は、これらの置換をソース コードで手動で実行する必要があります。 以前にこの方法でアプリを統合していた場合は、ソース コードを変更せずにビルド プラグイン (またはコマンド ライン ビルド ツール) を適用しても安全です。 プロジェクトは引き続き MAM SDK を依存関係として一覧表示する必要があります。
次の手順
すべての終了条件を完了したら、ステージ 4: MAM 統合Essentialsに進みます。