Android 用 Intune App SDK - MAM の概要

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

注:

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

ステージ 3: MAM の概要

ステージの目標

  • Intune App SDK をダウンロードします。
  • Intune App SDK に含まれるファイルについて説明します。
  • アプリケーションで Intune App SDK を参照します。
  • Intune App Gradle ビルド プラグインを構成するか、コマンド ライン ビルド ツールを利用します。
  • 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 ライブラリ参照として指定する必要があります。

  1. Android Studio でアプリ プロジェクトを開き、[ ファイル] > [新しい] > [新しい] モジュールに移動します。
  2. [ インポート] を選択します。瓶/。AAR パッケージ
  3. [Microsoft.Intune.MAM.SDK.aar] を選択して、 のモジュールを作成します 。AAR ファイルの 種類。
  4. アプリ コードを含むモジュールまたはモジュールを右クリックし、[モジュールの設定>[依存関係] タブ>+ アイコン>[モジュールの依存関係] に移動します。
  5. 作成した MAM SDK AAR モジュールを選択し、[ OK] を選択します。 この参照を追加すると、プロジェクトのビルド時にモジュールが MAM SDK でコンパイルされます。

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 コードはすべて休止状態になります。 MAMActivityActivityと同じように動作し、 onMAMCreateonCreateと同じように動作します。スタックに mam が表示されたら、まず、次の点を確認してください。

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

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

必要なツールは何ですか?

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

.NET MAUI を使用してアプリをビルドする場合は、「.NET MAUI ターゲットとの統合」を参照してください。

上記のどちらも使用してアプリをビルドする場合は、「 コマンド ライン ツールとの統合」を参照してください。

Gradle ビルド プラグインとの統合

Intune App SDK プラグインは、SDK の一部として GradlePlugin/com.microsoft.intune.mam.build.jarとして配布されます。

プラグインを 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があり、フレーバー {noMAMMAM} と {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
}

.NET MAUI ターゲットとの統合

Intune App SDK ターゲットは、SDK の一部として Microsoft.Intune.Maui.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 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 のすべての除外 (excludeProjectsexcludeClassesexcludeVariants) を再確認します。 各除外が必要であり、保護されたデータを処理しないことを確認します。 これまで、多くのデータ リーク エラーが発生しました。これは、過度に積極的な除外が原因です。
  • Intune ポータル サイトがインストールされていない場合は、コンパイル済みアプリを起動し、App Protection Policy の対象ではない Microsoft Entra ユーザーとログインし、アプリが期待どおりに機能することを確認します。
    • Intune ポータル サイトがインストールされている 状態で ログアウトし、このテストを繰り返します。

FAQ

私のアプリは以前にビルドプラグインなしで SDK を統合しました。ビルド プラグインを使用するにはどうすればよいですか?

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

次の手順

すべての 終了条件を完了したら、 ステージ 4: MAM Integration Essentials に進みます。