일반 시스템 이미지

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

일반 시스템 이미지(GSI)는 Android 기기에 맞게 구성이 조정된 시스템 이미지입니다. Android 9 이상을 실행하는 모든 Android 기기에서 성공적으로 실행할 수 있는 수정되지 않은 AOSP(Android 오픈 소스 프로젝트) 코드가 포함된 순수한 Android 구현으로 간주됩니다.

GSI는 VTS 및 CTS-on-GSI 테스트를 실행하는 데 사용됩니다. Android 기기의 시스템 이미지는 GSI로 교체된 다음 VTS(Vendor Test Suite)CTS(Compatibility Test Suite) 로 테스트되어 기기가 최신 버전의 Android와 올바르게 공급업체 인터페이스를 구현하는지 확인합니다.

GSI를 시작하려면 다음 섹션에서 GSI 구성 (및 허용되는 편차) 및 유형 에 대한 세부정보를 검토하세요. GSI를 사용할 준비가 되면 장치 대상에 대한 GSI를 다운로드 및 빌드한 다음 GSI를 Android 장치에 플래시합니다 .

GSI 구성 및 편차

현재 Android GSI의 구성은 다음과 같습니다.

현재 Android GSI에는 다음과 같은 주요 차이가 있습니다.

  • CPU 아키텍처. 다양한 CPU 명령(ARM, x86 등) 및 CPU 비트(32비트 또는 64비트)를 지원합니다.

Treble 컴플라이언스 테스트를 위한 GSI 대상

규정 준수 테스트에 사용되는 GSI는 기기가 실행되는 Android 버전에 따라 결정됩니다.

기기 종류 빌드 대상
Android 12로 출시되는 기기 gsi_$arch-user (서명됨)
Android 11로 출시되는 기기 gsi_$arch-user (서명됨)
Android 10으로 출시되는 기기 gsi_$arch-user (서명됨)
Android 9로 출시되는 기기 gsi_$arch-userdebug

모든 GSI는 Android 12 코드베이스에서 빌드되며 각 CPU 아키텍처에는 해당 GSI 바이너리가 있습니다( GSI 빌드의 빌드 대상 목록 참조).

Android 12 GSI 변경사항

Android 12로 출시되거나 업데이트된 기기는 규정 준수 테스트를 위해 Android 12 GSI를 사용해야 합니다. 여기에는 이전 GSI의 다음과 같은 주요 변경 사항이 포함됩니다.

  • 대상 이름. 규정 준수 테스트의 GSI 대상 이름이 gsi_$arch 로 변경되었습니다. 대상 이름이 aosp_$arch 인 GSI는 Android 앱 개발자를 위해 유지됩니다. 공급업체 인터페이스 테스트를 위해 테스트 계획 CTS-on-GSI 도 축소되었습니다.
  • 레거시 GSI는 단계적으로 중단됩니다. GSI 12는 완전히 Treblized되지 않은 Android 8.0 또는 8.1 장치를 수용하는 해결 방법을 제거합니다.
  • 사용자 디버그 SEPolicy. GSI gsi_$arch 에는 userdebug_plat_sepolicy.cil 이 포함되어 있습니다. OEM 관련 vendor_boot-debug.img 또는 boot-debug.img 를 플래싱할 때 /system/bin/init 는 GSI system.img 에서 userdebug_plat_sepolicy.cil 을 로드합니다. 자세한 내용 은 디버그 램디스크로 VTS 테스트를 참조하십시오.

Android 11 GSI 변경사항

Android 11로 출시되거나 업데이트된 기기는 규정 준수 테스트를 위해 Android 11 GSI를 사용해야 합니다. 여기에는 이전 GSI의 다음과 같은 주요 변경 사항이 포함됩니다.

  • system_ext 콘텐츠. Android 11은 새 파티션 system_ext 를 정의합니다. GSI는 system/system_ext 폴더 아래에 시스템 확장 콘텐츠를 넣습니다.
  • APEX. GSI에는 평면화된 APEX와 압축된 APEX가 모두 포함되어 있습니다. 어떤 것을 사용할지는 런타임 시 공급업체 파티션의 시스템 속성 ro.apex.updatable 에 의해 결정됩니다. 자세한 내용은 APEX 업데이트를 지원하도록 시스템 구성을 참조하세요.

Android 10 GSI 변경사항

Android 10으로 출시되거나 업데이트된 기기는 규정 준수 테스트를 위해 Android 10 GSI를 사용해야 합니다. 여기에는 이전 GSI의 다음과 같은 주요 변경 사항이 포함됩니다.

  • 사용자 빌드. GSI에는 Android 10의 사용자 빌드가 있습니다. Android 10에서 사용자 빌드 GSI는 CTS-on-GSI/VTS 규정 준수 테스트에 사용할 수 있습니다. 자세한 내용 은 디버그 램디스크로 VTS 테스트를 참조하십시오.
  • 희소 형식이 아닙니다. 대상이 aosp_$arch GSI는 희소하지 않은 형식으로 빌드됩니다. 필요한 경우 img2simg 를 사용하여 희소하지 않은 GSI를 희소 형식으로 변환할 수 있습니다.
  • 루트로서의 시스템. aosp_$arch_a 라는 레거시 GSI 빌드 대상이 단계적으로 제거되었습니다. Android 8 또는 8.1에서 Android 10으로 ramdisk 및 non-system-as-root로 업그레이드된 기기의 경우 레거시 GSI aosp_$arch_ab 를 사용하세요. ramdisk의 업그레이드된 init 는 system-as-root 레이아웃으로 OEM system.img를 지원합니다.
  • 부팅을 확인합니다. GSI를 사용하면 장치 잠금을 해제하기만 하면 됩니다. 확인 부팅을 비활성화할 필요는 없습니다.

Android 9 GSI 변경사항

Android 9로 출시되거나 업데이트된 기기는 규정 준수 테스트를 위해 Android 9 GSI를 사용해야 합니다. 여기에는 이전 GSI의 다음과 같은 주요 변경 사항이 포함됩니다.

  • GSI와 에뮬레이터를 병합합니다. GSI는 에뮬레이터 제품의 시스템 이미지(예: aosp_arm64aosp_x86 )에서 빌드됩니다.
  • 루트로서의 시스템. 이전 버전의 Android에서는 A/B 업데이트를 지원하지 않는 기기가 /system 디렉터리 아래에 시스템 이미지를 마운트할 수 있었습니다. Android 9에서는 시스템 이미지의 루트가 기기의 루트로 마운트됩니다.
  • 64비트 바인더 인터페이스. Android 8.x에서 32비트 GSI는 32비트 바인더 인터페이스를 사용했습니다. Android 9은 32비트 바인더 인터페이스를 지원하지 않으므로 32비트 GSI와 64비트 GSI 모두 64비트 바인더 인터페이스를 사용합니다.
  • VNDK 시행. Android 8.1에서 VNDK는 선택사항이었습니다. Android 9부터는 VNDK가 필수이므로 BOARD_VNDK_VERSION 을 설정 해야 합니다.
  • 호환되는 시스템 속성입니다. Android 9에서는 호환되는 시스템 속성( PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true )에 대한 액세스 확인을 사용 설정합니다.

Android 9 Keymaster 변경사항

이전 버전의 Android에서는 실행 중인 시스템에서 보고한 버전 정보( ro.build.version.releasero.build.version.security_patch )가 부트로더에서 보고한 버전 정보와 일치하는지 확인하기 위해 Keymaster 3 이하를 구현하는 기기가 필요했습니다. 이러한 정보는 일반적으로 부팅 이미지 헤더에서 가져왔습니다.

Android 9 이상에서는 공급업체가 GSI를 부팅할 수 있도록 이 요구사항이 변경되었습니다. 특히 Keymaster는 GSI에서 보고한 버전 정보가 공급업체의 부트로더에서 보고한 버전 정보와 일치하지 않을 수 있으므로 확인을 수행하면 안 됩니다. Keymaster 3 이하를 구현하는 기기의 경우 공급업체는 인증을 건너뛰도록 Keymaster 구현을 수정해야 합니다(또는 Keymaster 4로 업그레이드). Keymaster에 대한 자세한 내용은 Hardware-backed Keystore 를 참조하세요.

GSI 다운로드

ci.android.com 의 AOSP 지속적 통합(CI) 웹사이트에서 사전 빌드된 GSI를 다운로드할 수 있습니다. 하드웨어 플랫폼에 대한 GSI 유형을 다운로드할 수 없는 경우 특정 대상에 대한 GSI 빌드에 대한 자세한 내용은 다음 섹션을 참조하십시오.

GSI 구축

Android 9부터 각 Android 버전에는 AOSP의 DESSERT -gsi 라는 GSI 분기가 있습니다(예: android12-gsi 는 Android 12의 GSI 분기임). GSI 브랜치에는 모든 보안 패치GSI 패치 가 적용된 Android 콘텐츠가 포함됩니다.

GSI를 빌드하려면 GSI 분기에서 다운로드 하고 GSI 빌드 대상을 선택하여 Android 소스 트리를 설정합니다. 아래의 빌드 대상 표를 사용하여 기기의 올바른 GSI 버전을 확인하세요. 빌드가 완료된 후 GSI는 시스템 이미지(즉, system.img )이며 출력 폴더 out/target/product/ generic_arm64 에 나타납니다.

예를 들어 GSI 빌드 대상 gsi_arm64-userdebug 를 GSI 브랜치 android12-gsi 에 빌드하려면 다음 명령을 실행합니다.

$ repo init -u https://android.googlesource.com/platform/manifest -b android12-gsi
$ repo sync -cq
$ source build/envsetup.sh
$ lunch gsi_arm64-userdebug
$ make -j4

Android GSI 빌드 타겟

다음 GSI 빌드 대상은 Android 9 이상에서 실행되는 기기용입니다.

GSI 이름 CPU 아치 바인더 인터페이스 비트니스 System-as-root 빌드 타겟
gsi_arm 64 와이 gsi_arm-user
gsi_arm-userdebug
gsi_arm64 ARM64 64 와이 gsi_arm64-user
gsi_arm64-userdebug
gsi_x86 x86 64 와이 gsi_x86-user
gsi_x86-userdebug
gsi_x86_64 x86-64 64 와이 gsi_x86_64-user
gsi_x86_64-userdebug

플래싱 GSI 요구사항

Android 기기는 디자인이 다를 수 있으므로 모든 기기에 적용할 GSI를 플래싱하기 위한 일반적인 명령어나 명령어 집합이 없습니다. 명시적인 깜박임 지침은 Android 장치 제조업체에 문의하십시오. 다음 단계를 일반적인 지침으로 사용하십시오.

  1. 장치에 다음이 있는지 확인하십시오.
    • 트레블라이즈
    • 장치 잠금 해제 방법( fastboot 를 사용하여 플래시할 수 있도록)
    • 잠금 해제 상태로 fastboot 를 통해 플래시할 수 있습니다(최신 버전의 fastboot 를 사용하려면 Android 소스 트리에서 빌드하세요.).
  2. 현재 시스템 파티션을 지운 다음 GSI를 시스템 파티션으로 플래시합니다.
  3. 사용자 데이터를 지우고 필요한 다른 파티션(예: 사용자 데이터 및 시스템 파티션)에서 데이터를 지웁니다.
  4. 장치를 재부팅하십시오.

예를 들어 GSI를 Pixel 기기에 플래시하려면 다음 단계를 따르세요.

  1. fastboot 모드로 부팅 하고 부트로더 잠금을 해제합니다 .
  2. fastbootd 를 지원하는 장치는
    $ fastboot reboot fastboot
    를 통해 fastbootd 로 부팅해야 합니다.
  3. GSI를 지우고 시스템 파티션으로 플래시:
    $ fastboot erase system
    $ fastboot flash system system.img
    
  4. 사용자 데이터를 지우고 필요한 다른 파티션(예: 사용자 데이터 및 시스템 파티션)에서 데이터 지우기:
    $ fastboot -w
  5. 재부팅:
    $ fastboot reboot
시스템 파티션이 더 작은 Android 10 이상 기기에서는 GSI를 플래싱할 때 다음 오류 메시지가 나타날 수 있습니다.
    Resizing 'system_a'    FAILED (remote: 'Not enough space to resize partition')
    fastboot: error: Command failed
다음 명령을 사용하여 제품 파티션을 삭제하고 시스템 파티션을 위한 공간을 확보하십시오. 이렇게 하면 GSI를 플래시할 추가 공간이 제공됩니다.
$ fastboot delete-logical-partition product_a
접미사 _a 는 시스템 파티션의 슬롯 ID와 일치해야 합니다(예: 이 예의 system_a ).

GSI에 기여

Android는 GSI 개발에 대한 귀하의 기여를 환영합니다. 다음을 통해 참여하고 GSI 개선에 도움을 줄 수 있습니다.

  • GSI 패치 생성. DESSERT -gsi 는 개발 분기가 아니며 AOSP 마스터 분기의 체리픽만 허용하므로 GSI 패치를 제출하려면 다음을 수행해야 합니다.
    1. 패치를 AOSP master 분기에 제출합니다.
    2. DESSERT -gsi 에 대한 패치를 DESSERT -gsi 합니다.
    3. 체리픽을 검토하려면 버그를 신고하세요.
  • GSI 버그를 보고 하거나 다른 제안을 합니다. 버그 보고 의 지침을 검토한 다음 GSI 버그 를 찾아보거나 제출합니다.

adb를 사용하여 탐색 모음 모드 변경

GSI로 부팅할 때 탐색 표시줄 모드는 공급업체 재정의로 구성됩니다. 런타임에 다음 adb 명령을 실행하여 탐색 모음 모드를 변경할 수 있습니다.

adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode

여기서 modethreebutton , twobutton , gestural 등일 수 있습니다.