필자는 필요한 Android make 파일을 동적으로 만드는 CMake 스크립트를 기반으로 Android NDK 빌드를 설정하려고합니다. 내가 JNI 폴더 구조를 사용할 수없는 동안 나는 몇 가지로 구분 메이크업 스크립트에서 빌드 프로세스를 분할 :정적 라이브러리의 Prebuild가 실패했습니다.
프로젝트 루트에있는 루트 Android.mk 파일 만들기 1 : 만들기
#ANDROID ROOT MAKEFILE
LOCAL_PATH := D:/binrev/repository/bar
include $(CLEAR_VARS)
MY_LOCAL_CFLAGS := -DDEBUG
include D:/binrev/repository/bar/src/Android.mk
2 소스 Android.mk를 프로젝트 소스 폴더에있는 파일 및 모듈 빌드를 수행 :
$(info "[INFO] Source Makefile invoked")
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := bar
LOCAL_C_INCLUDES:= D:/binrev/repository/bar/include
LOCAL_SRC_FILES := bar.cpp
ifeq (debug,"debug")
MY_LOCAL_CFLAGS := -DDEBUG
endif
ifeq (false,true)
LOCAL_ARM_MODE := arm
endif
LOCAL_EXPORT_C_INCLUDES := D:/binrev/repository/bar/include
LOCAL_LDLIBS := -llog
LOCAL_LDLIBS += -landroid
LOCAL_STATIC_LIBRARIES += foo
ifeq (OFF, ON)
include $(BUILD_SHARED_LIBRARY)
else
include $(BUILD_STATIC_LIBRARY)
endif
Basicly이 메커니즘이 작동하고 내 소스를 컴파일 할 수 있지만, 나는 도서관의 사전 빌드를 포함하려고하면 나는 실패합니다. 내가 정적 라이브러리의 을 미리 빌드 포함하는 다음과 같은 방법을 시도 (수정 된 소스와 함께/정의를 포함) : 소스
include $(CLEAR_VARS)
LOCAL_MODULE := foo
LOCAL_SRC_FILES := lib/android/$(TARGET_ARCH_ABI)/libfoo.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)
1 사전 빌드 정의가 Android.mk가 2 통화 가져 오기 모듈 메커니즘을 제출하고 추가 사전 빌드 Android.mk 파일은 루트에 3 사전 빌드 정의를 LIB에게-사전 빌드 Android.mk
[편집 :] 파일로 여기에도 실패하는 호출 가져 오기 테스트를 냈다된다 $를 (정보 "[INFO] 소스 Makefile이 호출 됨 ")
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := bar
LOCAL_C_INCLUDES:= D:/binrev/repository/bar/include
LOCAL_SRC_FILES := bar.cpp
ifeq (debug,"debug")
MY_LOCAL_CFLAGS := -DDEBUG
endif
ifeq (false,true)
LOCAL_ARM_MODE := arm
endif
LOCAL_EXPORT_C_INCLUDES := D:/binrev/repository/bar/include
LOCAL_LDLIBS := -llog
LOCAL_LDLIBS += -landroid
LOCAL_STATIC_LIBRARIES += foo
ifeq (ON, ON)
include $(BUILD_SHARED_LIBRARY)
else
include $(BUILD_STATIC_LIBRARY)
endif
$(call import-module, external-deps/foo)
각 경우에 prebuild-definition이있는 스크립트가 호출되지만 미리 작성된 은 수행되지 않습니다. 내 NDK 빌드가 완료되면 사전 빌드 라이브러리와 오브젝트가 내 obj 폴더에 복사되지 않습니다. prebuild는 완전히 무시 된 입니다. 그러나 소스를 미리 빌드하는 경로는 정확합니다. 그렇지 않으면 컴파일이 실패하고 파일 누락 오류가 발생합니다. [테스트 프로젝트] [1] https://sourceforge.net/projects/binrevengine/files/publications/
힌트 :
는 현재이 테스트 구현의 완전한 소스를 얻을 수있는 바 프로젝트는 푸 프로젝트를 사전 빌드하려고 프로젝트입니다. foo 프로젝트는 사전 빌드 소스를 포함합니다.
추가 된 테스트 프로젝트는 CMake 및 미리 설치된 NDK (r8e 사용)를 사용하여 GCC 4.7/4.8에서 MinGW64를 사용하여 직접 빌드 할 수 있습니다.
나는 completly 길을 잃어 버리거나 아이디어가 부족합니다 ... 도움을 주셔서 감사합니다.
bar 프로젝트는 foo 프로젝트를 참조하는 공유 라이브러리로 빌드됩니다. – Hellhound
소스 샘플을 편집하고 호출 모듈 가져 오기 테스트의 make 파일을 추가했습니다. – Hellhound