네이티브 라이브러리의 네임스페이스

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

Android 7.0에서는 내부 API 가시성을 제한하고 앱이 실수로 자체 라이브러리 대신 플랫폼 라이브러리를 사용하는 상황을 해결하기 위해 네이티브 라이브러리용 네임스페이스를 도입했습니다. 애플리케이션별 변경 사항은 Android 7.0 Android 개발자 블로그 게시물에서 비공개 C/C++ 기호 제한으로 안정성 향상을 참조하세요.

건축물

Android 7.0 이상에서는 시스템 라이브러리가 앱 라이브러리와 분리됩니다.

네이티브 라이브러리용 네임스페이스

그림 1. 네이티브 라이브러리의 네임스페이스

네이티브 라이브러리의 네임스페이스는 앱이 프라이빗 플랫폼 네이티브 API를 사용하는 것을 방지합니다(OpenSSL에서와 같이). 또한 앱이 실수로 자신의 플랫폼 라이브러리 대신 플랫폼 라이브러리를 사용하는 상황을 제거합니다( libpng 에서 확인됨). 앱 라이브러리가 실수로 내부 시스템 라이브러리를 사용하는 것은 어렵습니다(반대의 경우도 마찬가지).

추가 네이티브 라이브러리 추가

표준 공개 네이티브 라이브러리 외에도 실리콘 공급업체(Android 7.0부터) 및 기기 제조업체(Android 9부터)는 앱에 액세스할 수 있는 추가 네이티브 라이브러리를 제공하도록 선택할 수 있습니다. 파일.

라이브러리 폴더는 다음과 같습니다.

  • /vendor/lib (32비트용) 및 /vendor/lib64 (64비트용) 실리콘 공급업체의 라이브러리
  • 장치 제조업체의 라이브러리용 /system/lib (32비트용) 및 /system/lib64 (64비트용)

.txt 파일은 다음과 같습니다.

  • /vendor/etc/public.libraries.txt 실리콘 공급업체의 라이브러리용
  • /system/etc/public.libraries-COMPANYNAME.txt (장치 제조업체의 라이브러리). 여기서 COMPANYNAME 은 제조업체의 이름(예: awesome.company )을 나타냅니다. COMPANYNAME[A-Za-z0-9_.-]+ 와 일치해야 합니다. 영숫자, _, . (점) 및 -. 일부 라이브러리가 외부 솔루션 공급자의 경우 장치에 이러한 .txt 파일이 여러 개 있을 수 있습니다.

장치 제조업체가 공개한 system 파티션의 기본 라이브러리는 반드시 lib*COMPANYNAME.so 로 이름을 지정해야 합니다(예: libFoo.awesome.company.so ). 즉, 회사 이름 접미사가 없는 libFoo.so 는 공개해서는 안 됩니다(MUST NOT). 라이브러리 파일 이름의 COMPANYNAME 은 라이브러리 이름이 나열된 txt 파일 이름의 COMPANYNAME 과 일치해야 합니다.

AOSP의 일부인 네이티브 라이브러리는 공개해서는 안 됩니다(기본적으로 공개되는 표준 공개 네이티브 라이브러리 제외). 실리콘 공급업체 또는 장치 제조업체가 추가한 추가 라이브러리만 앱에 액세스할 수 있습니다.

Android 8.0부터 공급업체 공개 라이브러리에는 다음과 같은 추가 제한 사항과 필수 설정이 있습니다.

  1. 앱에서 액세스할 수 있도록 공급업체의 기본 라이브러리에 레이블이 올바르게 지정되어야 합니다. 모든 앱(타사 앱 포함)에서 액세스가 필요한 경우 라이브러리는 다음과 같이 공급업체별 file_contexts 파일에서 same_process_hal_file 로 레이블이 지정되어야 합니다.
    /vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0
    여기서 libnative.so 는 기본 라이브러리의 이름입니다.
  2. 라이브러리는 종속성을 통해 직접 또는 전이적으로 VNDK-SP 및 LLNDK 라이브러리 이외의 시스템 라이브러리에 의존해서는 안 됩니다. development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv 에서 VNDK-SP 및 LLNDK 라이브러리 목록을 찾습니다.

비공개 네이티브 라이브러리를 사용하지 않도록 앱 업데이트

이 기능은 SDK 버전 24 이상을 대상으로 하는 애플리케이션에서만 활성화됩니다. 이전 버전과의 호환성은 표 1을 참조하세요. 앱이 비공개 네이티브 라이브러리에 연결되는 경우 예상되는 결과 . 앱에 액세스할 수 있는 Android 네이티브 라이브러리(공개 네이티브 라이브러리라고도 함) 목록은 CDD 섹션 3.1.1에 나열되어 있습니다. 24 이상을 대상으로 하고 비공개 라이브러리를 사용하는 앱은 업데이트해야 합니다. 자세한 내용 은 플랫폼 라이브러리에 연결하는 NDK 앱 을 참조하세요.

기본 라이브러리 종속성을 위한 앱 업데이트

SDK 버전 31(Android 12) 이상을 대상으로 하는 애플리케이션은 앱 매니페스트에서 <uses-native-library> 태그를 사용하여 네이티브 공유 라이브러리 종속성을 명시적으로 지정 해야 합니다. 요청한 라이브러리의 일부가 기기에 없으면 앱이 설치되지 않은 것입니다. 앱이 설치되면 요청한 기본 공유 라이브러리 제공됩니다. 즉, 앱은 앱 매니페스트에 표시되지 않는 기본 공유 라이브러리에 액세스할 수 없습니다.