반응형

 

■ Android.mk를 Android.bp로 변환하는 방법

https://stackoverflow.com/questions/51207766/where-can-i-find-androidmk-tool-to-convert-android-mk-to-android-bp

 

 

■ Android.bp에 Jni 빌드 포함하는 방법

Android.bp

android_app {
    name: "XXXService",
    ...
    jni_libs: ["AAAJni"],
}

cc_library_shared {
    name: "AAAJni",
    
    shared_libs : [
        "liblog",
    ],
    
    header_libs: ["jni_headers"],
    
    srcs: [
        "cpp/**/*.cpp"
    ]
}

 

 

 

■ Android.mk 기본 이해

LOCAL_PATH := $(call my-dir)

이 변수는 개발 트리에 있는 소스 파일의 위치 나타냄.

빌드 시스템이 제공하는 매크로 함수 my-dir는 현재 디렉터리의 경로 반환.

즉 Android.mk 파일 자체를 포함한 디렉터리 경로임.

 

 

include $(CLEAR_VARS)

이 변수는 LOCAL_MODUE, LOCAL_SRC_FILES 및 LOCAL_STATIC_LIBRARIES와 같은 여러 LOCAL_xxx변수를 자동 삭제하는 GNU Makefile.

LOCAL_PATH는 삭제하지 않음.

 

 

LOCAL_MODULE := hello-jni

이 변수는 빌드하려는 모듈 이름을 저장.

앱에서 모듈당 한 번씩 이 변수 사용.

이름에 알맞은 접두사와 접미사를 자동으로 추가하여 so파일의 라이브러리 생성.

위의 예시에서는 libhello-jni.so라는 라이브러리 생성.

만약 libfoo.c인 소스 파일은 계속 libfoo.so라는 공유 객체 파일을 생성.

 

 

LOCAL_SRC_FILES := hello-jni.c

소스파일 열거. 공백으로 여러 파일을 구분.

이 변수에 모듈에 빌드할 C 또는 C++ 소스 파일의 목록을 포함해야함.

 

 

include $(BUILD_SHARED_LIBRARY)

위 행은 시스템이 모든 것을 하나로 연결하게 도와줌.

이 변수는 가장 최근의 include 이후로 LOCAL_XXX 변수에 정의한 모든 정보를 수집하는 GNU Makefile 스크립트를 가리킴.

이 스크립트에 따라 빌드할 대상과 그 방법이 결정됨.

 

 

LOCAL-CFLAGS

이 선택적 변수는 C 및 C__ 소스 파일을 빌드 할 때 빌드 시스템에 전달하도록 할 컴파일러 플래그 설정.

매크로 정의나 컴파일 옵션을 추가로 지정할 떄 유용하게 쓰임.

C++용 플래그만 지정하려면 LOCAL_CPPFLAGS를 사용.

Android.mk 파일의 최적화/디버깅 수준을 변경하지 않는 것이 좋음.

 

 


참고

Android Develoopers > NDK > 가이드 > Android.mk

https://developer.android.com/ndk/guides/android_mk?hl=ko

 

 

 

 

반응형