Android ndk示例本机音频错误



我尝试使用Android Studio中NDK中包含的OpenSl ES的示例代码。你稍后会看到它不起作用。所以我需要帮助在Android Studio中使用代码。代码是为Eclipse编写的,但我使用了Android Studio的导入功能来包含它。我也尝试过Eclipse,它运行得很好,但当我尝试在Android Studio中运行代码时,我得到了以下错误代码

/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(应用程序(到

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)

我的应用程序.mk:

APP_ABI := all

解决方案是编译两次源代码。

因此,在终端中,我第一次使用命令进行编译:ndk-build
第二次使用命令:ndk-build TARGET_PLATFORM=android-xy
xy必须更换为安卓版

这显然不是正确的方式,但至少它起到了作用。

我认为您可能只需要添加

ldLibs.addAll(["OpenSLES"])

插入build.gradle文件中的ndk{ }字段。这就是我解决问题的原因。

我从未在Android上尝试过OpenSL ES,但也许你可以尝试将LOCAL_LDLIBS更改为(根据本网站(:

  • LOCAL_LDLIBS:=libOpenSLES

也许还可以尝试为每个平台一次构建一个步骤(在APP_ABI中不是"全部"(

最新更新