2017-12-02 19 views
1

이것은 매우 간단합니다.ExternalProject_Add를 사용하여 Android에 Opus를 포함하십시오.

NDK를 사용하는 Android 프로젝트가 있습니다. 원시 코드에 opus 소스 코드를 포함하고자합니다. 내 CMake ExternalProject_Add 속성을 사용하여 시도했지만 내 네이티브 코드 여전히 Opus 라이브러리에서 헤더를 가져올 수 없으며 빌드하는 데 실패합니다.

아래는 내 ExternalProject_Add 정의입니다 :

ExternalProject_Add(project_opus 
    URL https://archive.mozilla.org/pub/opus/opus-1.2.1.tar.gz 
    CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> 
    BUILD_COMMAND make 
    INSTALL_COMMAND make install 
) 

ExternalProject_Get_Property(project_opus install_dir) 
include_directories(${install_dir}/include) 

add_library(opus SHARED IMPORTED) 
add_dependencies(opus project_opus) 

target_link_libraries(# Specifies the target library. 
         native-lib 

         # Links the target library to the log library 
         # included in the NDK. 
         ${log-lib} opus oboe OpenSLES) 
+0

NDK 프로젝트에 단순히/make install opus를 사용할 수 없습니다. 당신은 안드로이드 ABI에 크로스 컴파일해야합니다. –

+0

Android ABI로 크로스 컴파일하는 방법에 대한 아이디어가 있으십니까? – Korogba

+0

https://stackoverflow.com/a/30011890/192373을 방문하십시오. TL : NR : 까다로울 수도 있지만 도움이 될 수있는 [Hunter] (https://github.com/ruslo/hunter) 프로젝트가 있습니다. –

답변

1

그래서, 여기에 작품의 CMakeLists.txt입니다 :

이 파일에 다음
cmake_minimum_required(VERSION 3.4.1) 
include(ExternalProject) 

set(OPUS_ROOT ${Project_BINARY_DIR}/project_opus-prefix/src/project_opus) 

ExternalProject_Add(project_opus 
    URL https://archive.mozilla.org/pub/opus/opus-1.2.1.tar.gz 
    CONFIGURE_COMMAND "" 
    INSTALL_COMMAND "" 
    BUILD_COMMAND 
    ${ANDROID_NDK}/ndk-build 
    -C ${OPUS_ROOT} 
    NDK_PROJECT_PATH=null 
    APP_BUILD_SCRIPT=${Project_SOURCE_DIR}/opus.mk 
    NDK_OUT=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/../.. 
    NDK_LIBS_OUT=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/.. 
    APP_ABI=${ANDROID_ABI} 
    NDK_ALL_ABIS=${ANDROID_ABI} 
    APP_PLATFORM=${ANDROID_PLATFORM} 
    BUILD_BYPRODUCTS ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libopus.so 
) 

add_library(opus SHARED IMPORTED) 
add_dependencies(opus project_opus) 

set_target_properties(opus PROPERTIES IMPORTED_LOCATION ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libopus.so) 
include_directories(${OPUS_ROOT}/include) 

target_link_libraries(# Specifies the target library. 
        native-lib 

        # Links the target library to the log library 
        # included in the NDK. 
        log opus oboe OpenSLES) 

,이 opus.mk를 삽입해야합니다 GitHub의 android-ffmpeg-builder에서 빌려온 파일 :

LOCAL_PATH := . 

include $(CLEAR_VARS) 

#include the .mk files 
include $(LOCAL_PATH)/celt_sources.mk 
include $(LOCAL_PATH)/silk_sources.mk 
include $(LOCAL_PATH)/opus_sources.mk 

MY_MODULE_DIR  := opus 

LOCAL_MODULE  := $(MY_MODULE_DIR) 

#fixed point sources 
SILK_SOURCES += $(SILK_SOURCES_FIXED) 

#ARM build 
CELT_SOURCES += $(CELT_SOURCES_ARM) 
SILK_SOURCES += $(SILK_SOURCES_ARM) 
LOCAL_SRC_FILES  := \ 
    $(CELT_SOURCES) \ 
    $(SILK_SOURCES) \ 
    $(OPUS_SOURCES) \ 
    $(OPUS_SOURCES_FLOAT) 

LOCAL_LDLIBS  := -lm -llog 

LOCAL_C_INCLUDES := \ 
    $(LOCAL_PATH)/include \ 
    $(LOCAL_PATH)/silk \ 
    $(LOCAL_PATH)/silk/fixed \ 
    $(LOCAL_PATH)/silk/float \ 
    $(LOCAL_PATH)/celt 

# don't disable the float api 
LOCAL_CFLAGS  := -DNULL=0 -DSOCKLEN_T=socklen_t -DLOCALE_NOT_USED -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 
LOCAL_CFLAGS  += -Drestrict='' -D__EMX__ -DOPUS_BUILD -DFIXED_POINT=1 -DUSE_ALLOCA -DHAVE_LRINT -DHAVE_LRINTF -O3 -fno-math-errno 
LOCAL_CPPFLAGS  := -DBSD=1 
LOCAL_CPPFLAGS  += -ffast-math -O3 -funroll-loops 

include $(BUILD_SHARED_LIBRARY) 

이 기능은 ARM 빌드 만 지원합니다.