Android용 Microsoft Intune 앱 SDK를 사용하면 Intune 앱 보호 정책을 네이티브 Java/Kotlin Android 앱에 통합할 수 있습니다. 이러한 정책을 MAM 정책이라고도 합니다. Intune 관리 애플리케이션은 Intune 앱 SDK와 통합된 애플리케이션입니다. Intune이 앱을 적극적으로 관리하는 경우 Intune 관리자는 Intune 관리 앱에 앱 보호 정책을 쉽게 배포할 수 있습니다.
참고
이 가이드는 여러 단계로 나뉩니다. 먼저 1단계: 통합 계획을 검토합니다.
3단계: MAM 시작
스테이지 목표
- Intune 앱 SDK를 다운로드합니다.
- Intune 앱 SDK에 포함된 파일에 대해 알아봅니다.
- 애플리케이션에서 Intune 앱 SDK를 참조하세요.
- Intune 앱 Gradle 빌드 플러그 인을 구성하거나 명령줄 빌드 도구를 사용합니다.
- Intune 앱 SDK가 빌드에 제대로 포함되어 있는지 확인합니다.
배경
이제 애플리케이션이 MSAL을 성공적으로 통합했으므로 Intune 앱 SDK를 다운로드하여 애플리케이션의 빌드 프로세스에 포함해야 합니다.
Intune 앱 SDK 통합의 상당 부분은 표준 Android 클래스 및 메서드 호출을 해당 클래스 및 메서드 호출의 Intune 버전으로 대체하는 것입니다. SDK에는 이러한 대체 항목의 대부분을 자동으로 만드는 빌드 도구가 포함되어 있습니다. 이 대체 논리에 대해 자세히 알아보려면 부록의 클래스 및 메서드 대체 섹션을 참조하세요.
Intune 앱 SDK 다운로드
SDK를 다운로드하려면 SDK 파일 다운로드를 참조하세요.
SDK에는 무엇이 있나요?
Intune 앱 SDK는 다음 파일로 구성됩니다.
- Microsoft. Intune. 엄마. SDK.aar: 지원 라이브러리 JAR 파일을 제외한 SDK 구성 요소입니다.
- com.microsoft.intune.mam.build.jar: SDK 통합을 지원하는 Gradle 플러그인입니다.
- CHANGELOG.md: 각 SDK 버전에서 변경한 내용의 레코드를 제공합니다.
-
Microsoft. Intune. 엄마. SDK. DownlevelStubs.aar: 이 안드로이드 아카이브(AAR)에는 최신 기기에만 존재하지만 MAMActivity의 메서드에서 참조하는 Android 시스템 클래스용 스텁이 포함되어 있습니다. 최신 장치는 이러한 스텁 클래스를 무시합니다. 이 AAR은 앱이 에서 파생된
MAMActivity클래스에 대한 리플렉션을 수행하는 경우에만 필요하며 대부분의 앱에는 이를 포함할 필요가 없습니다. AAR에는 모든 클래스를 제외하는 ProGuard 규칙이 포함되어 있습니다.
Intune 앱 라이브러리 참조
Intune 앱 SDK는 외부 종속성이 없는 표준 Android 라이브러리입니다. Microsoft. Intune. 엄마. SDK.aar에는 앱 보호 정책을 사용하도록 설정하는 데 필요한 인터페이스가 포함되어 있습니다. 또한 Microsoft Intune 회사 포털 앱과 상호 운용하는 데 필요한 코드도 포함되어 있습니다.
Android 스튜디오
Microsoft. Intune. 엄마. SDK.aar는 Android 라이브러리 참조로 지정해야 합니다. 빌드에 이 종속성을 추가하려면 Android 설명서에서 AAR 또는 JAR을 종속성으로 추가하는 단계를 따르세요.
Visual Studio
.NET MAUI용 Intune 앱 SDK - Android NuGet 패키지를 종속성으로 추가해야 합니다.
NuGet 패키지 관리자를 사용하여 Visual Studio에서 패키지 설치 및 관리 프로세스를 따릅니다.
Microsoft.Intune. 엄마. SDK.aar는 네임스페이스로 Microsoft.Intune.Mam 범위가 지정된 C# 참조를 생성하도록 바인딩됩니다.
프로가드
애플리케이션에서 이미 ProGuard (또는 다른 축소/난독화 메커니즘)를 빌드 단계로 사용하고 있을 수 있습니다. Intune 앱 SDK에는 해당 빌드 단계에 포함되어야 하는 ProGuard 구성 규칙이 있습니다. 다음을 포함합니다. 앞서 설명한 대로 빌드의 AAR은 SDK의 구성을 ProGuard 단계에 자동으로 통합하므로 필요한 클래스 파일이 유지됩니다. 다음을 포함한 경우 . AAR입니다. 다른 변경이 필요하지 않습니다.
MSAL(Microsoft 인증 라이브러리)은 자체 ProGuard 구성과 함께 제공됩니다. 앱이 MSAL을 통합하는 경우 자세한 내용은 MSAL 설명서 를 참조하세요.
빌드 도구
SDK는 MAM 교체를 자동으로 수행하는 빌드 도구(Gradle 빌드용 플러그 인, .NET 빌드용 대상, 명령줄 도구)를 제공합니다. 이러한 도구는 Java 컴파일에 의해 생성된 클래스 파일을 변환합니다. 원본 소스 코드를 수정하지 않습니다. Gradle 플러그 인, .NET NuGet 패키지 또는 명령줄 도구를 사용해야 합니다.
빌드 도구만으로는 애플리케이션을 완전히 통합할 수 없습니다. 이 도구는 클래스 및 메서드 교체 만 수행합니다. 다중 ID, 앱 보호 정책 등록, 앱과 장치 또는 클라우드 스토리지 위치 간의 데이터 전송을 제한하는 정책 또는 MSAL 구성과 같은 더 복잡한 SDK 통합은 수행하지 않습니다. 앱에서 Intune을 완전히 사용하도록 설정하려면 먼저 이러한 통합을 완료해야 합니다. 이 설명서의 나머지 부분에서 앱과 관련된 통합 지점을 주의 깊게 검토하세요.
디버깅
빌드 도구는 컴파일 후 교체를 수행합니다. 이러한 대체는 일부 메서드 이름을 변경합니다. 따라서 메서드 이름에 설정된 디버깅 중단점이 영향을 받을 수 있습니다. 예상대로 멈추지 않을 수도 있습니다. 줄 번호 중단점은 영향을 받지 않습니다.
스택의 MAM
Intune 앱 SDK 통합은 클래스 및 메서드 교체에 크게 의존합니다. 이러한 의존성 때문에 스택 추적 전체를 볼 수 mam 있습니다.
앱에 앱 보호 정책 대상 계정이 없으면 이 모든 MAM 코드가 유휴 상태가 됩니다. 예를 들어 MAMActivity 와 동일하게 Activity 작동 및 onMAMCreate 와 동일하게 onCreate작동합니다.
스택에서 볼 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부터는 더 이상 라이브러리를 선택적으로 처리할 수 없습니다. 모든 라이브러리가 처리됩니다.
의존 관계
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 앱 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과 관련이 없는 구성 요소(즉, 회사 데이터를 처리하거나 표시하지 않음)에 유용합니다.
다양한 범위에 대해 제외를 구성할 수 있습니다.
-
excludeProjectsGradle 프로젝트 목록을 제외할 수 있습니다. 이러한 제외는 Android 라이브러리 또는 시스템 API와 인터페이스하지 않는 프로젝트에 유용합니다. 또한 회사 데이터를 처리하지 않는 프로젝트에도 유용합니다. 예를 들어 하위 수준 네트워크 작업을 수행하기 위한 네이티브 코드만 포함된 프로젝트가 적합한 후보일 수 있습니다. 프로젝트가 Android 라이브러리 또는 시스템 API와 광범위하게 인터페이스하는 경우 이러한 제외를 피합니다. -
excludeClasses클래스 목록을 제외할 수 있습니다. 이러한 제외는 회사 데이터를 처리하거나 제공하지 않는 클래스에 유용합니다. 예를 들어 시작 화면과 온보딩Activity이 좋은 후보입니다. 클래스의 수퍼 클래스가 처리되면 클래스를 제외할 수 없습니다. -
excludeVariants프로젝트 변형을 제외할 수 있습니다. 이러한 제외는 전체 변형 이름 또는 단일 버전을 참조할 수 있습니다. MAM이 아닌 버전의 앱을 빌드하려는 경우에 특히 유용합니다. 예를 들어 앱에 빌드 유형debugrelease이 있고 {,MAM} 및 {mock,production} 버전noMAM이 있는 경우 다음을 지정할 수 있습니다.-
noMAMnoMAM 버전이 있는 모든 변형을 제외하거나 -
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변형은 다시 작성되지 않습니다.
보고
빌드 플러그인은 변경 내용에 대한 html 보고서를 생성할 수 있습니다.
이 보고서 생성을 요청하려면 구성 블록에서 지정 report = true 하십시오 intunemam .
보고서가 생성되면 빌드 디렉터리에 보고서가 기록 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 대상은 SDK의 일부로 Microsoft.Intune으로 배포됩니다. Maui.Essentials.android.targets입니다.
.NET MAUI용 Intune 앱 SDK - Android NuGet 패키지가 추가되면 컴파일 시 대상을 애플리케이션에 자동으로 가져옵니다.
명령줄 빌드 도구와 통합
명령줄 빌드 도구는 SDK 드롭의 폴더에서 BuildTool 사용할 수 있습니다.
위에서 자세히 설명한 Gradle 플러그 인 및 .NET 대상과 동일한 기능을 수행합니다. 그러나 명령줄 도구를 사용자 지정 빌드 시스템에 통합할 수 있습니다.
이 도구는 더 일반적이기 때문에 호출하기가 더 복잡합니다. 가능하면 Gradle 플러그인 또는 .NET 대상을 사용합니다.
Command-Line 도구 사용
명령줄 도구는 디렉터리에 BuildTool\bin 있는 제공된 도우미 스크립트를 사용하여 호출할 수 있습니다.
이 도구에는 다음 매개 변수가 필요합니다.
| 매개 변수 | 필수 | 설명 |
|---|---|---|
--input |
예 | 수정할 JAR 파일 및 클래스 파일의 디렉터리를 세미콜론으로 구분한 목록입니다. 다시 작성하려는 모든 JAR 및 디렉터리를 포함합니다. |
--output |
예 | 수정된 클래스를 저장할 JAR 파일 및 디렉터리의 세미콜론으로 구분된 목록입니다. 입력 항목당 하나의 출력 항목을 동일한 순서로 나열합니다. |
--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.jarPower BI 계정으로만 나열되므로 다시 작성 되지 않습니다.--classpath - 클래스가
com.contoso.SplashActivityPower BI에 있더라도 다시 작성되지--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 앱 SDK는 Android API에서 제공하는 계약을 계속 유지합니다. 그러나 정책 적용의 결과로 실패 조건이 더 자주 트리거될 수 있습니다. 다음 Android 모범 사례는 실패 가능성을 줄입니다.
- 이제 반환
null할 수 있는 Android SDK 함수가 반환null될 가능성이 더 높습니다. 검사가 이러한 함수 호출을 보호하는지null확인합니다. - 와 같이
clipboardManager.getPrimaryClipDescription()확인할 수 있는 기능은 MAM 대체 API(예MAMClipboard.getPrimaryClipDescription(clipboardManager): )를 통해 확인해야 합니다. - 파생된 함수는 수퍼 클래스 버전을 호출해야 합니다.
- 모호한 방식으로 API를 사용하지 마세요. 예를 들어 확인하지 않고 사용하면
Activity.startActivityForResult이상한 동작이requestCode발생합니다.
서비스
정책 시행은 Android 서비스 상호 작용에 영향을 줄 수 있습니다.
바인딩된 서비스 연결을 설정하는 메서드는 Context.bindService 기본 정책 시행 Service.onBind 으로 인해 실패할 수 있으며 또는 ServiceConnection.onServiceDisconnected가 발생할 ServiceConnection.onNullBinding 수 있습니다.
설정된 바인딩된 서비스와 상호 작용하면 정책 시행Binder.onTransact으로 인해 .SecurityException
바인딩된 서비스의 클라이언트는 서비스에서 throw된 예외를 검사하는 것이 좋습니다. 예외가 클라이언트 애플리케이션의 나머지 부분에 전파되지 않도록 합니다.
종료 조건
빌드 플러그 인을 구성하거나 명령줄 도구를 빌드 프로세스에 통합한 후 성공적으로 실행되고 있는지 확인합니다.
- 빌드가 성공적으로 컴파일되고 빌드되는지 확인합니다.
- 플래그를
report구성한 다음 보고서 문서를 열고 클래스 및 메서드 교체가 발생하는지 확인합니다.- 플러그 인을 사용하는 경우 보고의 단계를 수행합니다.
- 명령줄 도구를 사용하는 경우 플래그를 포함합니다.
--report
- 플러그 인을 사용하는 경우 플래그를
verify구성하고 오류가 발생하지 않는지 확인합니다. 확인을 참조하세요. - build.gradle에서 모든 제외(
excludeProjects,excludeClasses및excludeVariants)를 다시 검사합니다. 각 제외가 필요하고 보호된 데이터를 처리하지 않는지 확인합니다. 지금까지 많은 데이터 누출 오류는 지나치게 공격적인 제외로 인해 발생합니다. -
Intune 회사 포털을 설치하지 않고 컴파일된 앱을 시작합니다. 앱 보호 정책 대상이 아닌 Microsoft Entra 사용자로 로그인합니다. 앱이 예상대로 작동하는지 확인합니다.
- 로그아웃하고 Intune 회사 포털이 설치된 상태에서 이 테스트를 반복합니다.
FAQ
내 앱이 이전에 빌드 플러그인 없이 SDK를 통합했습니다. 빌드 플러그인을 사용하려면 어떻게 해야 하나요?
이전 버전의 Intune 앱 SDK에는 클래스 및 메서드 바꾸기를 수행하는 자동화된 방법이 포함되어 있지 않습니다. 개발자는 소스 코드에서 이러한 대체를 수동으로 수행해야 했습니다. 앱이 이러한 방식으로 통합된 경우 빌드 플러그 인 또는 명령줄 빌드 도구를 적용하는 것이 안전합니다. 소스 코드를 수정할 필요가 없습니다. 프로젝트는 여전히 MAM SDK를 종속성으로 나열해야 합니다.
다음 단계
모든 종료 조건을 완료한 후 4단계: MAM 통합 기초로 진행합니다.