[Android] System App Permission

subinJeong·2024년 7월 4일

Android system에 prebuilt된 앱을 추가하기 위해서 System app permission을 추가해주어야한다.

적절한 Permission이 추가되지 않으면 아래의 문제가 발생한다.

  • Android 8.0 이하에서는 영향을 받은 앱이 priv-app 경로에 있어도 앱에 누락된 권한이 부여되지 않는다.
  • Android 9 이상에서는 독점 권한 위반이 기기가 부팅되지 않음을 의미하며, 명시적으로 모든 독점 권한을 허용하거나 거부해야 한다.

1. System App의 정의

  • Store App
    : 단말에 내장되어 있지 않고, 단말 제조사나 구글의 앱 스토어에서 받아 설치(or 업데이트)할 수 있다. 일반 앱이나 서드파티(3rd party) 앱이라고도 부른다.
  • Preload App
    : 단말에 내장되어 있고, 단말 제조사나 구글의 앱 스토어에서 업데이트 할 수도 있다.

Preload App 중에서 특히 /system/priv-app/ 에 설치된 앱을 System App이라 한다. 혹은 Privileged App이라고도 부른다.

Preivileged App은 시스템 이미지 파티션의 priv-app 디렉터리에 위치한 시스템 앱이다. Android 출시에 사용되는 파티션은 다음과 같다.

  • Android 8.1 이하 - /system
  • Android 9 이상 - /system, /product, /vendor

2. 스크립트 실행 순서

  1. Andorid SDK의 root directory로 이동

  2. System App 추가한 다음(이전 글 참고), 빌드 환경 설정

    # 제조사별 방법 다를 수 있으므로 확인 필요
    source build/envsetup.sh 	
    lunch [TARGET]
  3. 빌드 실행

    out dir에 있는 apk를 사용하기 때문에 빌드 환경 설정 시, OUT_DIR을 export 해주었다면 동일하게 설정이 되어있었어야한다. (이걸로 엉뚱하게 GPT 뚜들기고있었음;; 😂)

    # REFER ) privapp_permission Usage
    Usage:
        Specify which apk to generate priv-app permissions for. If no apk is \
    		specified, this will default to all APKs under "<ANDROID_PRODUCT_OUT>/\
    		<all the partitions>/priv-app/".
  4. 스크립트 실행
    development/tools/privapp_permissions/privapp_permission.py를 실행하여 나온 결과를 xml파일로 저장하면 된다.
    --xml 옵션을 추가하여 xml 파일로 바로 저장할 수도 있음. (--h option으로 parameter 확인 가능)

    $ python development/tools/privapp_permissions/privapp_permissions.py
    
    ################################################################################
    #
    # apex/com.android.wifi XML:
    #
    ################################################################################
    <?xml version="1.0" encoding="utf-8"?>
    <!-- for the partition: /apex/com.android.wifi -->
    <permissions>
    </permissions>
    ################################################################################
    #
    # gen/META/lic_intermediates/out/target/product/[platform_name]/system XML:
    #
    ################################################################################
    <?xml version="1.0" encoding="utf-8"?>
    <!-- for the partition: /gen/META/lic_intermediates/out/target/product/[platform_name]/system -->
  1. 출력된 내용을 참고하여 xml 파일 생성/업데이트
  2. 다시 빌드하여 수정 사항 적용
  3. development/tools/privapp_permissions/privapp_permissions.py 실행하여 적용되어있는지 확인

3. 허용 목록 적용

허용 목록을 만든 후에는 빌드 속성 ro.control_privapp_permissions=enforce를 설정하여 런타임 적용을 사용 설정합니다.

4. Refer

🔗 독점 권한 허용 | Andoird Open Source Project
🔗 독점 권한 허용 목록 | Andoird Open Source Project

profile
Andorid developer

0개의 댓글