本プロジェクトは、Intune SDK と MSAL を利用して、MAM を適用できるようにした Android のサンプルアプリです。 本プロジェクトを自分の環境でビルド/実行するための手順を説明します。
2025年11月時点では、JDK 17 が比較的安定しているとのことで、こちらをインストールします。
-
Adoptium Temurin JDK 17 から、JDK 17 - LTS の Windows 版をダウンロードします。
-
ダウンロードしたインストーラーを実行してインストールします。
以下の環境変数を設定します:
# システム環境変数を設定
JAVA_HOME = C:\Program Files\Eclipse Adoptium\jdk-17.x.x
Path に %JAVA_HOME%\bin を追加確認コマンド:
PS C:\Users\hatakemu> java -version
openjdk version "17.0.17" 2025-10-21
OpenJDK Runtime Environment Temurin-17.0.17+10 (build 17.0.17+10)
OpenJDK 64-Bit Server VM Temurin-17.0.17+10 (build 17.0.17+10, mixed mode, sharing)
PS C:\Users\hatakemu> javac -version
javac 17.0.17-
Android Studio とアプリツールのダウンロード - Android デベロッパー から Windows 64 bit 用のインストーラーをダウンロードします。
-
ダウンロードしたインストーラーを実行してインストールします。
注意: アンインストールが必要な場合は、こちらのサイト が参考になります。(コントロールパネルからアンインストールするだけでは、多くのコンポーネントが残ります。)
-
インストール後、Android Studio を起動します。
-
"Install Type" 画面で "Standard" を選択します。
- "License Agreement" で "Accept" を選択してコンポーネントをインストールします。
-
Android Studio を起動後、"More Actions" から "SDK Manager" を選択します。
-
"SDK Platforms" タブで以下をインストールします:
- Android 14.0 ("UpsideDownCake") - API Level 34(2025年10月時点で Intune SDK 安定稼働バージョン)
- "OK" をクリックしてインストールします。
デバッグ用のキーストアを作成するため、新しいプロジェクトを作成します:
- Android Studio で "New Project (+)" から "Empty Activity" を選択します。
C:\Users\<ユーザー名>\.android\debug.keystoreが作成されたことを確認します。 プロジェクトをクローンする場合には、新しいプロジェクトは不要なので必要に応じて削除します。自分でプロジェクトを作成する場合には、名前や Package name を入力して作成します。 Package name (Application ID) は一意である必要があり、後に作成する Entra アプリにも指定するものです。
以下の環境変数を設定します:
# Android SDK環境変数を設定
ANDROID_SDK_ROOT = "C:\Users\<ユーザー名>\AppData\Local\Android\Sdk"
Path に C:\Users\<ユーザー名>\AppData\Local\Android\Sdk\platform-tools を追加確認コマンド:
PS C:\> adb version
Android Debug Bridge version 1.0.41
Version 36.0.0-13206524
Installed as C:\Users\hatakemu\AppData\Local\Android\Sdk\platform-tools\adb.exe
Running on Windows 10.0.22621- Android Studio 右側の "Device Manager" アイコンをクリックします。
- "Create Virtual Device" を選択します。
- "Phone" カテゴリから "Pixel 8" を選択します(API バージョン 34 - Android 14 対応)
-
"API 34 'UpsideDownCake', Android 14.0" を選択します。
-
"★マーク" のついたダウンロードコンポーネントをクリックしてシステムイメージをダウンロードします。
- "Finish" をクリックしてデバイスを作成します。
cd C:\Users\<ユーザー名>\AndroidStudioProjects
git clone https://github.com/hatakemu/MAMTestAndroid.git <任意のプロジェクト名>Git を使っていない場合には、MAMTestAndroid から ZIP ファイルをダウンロードして、C:\Users\<ユーザー名>\AndroidStudioProjects 配下に展開してください。
Android Studio で "File" - "Open" から展開したプロジェクトフォルダーを選択すると、Android Studio 上のプロジェクトとして読み込まれるはずです。
一度クリーンビルドを行い、ビルドが通ることを確認します。
cd <プロジェクトフォルダーのパス>
.\gradlew.bat clean
.\gradlew.bat assembleDebugビルドエラーが表示される場合
この時点でビルドエラーが表示される場合、以下をお試しください。
- PC を再起動後、
app/buildおよびapp/releaseフォルダを削除します - Android Studio から、"File" - "Invalidate Caches" を開き、"Invalidate and Restart" を実行します
上記を実施してもビルドエラー(デバッグモード)が取れない場合には、VS Code でプロジェクトを開き、エラー内容について Github Copilot に対応を聞くと、だいたい対処してくれます。現時点では、リリースモードのキーストアが作成されていないため、リリースモードでのビルドは失敗します。
Android Enterprise に Managed Google Play から限定公開アプリとして配布するためには、リリースビルド用の署名がついた .apk ファイルが必要です。そのため、リリースビルド用のキーストアを作成します。
- Android Studio で "Build" → "Generate Signed App Bundle or APK..." を選択します。
- "APK" を選択して "Next" をクリックします。
- "Create new..." をクリックして新しいキーストアを作成します。
- キーストア情報を入力します。
- Key store path: キーストアファイルの保存場所 (.jks まで入力)
- Password: キーストアのパスワード
- Key Alias: キーのエイリアス名
- Key Password: キーのパスワード
- Validity (years): 有効期限
- Certificate: 発行者情報
- "First and Last Name": 氏名
- "Organizational Unit": 部署名
- "Organization": 組織名
- "City or Locality": 市区町村
- "State or Province": 都道府県
- "Country Code (XX)": 国コード
- "OK" をクリックしてキーストアを作成します。指定したパスにキーが作成されていることを確認します。
Android アプリで MSAL を利用する場合、キーのハッシュ値を Entra に登録するアプリに指定する必要があります。デバッグ用、リリース用のキーのハッシュ値をここで取得しておきます。
デバッグ用のキーのハッシュ値取得
# デバッグ署名の SHA1 を抽出
$sha1Line = keytool -list -v -keystore "$env:USERPROFILE\.android\debug.keystore" `
-alias androiddebugkey -storepass android | Select-String -Pattern "SHA1:\s*([0-9A-F:]+)"
# コロンを除去して Base64 エンコード
$hex = ($sha1Line.Matches[0].Groups[1].Value -replace ":", "")
$bytes = for ($i=0; $i -lt $hex.Length; $i+=2) { [Convert]::ToByte($hex.Substring($i,2),16) }
$base64Std = [Convert]::ToBase64String($bytes)
$base64Std
**出力例**
PS C:\WINDOWS\system32> $base64Std
Nli7ogtDVf4QgBfSiuIrWDWEymU=リリース用のキーのハッシュ値取得
# リリース署名キーストアとエイリアス (各環境毎の値に置き換えてください)
$keystore = "C:\Users\hatakemu\.android\releasekey\release.jks"
$alias = "key0"
# keytool 実行(対話でパスワード入力)
$out = & keytool -list -v -keystore $keystore -alias $alias
--> キーストアのパスワードを入力
# SHA1 行を抽出
$sha1Line = $out | Select-String -Pattern "SHA1:\s*([0-9A-F:]+)"
# コロンを除去して Base64 エンコード
$hex = ($sha1Line.Matches[0].Groups[1].Value -replace ":", "")
$bytes = for ($i=0; $i -lt $hex.Length; $i+=2) { [Convert]::ToByte($hex.Substring($i,2),16) }
$base64Std = [Convert]::ToBase64String($bytes)
$base64Std
**出力例**
PS C:\WINDOWS\system32> $base64Std
8w2Zbr8qkGWysNZAl1DlAgmu1AA=本アプリの Application ID は com.hatakemu.android.mamtest です。Application ID は一意である必要があるため、自分独自の Application ID(例:jp.co.android.mamapp)に変更する必要があります。
ファイル: app/build.gradle.kts の applicationId を変更します。
android {
defaultConfig {
applicationId = "jp.co.android.mamapp" ★
// ...
}
}ファイル: app/src/main/AndroidManifest.xml の android:host を変更します。
<data
android:scheme="msauth"
android:host="jp.co.android.mamapp" ★
android:path="${redirectPath}" />ファイル: app/src/debug/res/raw/msal_config.json および app/src/release/res/raw/msal_config.json の redirect_uri の Application ID 部分を変更します。
{
"redirect_uri": "msauth://jp.co.android.mamapp/YOUR_SIGNATURE_HASH",
// ...
}一度クリーンビルドを行い、ビルドが通ることを確認します。
cd <プロジェクトフォルダーのパス>
.\gradlew.bat sync
.\gradlew.bat clean
.\gradlew.bat assembleDebugEntra 管理センター で アプリの登録 から新規アプリを登録します。名前 には任意のアプリ名を入力し、そのまま 登録 します。

- 上記で追加したプラットフォーム構成の URI の追加 から パッケージ名 と 署名ハッシュ を追加します。
- 保存 します。
- 作成したアプリの API のアクセス許可 から アクセス許可の追加 を選択し、以下の API のアクセス許可を追加します。
- Microsoft Mobile Application Management の DeviceManagementManagedApps.ReadWrite (MAM 用)
"所属する組織で使用している API" を選択し、Microsoft Mobile Application Management で検索をして、表示された DeviceManagementManagedApps.ReadWrite にチェックを入れてアクセス許可を追加します。

- Microsoft Graph の Files.ReadWrite (OneDrive 読み書き用)
Microsoft API の Microsoft Graph を選択し、委任されたアクセス許可 を選択して、Files.ReadWrite を検索してチェックを入れてアクセス許可を追加します。

ファイル: app/src/main/java/com/hatakemu/android/mamtest/config/AppConfig.kt
YOUR_TENANT_ID_HERE に自分の環境のテナント ID を設定します。
object AppConfig {
// === 自分のテナントIDに変更 ===
const val TENANT_ID: String = "YOUR_TENANT_ID_HERE"
const val TENANT_AUTHORITY: String = "https://login.microsoftonline.com/$TENANT_ID"
// === MAM サインイン スコープ(特に機能を追加しない限り変更不要)===
const val MAM_SIGNIN_SCOPE: String = "https://msmamservice.api.application/.default"
}ファイル: app/src/debug/res/raw/msal_config.json
以下をそれぞれの環境に合わせて設定します。
- YOUR_CLIENT_ID_HERE: 手順 7 で登録した Entra アプリの App ID
- YOUR_PACKAGE_NAME: 手順 6 で指定した Application ID (例:
jp.co.android.mamapp) - YOUR_DEBUG_SIGNATURE_HASH: 手順 5 で取得した デバッグ用のキーハッシュ値
- YOUR_TENANT_ID_HERE: Entra のテナント ID
{
"client_id": "YOUR_CLIENT_ID_HERE",
"authorization_user_agent": "DEFAULT",
"redirect_uri": "msauth://YOUR_PACKAGE_NAME/YOUR_DEBUG_SIGNATURE_HASH",
"broker_redirect_uri_registered": true,
"account_mode": "SINGLE",
"authorities": [
{
"type": "AAD",
"audience": {
"type": "AzureADMyOrg",
"tenant_id": "YOUR_TENANT_ID_HERE"
}
}
]
}ファイル: app/src/release/res/raw/msal_config.json
以下をそれぞれの環境に合わせて設定します。
- YOUR_CLIENT_ID_HERE: 手順 7 で登録した Entra アプリの App ID
- YOUR_PACKAGE_NAME: 手順 6 で指定した Application ID (例:
jp.co.android.mamapp) - YOUR_RELEASE_SIGNATURE_HASH: 手順 5 で取得した リリース用のキーハッシュ値
- YOUR_TENANT_ID_HERE: Entra のテナント ID
{
"client_id": "YOUR_CLIENT_ID_HERE",
"authorization_user_agent": "DEFAULT",
"redirect_uri": "msauth://YOUR_PACKAGE_NAME/YOUR_RELEASE_SIGNATURE_HASH",
"broker_redirect_uri_registered": true,
"account_mode": "SINGLE",
"authorities": [
{
"type": "AAD",
"audience": {
"type": "AzureADMyOrg",
"tenant_id": "YOUR_TENANT_ID_HERE"
}
}
]
}注意 msal_config.json に記述するハッシュ値は、URLエンコードする必要があります。最後の = は %3D に置き換えてください。(Entra アプリの MSAL 構成 に表示されている redirect_uri をそのまま記述してください。)
ファイル: app/build.gradle.kts
以下をそれぞれの環境に合わせて設定します。
- storeFile: 手順 4 で作成した リリース用のキーストアのパス
- storePassword: 手順 4 で作成した リリース用のキーストアのパスワード
環境変数 AND_REL_KEYSTORE_PASS にセットするか、YOUR_KEYSTORE_PASSWORD に記述します。 - keyAlias: 手順 4 で作成した リリース用のキーのエイリアス
- keyPassword: 手順 4 で作成した リリース用のキーのパスワード
環境変数 AND_REL_KEY_PASS にセットするか、YOUR_KEY_PASSWORD に記述します。
signingConfigs {
create("release") {
storeFile = file("C:\\path\\to\\your\\release.jks")
storePassword = System.getenv("AND_REL_KEYSTORE_PASS") ?: "YOUR_KEYSTORE_PASSWORD"
keyAlias = "key0"
keyPassword = System.getenv("AND_REL_KEY_PASS") ?: "YOUR_KEY_PASSWORD"
}
}- YOUR_DEBUG_HASH: 手順 5 で取得した デバッグ用のキーハッシュ値
- YOUR_RELEASE_HASH: 手順 5 で取得した リリース用のキーハッシュ値
buildTypes {
getByName("debug") {
manifestPlaceholders.put("redirectPath", "/YOUR_DEBUG_HASH")
}
getByName("release") {
signingConfig = signingConfigs.getByName("release")
manifestPlaceholders.put("redirectPath", "/YOUR_RELEASE_HASH")
// ...
}
}注意 build.gradle.kts に記述するハッシュ値は、URLエンコードする必要はありません。最後の = はそのまま記述します。
コマンドを利用する場合、以下を実行します。
cd <プロジェクトフォルダー>
.\gradlew.bat sync-
Android Studio で、"Build" - "Clean Project" を実行します。
-
"Run" ボタン ▷ からデバッグ実行できます。
コマンドでデバッグビルドを行う場合、以下を実行します。
cd <プロジェクトフォルダー>
.\gradlew.bat assembleDebug注意 MAM を適用するためには、ポータルサイトアプリをデバイスにインストールする必要があります。
- 手順 8.3 で、キーストアとキーのパスワードが、環境変数に設定されているか、 build.gradle.kts に記述されていることを確認します。
# 環境変数を設定
$env:AND_REL_KEYSTORE_PASS = "your_keystore_password"
$env:AND_REL_KEY_PASS = "your_key_password"注意 環境変数を設定した場合、設定した環境変数を読み込ませるために Android Studio を一度再起動する必要があります。
-
Android Studio で "Build" → "Generate Signed App Bundle or APK..." を選択します。
-
APK を選択して Next をクリックします。
-
作成したリリース用のキーストアが選択されていることを確認し、Next をクリックします。
locate のリンク先(<プロジェクトフォルダー>\app\release)に app-release.apk が作成されます。
Google Managed Play の限定公開アプリとして、このリリースビルドの .apk をアップロードして公開し、デバイスに配布することができます。
注意
.apk を更新したい場合には、app/build.gradle.kts でアプリのバージョンを上げないと、Google Play 側で蹴られてしまうので注意してください。
defaultConfig {
applicationId = "com.hatakemu.android.mamtest"
minSdk = 26
targetSdk = 34
versionCode = 2 ★
versionName = "2.0" ★
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}コマンドでリリースビルドを行う場合、以下を実行します。
cd <プロジェクトフォルダー>
.\gradlew.bat assembleRelease



















