2015-05-18 92 views
1

我嘗試使用OpenSl ES的示例代碼,它包含在Android Studio中的NDK中。 它不起作用,因爲您稍後會看到。所以我需要幫助來使用Android Studio中的代碼。該代碼是爲Eclipse編寫的,但我使用Android Studio的導入功能來包含它。我試了一下還Eclipse和它工作得很好,但嘗試運行Android Studio中的代碼,我得到的時候下面的錯誤代碼Android ndk示例原生音頻錯誤

/home/flex/AndroidStudioProjects/native-audio1/app/src/main/jni/native-audio-jni.c 
Error:(155) undefined reference to `slCreateEngine' 
Error:(165) undefined reference to `SL_IID_ENGINE' 
Error:(165) undefined reference to `SL_IID_ENGINE' 
Error:(170) undefined reference to `SL_IID_ENVIRONMENTALREVERB' 
Error:(170) undefined reference to `SL_IID_ENVIRONMENTALREVERB' 
Error:(215) undefined reference to `SL_IID_BUFFERQUEUE' 
Error:(215) undefined reference to `SL_IID_EFFECTSEND' 
Error:(215) undefined reference to `SL_IID_VOLUME' 
Error:(215) undefined reference to `SL_IID_BUFFERQUEUE' 

... 

collect2: error: ld returned 1 exit status 
make: *** [/home/flex/AndroidStudioProjects/native-audio1/app/build/intermediates/ndk/debug/obj/local/arm64-v8a/libnative-audio-jni.so] Error 1 
Error:Execution failed for task ':app:compileDebugNdk'. 
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/home/flex/android-ndk-r10e/ndk-build'' finished with non-zero exit value 2 
Information:BUILD FAILED 
Information:Total time: 2.942 secs 
Information:38 errors 
Information:0 warnings 
Information:See complete output in console 

我迄今所做的: 我改變 的build.gradle(APP)以

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 21 
    buildToolsVersion "21.1.2" 

    defaultConfig { 
     applicationId "com.example.nativeaudio" 
     minSdkVersion 19 
     targetSdkVersion 19 

     ndk { 
      moduleName "native-audio-jni" //I included this one 
     } 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
     } 
    } 

} 

而且對我改變local.properties到

sdk.dir=/home/flex/Android/Sdk 
ndk.dir=/home/flex/android-ndk-r10e 

我Android.mk看起來像這樣

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := native-audio-jni 
LOCAL_SRC_FILES := native-audio-jni.c 
# for native audio 
LOCAL_LDLIBS += -lOpenSLES 
# for logging 
LOCAL_LDLIBS += -llog 
# for native asset manager 
LOCAL_LDLIBS += -landroid 

include $(BUILD_SHARED_LIBRARY) 

我apllication.mk:

APP_ABI := all 

回答

3

解決方法是編譯兩次源代碼。

所以在終端我編譯第一次用命令:ndk-build
我用過的命令的第二次:ndk-build TARGET_PLATFORM=android-xy
xy必須與Android版本

更換這definitly不正確的方法但至少它使它工作。

+0

可否請您詳細說明您的答案。我對此一無所知。 –

1

我從來沒有嘗試過OpenSL ES在Android,但也許你可以嘗試將LOCAL_LDLIBS改變(根據this網站):

  • LOCAL_LDLIBS:= libOpenSLES

也許試着爲每個平臺一次構建一個步驟(n ot'all'在APP_ABI中)