[Android]Android 자바 동적 라 이브 러 리,정적 라 이브 러 리 의 컴 파일 및 사용

글 목록
  • BUILD_STATIC_JAVA_LIBRARY
  • BUILD_JAVA_LIBRARY
  • LOCAL_STATIC_JAVA_LIBRARIES
  • LOCAL_JAVA_LIBRARIES

  • 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_LIBRARYBUILD_STATIC_JAVA_LIBRARY을 소개 한다.
    BUILD_STATIC_JAVA_LIBRARY BUILD_STATIC_JAVA_LIBRARY컴 파일 결 과 는 자바 정적 라 이브 러 리 이 고 더 정확히 말 하면 안 드 로 이 드 와 무관 한 순수한 자바 패키지 입 니 다.모듈 명 즉LOCAL_MODULEabc의 경우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.classcommon 디 렉 터 리 에 있 는 두 개의 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_LIBRARIESLOCAL_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에 추가 해 야 합 니 다.

    좋은 웹페이지 즐겨찾기