2017-12-02 14 views
1

これはおそらく非常に簡単です。AndroidProject_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を使用することはできません。あなたはAndroid 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ビルドのみをサポートしています。

関連する問題