Android 用 Intune アプリ SDK - MAM の使用を開始する

Android 用 Microsoft Intune アプリ SDK を使用すると、Intune アプリ保護ポリシーをネイティブの Java/Kotlin Android アプリに組み込むことができます。 これらのポリシーは、MAM ポリシーとも呼ばれます。 Intune マネージド アプリケーションは、Intune アプリ SDK と統合されたアプリケーションです。 Intune がアプリをアクティブに管理する場合、Intune 管理者はアプリ保護ポリシーを Intune で管理されるアプリに簡単に展開できます。

注:

このガイドは、いくつかの異なる段階に分かれています。 まず、「 ステージ 1: 統合を計画する」を確認することから始めます。

ステージ 3: MAM はじめに

ステージ目標

  • Intune アプリ SDK をダウンロードします。
  • Intune App SDK に含まれるファイルについて説明します。
  • アプリケーションで Intune アプリ SDK を参照します。
  • Intune アプリ Gradle ビルド プラグインを構成するか、コマンド ライン ビルド ツールを使用します。
  • Intune アプリ SDK がビルドに正しく含まれていることを確認します。

背景

アプリケーションに MSAL が正常に統合されたので、Intune アプリ SDK をダウンロードして、アプリケーションのビルド プロセスに含めます。

Intune アプリ SDK の統合の大部分は、標準の Android クラスとメソッド呼び出しを、それらのクラスとメソッド呼び出しの Intune バージョンに置き換えることです。 SDK には、これらの置換のほとんどを自動的に行うビルド ツールが含まれています。 この置換ロジックの詳細については、付録「クラスとメソッドの置換」セクションを参照してください。

Intune アプリ SDK をダウンロードする

SDK をダウンロードするには、「 SDK ファイルのダウンロード」を参照してください。

SDK の内容

Intune アプリ SDK は、次のファイルで構成されます。

  • Microsoft.Intune。MAM.SDK.aar: サポート ライブラリ JAR ファイルを除く SDK コンポーネント。
  • com.microsoft.intune.mam.build.jar: SDK の統合に役立つ Gradle プラグイン。
  • CHANGELOG.md: 各 SDK バージョンで行われた変更の記録を提供します。
  • Microsoft.Intune。MAM.SDK。DownlevelStubs.aar: この Android アーカイブ (AAR) には、新しいデバイスにのみ存在しますが、MAMActivity のメソッドによって参照される Android システム クラスのスタブが含まれています。 新しいデバイスでは、これらのスタブ クラスが無視されます。 この AAR は、アプリが MAMActivity から派生するクラスに対してリフレクションを実行する場合にのみ必要であり、 ほとんどのアプリにこれを含める必要はありません。 AAR には、すべてのクラスを除外する ProGuard ルールが含まれています。

Intune アプリ ライブラリの参照

Intune アプリ 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 アプリ SDK には、そのビルド手順に含める必要がある ProGuard 構成ルールがあります。 including the . 前述のように、ビルドの AAR は、SDK の構成を ProGuard ステップに自動的に統合するため、必要なクラス ファイルが保持されます。 を追加した場合他の変更は必要ありません。

Microsoft 認証ライブラリ (MSAL) には、独自の ProGuard 構成が付属しています。 アプリに MSAL が統合されている場合は、 MSAL ドキュメント の詳細を参照してください。

ツールをビルドする

SDK には、MAM 置換を自動的に実行するビルド ツール (Gradle ビルド用のプラグイン、.NET ビルドのターゲット、およびコマンド ライン ツール) が用意されています。 これらのツールは、Javaコンパイルによって生成されたクラスファイルを変換します。元のソース コードは変更されません。 Gradle プラグイン、.NET NuGet パッケージ、またはコマンド ライン ツールのいずれかを使用する必要があります。

ビルド ツールだけでは、アプリケーションを完全に統合するには不十分です。 このツールは 、クラスとメソッドの置換 のみを実行します。 マルチ IDアプリ保護ポリシーの登録アプリとデバイスまたはクラウド ストレージの場所間のデータ転送を制限するポリシーMSAL 構成など、より複雑な SDK 統合は実行しません。 アプリで Intune を完全に有効にする前に、これらの統合を完了する必要があります。 アプリケーションに関連する統合ポイントについては、このドキュメントの残りの部分を注意深く確認してください。

デバッグ

ビルド ツールは、コンパイル後に置換を実行します。 これらの置換により、一部のメソッド名が変更されます。 その結果、メソッド名に設定されたブレークポイントのデバッグが影響を受ける可能性があります。 期待どおりに停止しない可能性があります。 行番号のブレークポイントは影響を受けません。

スタック内の MAM

Intune アプリ SDK の統合は、クラスとメソッドの置換に大きく依存します。 この依存性により、スタック トレース全体で mam が表示されます。 アプリにアプリ保護ポリシーの対象となるアカウントがない場合、この MAM コードはすべて休止状態になります。 たとえば、 MAMActivityActivity と同じように動作し、 onMAMCreateonCreate と同じように動作します。 スタックにmamが表示されたら、まずチェック:

  • アカウントはアプリ保護ポリシーの対象ですか?
  • Intune ポータル サイトがインストールされていますか?

両方に対する回答が "はい" でない限り、MAM コードは単純なパススルーとして機能します。

必要なツール

Gradle を使用してアプリをビルドする場合は、「Gradle Build プラグインとの統合」を参照してください

.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 以降では、ライブラリを選択的に処理できなくなりました。 すべてのライブラリが処理されます。

依存関係

Gradle プラグインは Javassist に依存しており、Gradle の依存関係解決のために利用できるようにする必要があります。 Javassist はプラグイン実行時のビルド時にのみ使用され、Javassist コードはアプリに追加されません。

MAM SDK Javassist バージョン
≥ 10.0.0 3.29.2-GA
≥ 7.0.0 3.27.0-GA
< 7.0.0 3.22.0-GA

注:

Javassist バージョンには下位互換性がない可能性があります。 一般に、Intune App SDK で予期される正確なバージョンを使用する必要があります。

互換性マトリックス

MAM SDK ビルド プラグインは、 Android のビルド要件と互換性表に準拠しています。 ここに記載されていないバージョンは、動作する場合と動作しない場合があります。

MAM SDK Android バージョン Gradle Android Gradle プラグイン Kotlin バージョン Java バージョン
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

除外

アプリ内の特定のコンポーネントを書き換えから除外するための追加の構成を指定できます。 除外は、MAM に関係のない (つまり、企業データを処理または表示しない) コンポーネントに対して主に役立ちます。

除外は、さまざまなスコープに対して構成できます。

  • excludeProjects Gradle プロジェクトのリストを除外できます。 これらの除外は、Android ライブラリやシステム API とインターフェイスしないプロジェクトで役立ちます。 また、企業データを扱わないプロジェクトにも役立ちます。 たとえば、低レベルのネットワーク操作を実行するためのネイティブ コードのみを含むプロジェクトが適切な候補となる可能性があります。 プロジェクトが Android ライブラリまたはシステム API と広範にインターフェイスする場合は、これらの除外を避けてください。
  • excludeClasses クラスのリストを除外できます。 これらの除外は、企業データを処理または表示しないクラスに役立ちます。 たとえば、スプラッシュ画面やオンボーディング Activityが適切な候補です。 クラスのスーパークラスのいずれかが処理されている場合、クラスを除外することはできません。
  • excludeVariants プロジェクト バリアントの除外を有効にします。 これらの除外は、完全なバリアント名または 1 つのフレーバーのいずれかを指す場合があります。 MAM 以外のフレーバーのアプリを構築する場合に特に便利です。 たとえば、アプリにフレーバー {noMAM, MAM} と {mock, production} のdebugreleaseのビルド タイプがある場合は、次を指定します。
    • 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 は、Power BI テナント データに含まれているため書き換えられません 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 アプリ SDK ターゲットは、Microsoft.Intune として SDK の一部として配布されます。Maui.Essentials.android.targets.

ターゲットは、Intune App SDK for .NET MAUI - Android NuGet パッケージが追加されると、コンパイル時にアプリケーションに自動的にインポートされます。

コマンド ライン ビルド ツールとの統合

コマンド ライン ビルド ツールは、SDK ドロップの BuildTool フォルダーにあります。 これは、上で詳しく説明した Gradle プラグインおよび .NET ターゲットと同じ機能を実行します。 ただし、コマンド ライン ツールはカスタム ビルド システムに統合できます。 ツールがより汎用であるため、呼び出しがより複雑になります。 可能な限り、Gradle プラグインまたは .NET ターゲットを使用します。

Command-Line ツールの使用

コマンド ライン ツールは、 BuildTool\bin ディレクトリにある指定されたヘルパー スクリプトを使用して呼び出すことができます。

このツールでは、次のパラメーターが必要です。

パラメーター 必須 説明
--input はい JAR ファイルと変更するクラス ファイルのディレクトリのセミコロン区切りのリスト。 書き換えるすべての JAR とディレクトリを含めます。
--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 は、Power BI Lake にしか表示されていないため、--classpath
  • com.contoso.SplashActivity クラスは、--input

警告

ビルド ツールは現在、aar ファイルをサポートしていません。 aar ファイルを処理しているときにビルド システムで classes.jar がまだ抽出されていない場合は、ビルド ツールを呼び出す前に抽出してください。

MAMApplication の設定

アプリが android.app.Application のサブクラスを作成する場合、ビルド プラグインまたはコマンド ライン ツールによってアプリケーション クラスが変換されます。

アプリがサブクラス化android.app.Applicationしない場合は、AndroidManifest.xml の<application>タグで "com.microsoft.intune.mam.client.app.MAMApplication""android:name" 属性として設定する必要があります

  • 最新の Android SDK ビルド ツールを使用します。
  • 不要で未使用のライブラリ (android.support.v4 など) をすべて削除します。

自動置換を実行した後、Intune アプリ 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 ですべての除外 (excludeProjectsexcludeClassesexcludeVariants) を二重チェックします。 各除外が必要であり、保護されたデータを扱っていないことを確認します。 歴史的に、多くのデータ リーク エラーは、過度に積極的な除外が原因で発生します。
  • Intune ポータル サイトをインストールせずに、コンパイルしたアプリを起動します。 アプリ保護ポリシーの対象ではない Microsoft Entra ユーザーでサインインします。 アプリが期待どおりに機能することを確認します。
    • サインアウトし、Intune ポータル サイトをインストールした状態でこのテストを繰り返します。

よくあるご質問 (FAQ)

以前、ビルド プラグインなしで SDK を統合したアプリ。ビルド プラグインの使用方法は?

以前のバージョンの Intune アプリ SDK には、クラスとメソッドの置換を実行する自動化された方法が含まれていませんでした。 開発者は、ソース コードでこれらの置換を手動で実行する必要がありました。 アプリがこの方法で統合されている場合は、ビルド プラグインまたはコマンド ライン ビルド ツールを適用しても安全です。 ソース コードの変更は必要ありません。 プロジェクトでは、引き続き MAM SDK を依存関係として一覧表示する必要があります。

次の手順

すべての 終了基準を完了したら、 ステージ 4: MAM 統合の基礎に進みます。