이 도움말에서는 번들로 묶이지 않은 앱을 통합하는 방법을 간단히 살펴봅니다. 다이얼러, 미디어, 자동차 UI 라이브러리, SMS를 포함하는 앱은 번들로 묶이지 않은 앱으로 간주합니다. 이러한 앱은 Android 플랫폼에 번들로 묶이지 않으며 연결 설정 및 기능 등록 설정을 비롯하여 자동차 측의 휴대전화 호환 앱과 UX에서 데이터를 수신하는 로직을 포함합니다.
번들로 묶이지 않은 코드에서 빌드된 APK는 여러 버전의 플랫폼에서 작동합니다.
코드 체크아웃
번들로 묶이지 않은 코드를 체크아웃하려면 다음 안내를 따르세요.
- 다음을 실행합니다.
repo init -u https://android.googlesource.com/platform/manifest -b ub-automotive-master repo sync -cq -j4
- AOSP 소스 코드로 작업하는 방법에 관한 자세한 내용은 Repo 클라이언트 초기화를 참고하세요.
코드 빌드
Android 스튜디오
Android 스튜디오에서 코드를 빌드하는 방법은 다음과 같습니다.
- Android 스튜디오에서 다음과 같이 이 빌드 파일을 가져옵니다.
packages/apps/Car/libs/aaos-apps-gradle-project/build.gradle
- Android 스튜디오에서 Gradle JDK를 버전 11 이상으로 설정합니다.
- 원하는 APK(또는 여러 APK)를 빌드합니다.
명령줄
명령줄에서 코드를 빌드하는 방법은 다음과 같습니다.
- 다음 두 가지 방법 중 하나로 Android SDK 위치를 설정합니다.
packages/apps/Car/libs/aaos-apps-gradle-project/local.properties
를 만든 후 파일에 포함된sdk.dir
속성을 설정합니다. Android 스튜디오는 프로젝트를 열 때 이 작업을 자동으로 실행할 수 있습니다. 예를 들어sdk.dir=/Users/MY-USERNAME/Library/Android/sdk
를 사용합니다.
또는ANDROID_SDK_ROOT
환경 변수를 Android SDK 경로로 설정합니다.
- 명령 프롬프트 또는 셸 창을 엽니다.
packages/apps/Car/libs/unbundled-apps-gradle-project
(으)로 이동- 다음 명령어를 실행합니다.
./gradlew assemble
필수 API 최소 수준
번들로 묶이지 않은 각 앱은 minSdkVersion
이상의 버전을 가진 Android 플랫폼에서 작동합니다. 다음 표에는 각 앱에서 지원하는 최소 API 버전이 나와 있습니다.
앱 | 최소 API 수준 |
---|---|
Calendar | 29 |
자동차 UI 라이브러리 | 29 |
CompanionDevice | 29 |
다이얼러 | 31 |
미디어 | 30 |
SMS | 30 |
AOSP 호스트 | 29 |
시스템 이미지에 사전 빌드 통합
Android 13 이상 이미지
번들로 묶이지 않은 코드는 Android 13 플랫폼에서 삭제됩니다. 따라서 다음과 같은 경우에는 사전 빌드된 APK를 플랫폼 빌드에 추가해야 할 수도 있습니다.
- CDD 규정 준수 테스트
- 권한이 있는 앱 프로비저닝
이렇게 하려면 android_app_import Soong 규칙을 사용하면 됩니다.
android_app_import { name: "CarMediaApp", apk: "CarMediaApp.apk", privileged: true, certificate: "platform", // Media must be signed by the platform required: ["allowed_privapp_com.android.car.media"], }
Android 12 이하
앱에서 Android 플랫폼 버전을 지원하는 한 (위의 표 참조) APK를 시스템 이미지에 추가할 수 있습니다. 그러나 번들로 묶이지 않은 대부분의 앱에는 Android 13보다 낮은 버전의 플랫폼에 포함된 이전 버전의 소스 코드가 있습니다. 기본적으로 Soong은 사전 빌드보다 소스 코드를 우선합니다. 따라서 android_app_import
규칙 내에서 prefer
플래그를 true
로 설정해야 합니다.
android_app_import { name: "CarDialerApp", apk: "CarDialerApp.apk", privileged: true, presigned: true, // Dialer can have its own signature required: ["allowed_privapp_com.android.car.dialer"], overrides: ["Dialer"], prefer: true, // The prebuilt replaces a source target with the same name, }
번들로 묶이지 않은 유형에 따라 나열된 앱
앱 | 권한이 있고 번들로 묶이지 않음 | 번들로 묶이지 않음 (시스템 파티션에 있지 않아도 됨) |
|
---|---|---|---|
시스템 서명 | 비시스템 서명 | ||
Calendar | X | ||
CompanionDevice | X | ||
다이얼러 | X | ||
AOSP 호스트 | X | ||
미디어 | X | ||
SMS | X | ||
업데이트 배포 | OTA | OTA 또는 Play 스토어 | OTA 또는 Play 스토어 |