[Android]Android 자바 동적 라 이브 러 리,정적 라 이브 러 리 의 컴 파일 및 사용
5830 단어 안 드 로 이 드 지식 창고
Android 의 Makefile 컴 파일 시스템 에서 컴 파일 결 과 는 다양 합 니 다.이것 은
build/make/core/config.mk
에서 볼 수 있 듯 이 일부 코드 는 다음 과 같 습 니 다.BUILD_HOST_STATIC_LIBRARY:= $(BUILD_SYSTEM)/host_static_library.mk
BUILD_HOST_SHARED_LIBRARY:= $(BUILD_SYSTEM)/host_shared_library.mk
BUILD_STATIC_LIBRARY:= $(BUILD_SYSTEM)/static_library.mk
BUILD_HEADER_LIBRARY:= $(BUILD_SYSTEM)/header_library.mk
BUILD_AUX_STATIC_LIBRARY:= $(BUILD_SYSTEM)/aux_static_library.mk
BUILD_AUX_EXECUTABLE:= $(BUILD_SYSTEM)/aux_executable.mk
BUILD_SHARED_LIBRARY:= $(BUILD_SYSTEM)/shared_library.mk
BUILD_EXECUTABLE:= $(BUILD_SYSTEM)/executable.mk
BUILD_HOST_EXECUTABLE:= $(BUILD_SYSTEM)/host_executable.mk
BUILD_PACKAGE:= $(BUILD_SYSTEM)/package.mk
BUILD_PHONY_PACKAGE:= $(BUILD_SYSTEM)/phony_package.mk
BUILD_RRO_PACKAGE:= $(BUILD_SYSTEM)/build_rro_package.mk
BUILD_HOST_PREBUILT:= $(BUILD_SYSTEM)/host_prebuilt.mk
BUILD_PREBUILT:= $(BUILD_SYSTEM)/prebuilt.mk
BUILD_MULTI_PREBUILT:= $(BUILD_SYSTEM)/multi_prebuilt.mk
BUILD_JAVA_LIBRARY:= $(BUILD_SYSTEM)/java_library.mk
BUILD_STATIC_JAVA_LIBRARY:= $(BUILD_SYSTEM)/static_java_library.mk
BUILD_HOST_JAVA_LIBRARY:= $(BUILD_SYSTEM)/host_java_library.mk
BUILD_COPY_HEADERS := $(BUILD_SYSTEM)/copy_headers.mk
BUILD_NATIVE_TEST := $(BUILD_SYSTEM)/native_test.mk
BUILD_NATIVE_BENCHMARK := $(BUILD_SYSTEM)/native_benchmark.mk
BUILD_HOST_NATIVE_TEST := $(BUILD_SYSTEM)/host_native_test.mk
BUILD_FUZZ_TEST := $(BUILD_SYSTEM)/fuzz_test.mk
BUILD_HOST_FUZZ_TEST := $(BUILD_SYSTEM)/host_fuzz_test.mk
BUILD_SHARED_TEST_LIBRARY := $(BUILD_SYSTEM)/shared_test_lib.mk
BUILD_HOST_SHARED_TEST_LIBRARY := $(BUILD_SYSTEM)/host_shared_test_lib.mk
BUILD_STATIC_TEST_LIBRARY := $(BUILD_SYSTEM)/static_test_lib.mk
BUILD_HOST_STATIC_TEST_LIBRARY := $(BUILD_SYSTEM)/host_static_test_lib.mk
BUILD_NOTICE_FILE := $(BUILD_SYSTEM)/notice_files.mk
BUILD_HOST_DALVIK_JAVA_LIBRARY := $(BUILD_SYSTEM)/host_dalvik_java_library.mk
BUILD_HOST_DALVIK_STATIC_JAVA_LIBRARY := $(BUILD_SYSTEM)/host_dalvik_static_java_library.mk
BUILD_HOST_TEST_CONFIG := $(BUILD_SYSTEM)/host_test_config.mk
BUILD_TARGET_TEST_CONFIG := $(BUILD_SYSTEM)/target_test_config.mk
Android.mk 에서 의 용법 은 다음 과 같다.
include $(BUILD_XXX)
자바 관련
BUILD_JAVA_LIBRARY
과BUILD_STATIC_JAVA_LIBRARY
을 소개 한다.BUILD_STATIC_JAVA_LIBRARY
BUILD_STATIC_JAVA_LIBRARY
컴 파일 결 과 는 자바 정적 라 이브 러 리 이 고 더 정확히 말 하면 안 드 로 이 드 와 무관 한 순수한 자바 패키지 입 니 다.모듈 명 즉LOCAL_MODULE
은abc
의 경우aapt
로 컴 파일 한다.Android 는 기본적으로jack
를 사용 하여 컴 파일 합 니 다.aapt 을 사용 하여 컴 파일 하 는 방법 은LOCAL_JACK_ENABLED := disabled
입 니 다.컴 파일 완료 후 컴 파일 결 과 는 다음 과 같 습 니 다.out/target/product/product_name/obj/JAVA_LIBRARIES/abc_intermediates
└── javalib.jar
out/target/common/obj/JAVA_LIBRARIES/abc_intermediates
├── anno , annotation 。
├── classes class 。
├── classes-full-debug.jar
├── classes.jar
└── link_type java:platform
produt 디 렉 터 리 아래 에 하나
javalib.jar
밖 에 없습니다.이것 은 common 디 렉 터 리 에서 직접 복사 한 것 입 니 다.이름 만 바 꾸 었 을 뿐 입 니 다.javalib.jar
는 압축 풀기 도구 로 열 수도 있 고 명령 행jar
명령 으로 압축 을 풀 거나 안에 있 는 파일 을 직접 볼 수도 있 는 자바 패키지 입 니 다.압축 풀기 명령jar -xvf javalib.jar
,명령 을 직접 보기jar -tvf javalib.jar
.그 중 두 가지 파일 이 있 습 니 다.하 나 는 일반 텍스트 파일 manifest 이 고 다른 하 나 는 class 가 접미사 로 컴 파일 된 자바 류 데이터 파일 입 니 다.class 파일 의 일부 내용 은 명령 행 에서 자바 컴 파일 도구javap
로 볼 수 있 습 니 다.javap xxx.class
common 디 렉 터 리 에 있 는 두 개의 jar 가방 은 같 습 니 다.produt 디 렉 터 리 에 있 는javalib.jar
과 같 습 니 다.BUILD_JAVA_LIBRARY
BUILD_JAVA_LIBRARY
컴 파일 결 과 는 자바 동적 라 이브 러 리 로 안 드 로 이 드 에 적용 되 는 자바 패키지 라 고 밝 혔 다.컴 파일 완료 후 컴 파일 결 과 는 다음 과 같 습 니 다.out/target/product/product_name/obj/JAVA_LIBRARIES/abc_intermediates
└── javalib.jar
out/target/product/product_name/system/framework/abc.jar
out/target/common/obj/JAVA_LIBRARIES/abc_intermediates
├── anno , annotation 。
├── classes class 。
├── classes-desugar.jar desugar , , Java8 lambda 。
├── classes.dex
├── classes-full-debug.jar class。
├── classes.jar desugar。
├── desugar_dumped_classes ,desugar 。
├── javalib.jar
├── link_type java:platform
└── with-local ,local 。
produt 디 렉 터 리 에 있 는 자바 lib.jar 와 abc.jar 는 같 습 니 다.그 안에 두 개의 파일 이 있 습 니 다.manifest 와 classes.dex.자바 동적 라 이브 러 리 의 class 파일 이 정적 라 이브 러 리 의 dex 파일 로 바 뀌 었 음 을 알 수 있 습 니 다.dex 파일 은 Android Dalvik 특유 의 파일 형식 입 니 다.
자바 라 이브 러 리 의 서로 다른 컴 파일 결 과 를 소개 하고 사용 방식 을 소개 합 니 다.자바 라 이브 러 리 는 두 가지 사용 방식
LOCAL_JAVA_LIBRARIES
과LOCAL_STATIC_JAVA_LIBRARIES
이 있다.LOCAL_STATIC_JAVA_LIBRARIES
LOCAL_STATIC_JAVA_LIBRARIES
인 용 된 외부 자바 라 이브 러 리(위 에서 언급 한 두 가지 형식의 자바 라 이브 러 리 일 수 있 음)를 이 모듈 에 직접 컴 파일 하여 포장 하고 runtime 시 이 모듈 에서 관련 된 것 을 직접 찾 을 수 있 음 을 나타 낸다.LOCAL_JAVA_LIBRARIES
LOCAL_JAVA_LIBRARIES
인용 을 나타 내 는 외부 자바 라 이브 러 리(위 에서 언급 한 두 가지 형식의 자바 라 이브 러 리 일 수 있 습 니 다)는 컴 파일 할 때 관련 된 것 을 찾 을 수 있 지만 이 모듈 에 포장 되 지 않 습 니 다.runtime 에서 다른 곳 에서 찾 아야 합 니 다.이 곳 은 컴 파일 할 때 인용 한 외부 자바 라 이브 러 리 의 모듈 이름 을PRODUCT_BOOT_JARS
에 추가 하 는 것 입 니 다.예 를 들 어 안 드 로 이 드 원생framework.jar
이 추 가 됩 니 다.PRODUCT_BOOT_JARS+=framework
그렇지 않 으 면 runtime 에서 ClassLoader 에서 필요 한 class 를 찾 을 수 없습니다.종합 적 으로 안 드 로 이 드 의 자바 동적 라 이브 러 리,정적 라 이브 러 리 는 C,C++의 동적 라 이브 러 리,정적 라 이브 러 리 와 다 르 며 정적 라 이브 러 리 로 컴 파일 할 때 원생 자바 class 압축 패 키 지 를 나타 내 고 동적 라 이브 러 리 로 컴 파일 할 때 안 드 로 이 드 Dalvik 에 사용 되 는 dex 압축 패 키 지 를 나타 내 며 정적 참조 시 외부 라 이브 러 리 를 직접 포장 하고 동적 참조 시 외부 라 이브 러 리
PRODUCT_BOOT_JARS
에 추가 해 야 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Android]Android 자바 동적 라 이브 러 리,정적 라 이브 러 리 의 컴 파일 및 사용BUILD_STATIC_JAVA_LIBRARY BUILD_STATIC_JAVA_LIBRARY컴 파일 결 과 는 자바 정적 라 이브 러 리 이 고 더 정확히 말 하면 안 드 로 이 드 와 무관 한 순수한 자바 패키지 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.