링커 네임스페이스

동적 링커는 트레블 VNDK 설계의 두 가지 문제점을 해결합니다.

  • VNDK-SP 라이브러리를 비롯한 SP-HAL 공유 라이브러리 및 종속 항목이 프레임워크 프로세스에 로드되며, 기호 충돌 방지를 위한 어떤 메커니즘이 있어야 합니다.
  • dlopen()android_dlopen_ext()는 빌드 시간에는 보이지 않으며 정적 분석을 사용하여 감지하기가 어려운 런타임 종속 항목을 일으킬 수 있습니다.

이러한 두 가지 문제는 링커 네임스페이스 메커니즘으로 해결할 수 있습니다. 링커 네임스페이스 메커니즘은 동적 링커에 의해 제공됩니다. 동적 링커는 라이브러리 이름은 같지만 기호는 다른 라이브러리가 충돌하지 않도록 여러 링커 네임스페이스의 공유 라이브러리를 격리할 수 있습니다.

한편 링커 네임스페이스 메커니즘은 일부 공유 라이브러리를 링커 네임스페이스로 내보내고 다른 링커 네임스페이스에서 이러한 라이브러리를 사용할 수 있도록 유연성을 제공합니다. 이렇게 내보낸 공유 라이브러리는 다른 프로그램에 공개되는 동시에 링커 네임스페이스 내에 구현 세부정보를 숨기는 애플리케이션 프로그래밍 인터페이스가 될 수 있습니다.

예를 들어 /system/lib[64]/libcutils.so/system/lib[64]/vndk-sp-${VER}/libcutils.so는 두 개의 공유 라이브러리입니다. 두 라이브러리는 서로 다른 기호를 보유할 수 있으며, 프레임워크 모듈이 /system/lib[64]/libcutils.so에, SP-HAL 공유 라이브러리가 /system/lib[64]/vndk-sp-${VER}/libcutils.so에 종속될 수 있도록 서로 다른 링커 네임스페이스에 로드됩니다.

반면에 /system/lib[64]/libc.so는 링커 네임스페이스에 의해 내보내기되어 다수의 링커 네임스페이스로 가져오기되는 공개 라이브러리의 예입니다. libnetd_client.so와 같은 /system/lib[64]/libc.so의 종속 항목은 /system/lib[64]/libc.so가 상주하는 네임스페이스에 로드됩니다. 다른 네임스페이스는 이러한 종속성에 액세스할 수 없습니다. 이러한 메커니즘은 구현 세부정보를 캡슐화하는 동시에 공개 인터페이스를 제공합니다.

작동 원리

동적 링커는 DT_NEEDED 항목에 지정된 공유 라이브러리나 dlopen() 또는 android_dlopen_ext()의 인수에 의해 지정된 공유 라이브러리를 로드하는 역할을 합니다. 두 경우 모두, 동적 링커는 호출자가 상주하는 링커 네임스페이스를 찾은 다음 종속 항목을 동일한 링커 네임스페이스에 로드하려고 시도합니다. 공유 라이브러리를 지정된 링커 네임스페이스에 로드할 수 없는 경우 동적 링커는 링크된 링커 네임스페이스에 내보낸 공유 라이브러리를 요청합니다.

구성 파일 형식

구성 파일 형식은 INI 파일 형식에 기반하며, 일반적인 구성 파일은 다음과 같습니다.

dir.system = /system/bin
dir.system = /system/xbin
dir.vendor = /vendor/bin

[system]
additional.namespaces = sphal,vndk

namespace.default.isolated = true
namespace.default.search.paths = /system/${LIB}
namespace.default.permitted.paths = /system/${LIB}/hw
namespace.default.asan.search.paths = /data/asan/system/${LIB}:/system/${LIB}
namespace.default.asan.permitted.paths = /data/asan/system/${LIB}/hw:/system/${LIB}/hw

namespace.sphal.isolated = true
namespace.sphal.visible = true
namespace.sphal.search.paths = /odm/${LIB}:/vendor/${LIB}
namespace.sphal.permitted.paths = /odm/${LIB}:/vendor/${LIB}
namespace.sphal.asan.search.paths  = /data/asan/odm/${LIB}:/odm/${LIB}
namespace.sphal.asan.search.paths += /data/asan/vendor/${LIB}:/vendor/${LIB}
namespace.sphal.asan.permitted.paths  = /data/asan/odm/${LIB}:/odm/${LIB}
namespace.sphal.asan.permitted.paths += /data/asan/vendor/${LIB}:/vendor/${LIB}
namespace.sphal.links = default,vndk
namespace.sphal.link.default.shared_libs = libc.so:libm.so
namespace.sphal.link.vndk.shared_libs = libbase.so:libcutils.so

namespace.vndk.isolated = true
namespace.vndk.search.paths = /system/${LIB}/vndk-sp-29
namespace.vndk.permitted.paths = /system/${LIB}/vndk-sp-29
namespace.vndk.links = default
namespace.vndk.link.default.shared_libs = libc.so:libm.so

[vendor]
namespace.default.isolated = false
namespace.default.search.paths = /vendor/${LIB}:/system/${LIB}

구성 파일에는 다음이 포함됩니다.

  • 동적 링커가 효과적인 섹션을 선택하게 하는 초반의 여러 디렉터리 섹션 매핑 속성
  • 여러 링커 네임스페이스 구성 섹션:
    • 각 섹션에는 여러 네임스페이스(그래프 꼭짓점) 및 네임스페이스 간의 여러 대체 링크(그래프 원호)가 포함됩니다.
    • 각 네임스페이스에는 자체적인 격리, 검색 경로, 허용 경로 및 공개 상태 설정이 포함됩니다.

아래 표에서는 각 속성의 의미에 관해 자세히 설명합니다.

디렉터리 섹션 매핑 속성

속성 설명

dir.name

[name] 섹션이 적용되는 디렉터리 경로입니다.

각 속성이 디렉터리 아래의 실행 프로그램을 링커 네임스페이스 구성 섹션에 매핑합니다. name은 같지만 다른 디렉터리를 가리키는 2개 이상의 속성이 존재할 수 있습니다.

dir.system = /system/bin
dir.system = /system/xbin
dir.vendor = /vendor/bin

[system] 섹션에 지정된 구성이 /system/bin 또는 /system/xbin에서 로드된 실행 프로그램에 적용됨을 나타냅니다.

[vendor] 섹션에 지정된 구성이 /vendor/bin에서 로드된 실행 프로그램에 적용됩니다.

관계 속성

속성 설명
additional.namespaces

섹션의 추가 네임스페이스(default 네임스페이스 외)에 관한 쉼표로 구분된 목록입니다.

additional.namespaces = sphal,vndk

[system] 구성에 3개의 네임스페이스(default, sphal, vndk)가 있음을 나타냅니다.

namespace.name.links

쉼표로 구분된 대체 네임스페이스 목록입니다.

공유 라이브러리를 현재 네임스페이스에서 찾을 수 없는 경우 동적 링커는 대체 네임스페이스에서 공유 라이브러리를 로드하려고 시도합니다. 목록 초반에 지정된 네임스페이스의 우선순위가 더 높습니다.

namespace.sphal.links = default,vndk

공유 라이브러리 또는 실행 프로그램이 sphal 네임스페이스에 로드할 수 없는 공유 라이브러리를 요청하면 동적 링커는 default 네임스페이스에서 공유 라이브러리를 로드하려고 시도합니다.

이어서 공유 라이브러리를 default 네임스페이스에서도 로드할 수 없는 경우 동적 링커는 vndk 네임스페이스에서 공유 라이브러리를 로드하려고 시도합니다.

마지막으로 모든 시도에 실패하면 동적 링커가 오류를 반환합니다.

namespace.name.link.other.shared_libs

라이브러리를 name 네임스페이스에서 찾을 수 없을 때 other 네임스페이스에서 검색될 수 있는 콜론으로 구분된 공유 라이브러리 목록입니다.

이 속성은 namespace.name.link.other.allow_all_shared_libs와 함께 사용할 수 없습니다.

namespace.sphal.link.default.shared_libs = libc.so:libm.so

대체 링크가 libc.so 또는 libm.so만 요청된 라이브러리 이름으로 허용함을 나타냅니다. 동적 링커는 요청된 라이브러리 이름이 libc.so 또는 libm.so가 아니면 default 네임스페이스 관련 sphal의 대체 링크를 무시합니다.

namespace.name.link.other.allow_all_shared_libs

name 네임스페이스에서 라이브러리를 찾을 수 없을 때 other 네임스페이스에서 모든 공유 라이브러리를 검색하도록 할지 나타내는 부울 값입니다.

이 속성은 namespace.name.link.other.shared_libs와 함께 사용할 수 없습니다.

namespace.vndk.link.sphal.allow_all_shared_libs = true

모든 라이브러리 이름이 vndk에서 sphal 네임스페이스까지의 대체 링크를 통과할 수 있음을 나타냅니다.

네임스페이스 속성

속성 설명
namespace.name.isolated

동적 링커가 공유 라이브러리 상주 위치를 확인해야 할지를 나타내는 부울 값입니다.

isolatedtruesearch.paths 디렉터리(하위 디렉터리 제외) 중 하나에 있거나 permitted.paths 디렉터리(하위 디렉터리 포함) 중 하나 아래에 위치한 공유 라이브러리만 로드할 수 있습니다.

isolatedfalse(기본값)면 동적 링커는 공유 라이브러리의 경로를 확인하지 않습니다.

namespace.sphal.isolated = true

search.pathspermitted.paths 아래의 공유 라이브러리만 sphal 네임스페이스에 로드될 수 있음을 나타냅니다.

namespace.name.search.paths

공유 라이브러리 검색을 위한 콜론으로 구분된 디렉터리 목록입니다.

search.paths에 지정된 디렉터리는 dlopen() 또는 DT_NEEDED 항목의 함수 호출이 전체 경로를 지정하지 않는 경우 요청된 라이브러리 이름 앞에 추가됩니다. 목록 초반에 지정된 디렉터리의 우선순위가 더 높습니다.

isolatedtruesearch.paths 디렉터리(하위 디렉터리 제외) 중 하나에 있는 공유 라이브러리는 permitted.paths 속성과 관계없이 로드할 수 있습니다.

예를 들어 search.paths/system/${LIB}이고 permitted.paths가 비어 있으면 /system/${LIB}/libc.so를 로드할 수 있지만 /system/${LIB}/vndk/libutils.so는 로드할 수 없습니다.

namespace.default.search.paths = /system/${LIB}

동적 링커가 /system/${LIB}에서 공유 라이브러리를 검색함을 나타냅니다.

namespace.name.asan.search.paths

Address Sanitizer가 사용 설정되었을 때 공유 라이브러리를 검색하기 위한 콜론으로 구분된 디렉터리 목록입니다.

Address Sanitizer가 사용 설정되면 namespace.name.search.paths가 무시됩니다.

namespace.default.asan.search.paths = /data/asan/system/${LIB}:/system/${LIB}

Address Sanitizer가 사용 설정되면 동적 링커가 /data/asan/system/${LIB}를 먼저 검색한 다음 이어서 /system/${LIB}를 검색함을 나타냅니다.

namespace.name.permitted.paths

isolatedtrue일 때 동적 링커가 공유 라이브러리(search.paths 외에 추가로)를 로드할 수 있는 콜론으로 구분된 디렉터리 목록(하위 디렉터리 포함)입니다. .

permitted.paths의 하위 디렉터리 아래에 위치한 공유 라이브러리도 로드할 수 있습니다. 예를 들어 permitted.paths/system/${LIB}이면 /system/${LIB}/libc.so/system/${LIB}/vndk/libutils.so를 둘 다 로드할 수 있습니다.

isolatedfalsepermitted.paths가 무시되고 경고가 표시됩니다.

namespace.default.permitted.paths = /system/${LIB}/hw

/system/${LIB}/hw 아래의 공유 라이브러리는 격리된 default 네임스페이스에 로드될 수 있음을 나타냅니다.

예를 들어 permitted.paths, libaudiohal.so가 없으면 /system/${LIB}/hw/audio.a2dp.default.sodefault 네임스페이스에 로드할 수 없습니다.

namespace.name.asan.permitted.paths

Address Sanitizer가 사용 설정되었을 때 동적 링커가 공유 라이브러리를 로드할 수 있는 콜론으로 구분된 디렉터리 목록입니다.

Address Sanitizer가 사용 설정되면 namespace.name.permitted.paths가 무시됩니다.

namespace.default.asan.permitted.paths = /data/asan/system/${LIB}/hw:/system/${LIB}/hw

Address Sanitizer가 사용 설정되면 /data/asan/system/${LIB}/hw 또는 /system/${LIB}/hw 아래의 공유 라이브러리를 격리된 default 네임스페이스에 로드할 수 있음을 나타냅니다.

namespace.name.visible

libc 외의 프로그램이 android_get_exported_namespace()로 링커 네임스페이스 핸들을 획득하고 핸들을 android_dlopen_ext()에 전달하여 링커 네임스페이스의 공유 라이브러리를 열 수 있는지를 나타내는 부울 값입니다.

visibletrueandroid_get_exported_namespace()는 네임스페이스가 존재하는 경우 항상 핸들을 반환합니다.

visiblefalse(기본값)면 android_get_exported_namespace()는 네임스페이스의 존재 여부와 상관없이 항상 NULL을 반환합니다. 공유 라이브러리는 (1) 이 네임스페이스에 관한 대체 링크를 보유한 다른 링커 네임스페이스에 의해 요청되었거나 (2) 이 네임스페이스의 다른 공유 라이브러리 또는 실행 프로그램에 의해 요청된 경우에만 이 네임스페이스에 로드할 수 있습니다.

namespace.sphal.visible = true

android_get_exported_namespace("sphal")가 유효한 링커 네임스페이스 핸들을 반환할 수 있음을 나타냅니다.

링커 네임스페이스 격리

${android-src}/system/core/rootdir/etc에는 3개의 구성 파일이 있습니다. BoardConfig.mkPRODUCT_TREBLE_LINKER_NAMESPACES, BOARD_VNDK_VERSION, BOARD_VNDK_RUNTIME_DISABLE 값에 따라 다른 구성이 선택됩니다.

PRODUCT_TREBLE_
LINKER_NAMESPACES
BOARD_VNDK_
VERSION
BOARD_VNDK_
RUNTIME_DISABLE
선택된 구성 VTS 요구사항
true current 표시 없음 ld.config.txt Android P로 출시되는 기기의 경우 필수입니다.
true ld.config.vndk_lite.txt Android 8.x로 출시되는 기기의 경우 필수입니다.
표시 없음 모두
false 모두 모두 ld.config.legacy.txt 비 트레블 기기에 사용됩니다.

${android-src}/system/core/rootdir/etc/ld.config.vndk_lite.txt는 SP-HAL 및 VNDK-SP 공유 라이브러리를 격리합니다. Android 8.0 이상에서는 PRODUCT_TREBLE_LINKER_NAMESPACEStrue면 동적 링커의 구성 파일이어야 합니다.

${android-src}/system/core/rootdir/etc/ld.config.txt는 SP-HAL 및 VNDK-SP 공유 라이브러리도 격리합니다. 또한, ld.config.txt 역시 전체 동적 링커 격리 기능을 제공하며, 시스템 파티션의 모듈과 공급업체 파티션의 공유 라이브러리가 서로에 종속되지 않도록 합니다.

Android 8.1에서는 ld.config.txt가 기본 구성 파일이며 BOARD_VNDK_VERSIONcurrent로 설정하여 전체 동적 링커 격리를 사용 설정하는 것이 좋습니다. 하지만 Android 8.1에서 정리해야 할 종속 항목이 너무 많다면 모든 종속 항목이 정리될 때까지 BOARD_VNDK_RUNTIME_DISABLEBoardConfig.mk에 추가할 수 있습니다.

BOARD_VNDK_RUNTIME_DISABLE := true

BOARD_VNDK_RUNTIME_DISABLE 옵션은 종속 항목을 정리할 때까지 일시적으로 사용해야 합니다. 그렇지 않은 경우 BOARD_VNDK_VERSION을 사용 해제하여 ld.config.vndk_lite.txt를 사용하세요.

BOARD_VNDK_RUNTIME_DISABLEtrue${android-src}/system/core/rootdir/etc/ld.config.vndk_lite.txt가 설치됩니다. 이는 테스트 목적으로만 사용됩니다.

ld.config.txt

ld.config.txt는 시스템 파티션과 공급업체 파티션 간의 공유 라이브러리 종속 항목을 격리합니다. 이전 하위 섹션에서 언급한 ld.config.txt와 비교하면, 차이점이 아래 항목으로 추려집니다.

  • 프레임워크 프로세스

    • 4개의 네임스페이스(default, vndk, sphal, rs)가 생성됩니다.
    • 모든 네임스페이스가 격리됩니다.
    • 시스템 공유 라이브러리는 default 네임스페이스에 로드됩니다.
    • SP-HAL은 sphal 네임스페이스에 로드됩니다.
    • VNDK-SP 공유 라이브러리는 vndk 네임스페이스에 로드됩니다.
  • 공급업체 프로세스

    • 3개의 네임스페이스(default, vndk, system)가 생성됩니다.
    • default 네임스페이스가 격리됩니다.
    • 공급업체 공유 라이브러리는 default 네임스페이스에 로드됩니다.
    • VNDK 및 VNDK-SP 공유 라이브러리는 vndk 네임스페이스에 로드됩니다.
    • LL-NDK 및 종속 항목은 system 네임스페이스에 로드됩니다.

링커 네임스페이스 간의 관계는 아래 그림에 묘사되어 있습니다.

ld.config.txt에 설명된 링커 네임스페이스 그래프
그림 1. 링커 네임스페이스 격리 (ld.config.txt)

위의 그래프에서 LL-NDKVNDK-SP는 다음과 같은 공유 라이브러리를 나타냅니다.

  • LL-NDK
    • libEGL.so
    • libGLESv1_CM.so
    • libGLESv2.so
    • libGLESv3.so
    • libandroid_net.so
    • libc.so
    • libdl.so
    • liblog.so
    • libm.so
    • libnativewindow.so
    • libneuralnetworks.so
    • libsync.so
    • libvndksupport.so
    • libvulkan.so
  • VNDK-SP
    • android.hardware.graphics.common@1.0.so
    • android.hardware.graphics.mapper@2.0.so
    • android.hardware.renderscript@1.0.so
    • android.hidl.memory@1.0.so
    • libRSCpuRef.so
    • libRSDriver.so
    • libRS_internal.so
    • libbase.so
    • libbcinfo.so
    • libc++.so
    • libcutils.so
    • libhardware.so
    • libhidlbase.so
    • libhidlmemory.so
    • libhidltransport.so
    • libhwbinder.so
    • libion.so
    • libutils.so
    • libz.so

아래 표는 ld.config.txt[system] 섹션에서 발췌한 프레임워크 프로세스의 네임스페이스 구성을 나타냅니다.

네임스페이스 속성
default search.paths /system/${LIB}
/product/${LIB}
permitted.paths /system/${LIB}/drm
/system/${LIB}/extractors
/system/${LIB}/hw
/product/${LIB}
/system/framework
/system/app
/system/priv-app
/vendor/app
/vendor/priv-app
/odm/app
/odm/priv-app
/oem/app
/product/framework
/product/app
/product/priv-app
/data
/mnt/expand
isolated true
sphal search.paths /odm/${LIB}
/vendor/${LIB}
permitted.paths /odm/${LIB}
/vendor/${LIB}
isolated true
visible true
links default,vndk,rs
link.default.shared_libs LL-NDK
link.vndk.shared_libs VNDK-SP
link.rs.shared_libs libRS_internal.so
vndk(VNDK-SP) search.paths /odm/${LIB}/vndk-sp
/vendor/${LIB}/vndk-sp
/system/${LIB}/vndk-sp-${VER}
permitted.paths /odm/${LIB}/hw
/odm/${LIB}/egl
/vendor/${LIB}/hw
/vendor/${LIB}/egl
/system/${LIB}/vndk-sp-${VER}/hw
isolated true
visible true
links sphal default
link.default.shared_libs LL-NDK
link.default.allow_all_shared_libs true
rs(Renderscript) search.paths /odm/${LIB}/vndk-sp
/vendor/${LIB}/vndk-sp
/system/${LIB}/vndk-sp-${VER}
/odm/${LIB}
/vendor/${LIB}
permitted.paths /odm/${LIB}
/vendor/${LIB}
/data(컴파일된 RS 커널)
isolated true
visible true
links default,vndk
link.default.shared_libs LL-NDK
libmediandk.so
libft2.so
link.vndk.shared_libs VNDK-SP

아래 표는 ld.config.txt[vendor] 섹션에서 발췌한 공급업체 프로세스의 네임스페이스 구성을 나타냅니다.

네임스페이스 속성
default search.paths /odm/${LIB}
/vendor/${LIB}
permitted.paths /odm
/vendor
isolated true
visible true
links vndk system
link.system.shared_libs LL-NDK
link.vndk.shared_libs VNDK, VNDK-SP(공급업체 사용 가능)
vndk search.paths /odm/${LIB}/vndk
/odm/${LIB}/vndk-sp
/vendor/${LIB}/vndk
/vendor/${LIB}/vndk-sp
/system/${LIB}/vndk-${VER}
/system/${LIB}/vndk-sp-${VER}
isolated true
links default system
link.system.shared_libs LL-NDK
link.default.allow_all_shared_libs true
system search.paths /system/${LIB}
isolated false

자세한 내용은 ${android-src}/system/core/rootdir/etc/ld.config.txt를 참조하세요.

ld.config.vndk_lite.txt

Android 8.0부터는 SP-HAL 및 VNDK-SP 공유 라이브러리를 격리할 때 기호가 다른 프레임워크 공유 라이브러리와 충돌하지 않도록 동적 링커가 구성됩니다. 링커 네임스페이스 간의 관계는 아래에 나와 있습니다.

ld.config.vndk_lite.txt에 설명된 링커 네임스페이스 그래프
그림 2. 링커 네임스페이스 격리 (ld.config.vndk_lite.txt)

LL-NDKVNDK-SP는 다음과 같은 공유 라이브러리를 나타냅니다.

  • LL-NDK
    • libEGL.so
    • libGLESv1_CM.so
    • libGLESv2.so
    • libc.so
    • libdl.so
    • liblog.so
    • libm.so
    • libnativewindow.so
    • libstdc++.so(ld.config.txt에 있지 않음)
    • libsync.so
    • libvndksupport.so
    • libz.so(ld.config.txtVNDK-SP로 이동됨)
  • VNDK-SP
    • android.hardware.graphics.common@1.0.so
    • android.hardware.graphics.mapper@2.0.so
    • android.hardware.renderscript@1.0.so
    • android.hidl.memory@1.0.so
    • libbase.so
    • libc++.so
    • libcutils.so
    • libhardware.so
    • libhidlbase.so
    • libhidlmemory.so
    • libhidltransport.so
    • libhwbinder.so
    • libion.so
    • libutils.so

아래 표는 ld.config.vndk_lite.txt[system] 섹션에서 발췌한 프레임워크 프로세스의 네임스페이스 구성을 나타냅니다.

네임스페이스 속성
default search.paths /system/${LIB}
/odm/${LIB}
/vendor/${LIB}
/product/${LIB}
isolated false
sphal search.paths /odm/${LIB}
/vendor/${LIB}
permitted.paths /odm/${LIB}
/vendor/${LIB}
isolated true
visible true
links default,vndk,rs
link.default.shared_libs LL-NDK
link.vndk.shared_libs VNDK-SP
link.rs.shared_libs libRS_internal.so
vndk(VNDK-SP) search.paths /odm/${LIB}/vndk-sp
/vendor/${LIB}/vndk-sp
/system/${LIB}/vndk-sp-${VER}
permitted.paths /odm/${LIB}/hw
/odm/${LIB}/egl
/vendor/${LIB}/hw
/vendor/${LIB}/egl
/system/${LIB}/vndk-sp-${VER}/hw
isolated true
visible true
links default
link.default.shared_libs LL-NDK
rs(Renderscript) search.paths /odm/${LIB}/vndk-sp
/vendor/${LIB}/vndk-sp
/system/${LIB}/vndk-sp-${VER}
/odm/${LIB}
/vendor/${LIB}
permitted.paths /odm/${LIB}
/vendor/${LIB}
/data(컴파일된 RS 커널)
isolated true
visible true
links default,vndk
link.default.shared_libs LL-NDK
libmediandk.so
libft2.so
link.vndk.shared_libs VNDK-SP

아래 표는 ld.config.vndk_lite.txt[vendor] 섹션에서 발췌한 공급업체 프로세스의 네임스페이스 구성을 나타냅니다.

네임스페이스 속성
default search.paths /odm/${LIB}
/odm/${LIB}/vndk
/odm/${LIB}/vndk-sp
/vendor/${LIB}
/vendor/${LIB}/vndk
/vendor/${LIB}/vndk-sp
/system/${LIB}/vndk-${VER}
/system/${LIB}/vndk-sp-${VER}
/system/${LIB}(지원 중단됨)
/product/${LIB}(지원 중단됨)
isolated false

자세한 내용은 ${android-src}/system/core/rootdir/etc/ld.config.vndk_lite.txt를 참조하세요.

문서 이력

Android P 변경사항

  • Android P에서는 vndk 링커 네임스페이스가 공급업체 프로세스에 추가되고 VNDK 공유 라이브러리가 기본 링커 네임스페이스에서 격리됩니다.

  • PRODUCT_FULL_TREBLE을 좀 더 구체적인 PRODUCT_TREBLE_LINKER_NAMESPACES로 교체하세요.

  • Android P에서는 다음과 같은 동적 링커 구성 파일의 이름이 변경됩니다.

    Android 8.x Android P 설명
    ld.config.txt.in ld.config.txt 런타임 링커 네임스페이스 격리를 포함하는 기기
    ld.config.txt ld.config.vndk_lite.txt VNDK-SP 링커 네임스페이스 격리를 포함하는 기기
    ld.config.legacy.txt ld.config.legacy.txt Android 7.x 이하를 실행하는 레거시 기기
  • android.hardware.graphics.allocator@2.0.so가 삭제됩니다.

  • productodm 파티션이 추가됩니다.