无法在 Android Studio 中 运行 OpenAL4Android 示例

Can't run OpenAL4Android example in Android Studio

我正在尝试在 Android 上使用 OpenAL 来生成空间音频,我真的很难将我的注意力集中在 NDK 和 JNI 以及所有这些东西上。

注意:这是我第一次使用 JNI 和 NDK,我对 android 开发

还很陌生

但我找到了一个名为 OpenAL4Android 的库。此外 here 是一个使用它的示例应用程序(在 "HelloOpenAL4Android" 标题下)。该项目很旧,是在 Eclipse 中完成的。所以我所做的是:

在 openalwrapper.h header 在

#include <AL/al.h>
#include <AL/alc.h>

当我试图从 Android Studio OpenAL4Android 和 OpenAL-MOB 构建以便将它们集成到我的项目中时,我也遇到了这个错误。

另一方面,我通过运行 :

设法为所有 ABI 构建了 .so 共享库,而不仅仅是来自 OpenAL4Android 的 armeabi

ndk-build.cmd NDK_PROJECT_PATH=D:\AndroidProjects\OpenAL4Android\app\src\main

你知道为什么我一直收到 AL/al.h 找不到的错误吗?我试着把那个文件夹(AL/al.h)到处放,还是找不到。

是否与 Android Studio 不正确支持 NDK 有关?我应该使用实验性 gradle 插件吗?

真是气死我了

...请帮忙! :)

PS:很抱歉 post,我很绝望我无法完成我的项目而且我 运行 没时间了。


编辑 1:

这是我的 Android.mk 文件:

TARGET_PLATFORM := android-23
ROOT_PATH := $(call my-dir)


########################################################################################################
include $(CLEAR_VARS)

LOCAL_MODULE     := openal
#LOCAL_ARM_MODE   := arm
LOCAL_PATH       := $(ROOT_PATH)
LOCAL_C_INCLUDES := $(LOCAL_PATH) $(LOCAL_PATH)/../openal/include $(LOCAL_PATH)/../openal/OpenAL32/Include
LOCAL_SRC_FILES  := ../openal/OpenAL32/alAuxEffectSlot.c \
                    ../openal/OpenAL32/alBuffer.c        \
                    ../openal/OpenAL32/alDatabuffer.c    \
                    ../openal/OpenAL32/alEffect.c        \
                    ../openal/OpenAL32/alError.c         \
                    ../openal/OpenAL32/alExtension.c     \
                    ../openal/OpenAL32/alFilter.c        \
                    ../openal/OpenAL32/alListener.c      \
                    ../openal/OpenAL32/alSource.c        \
                    ../openal/OpenAL32/alState.c         \
                    ../openal/OpenAL32/alThunk.c         \
                    ../openal/Alc/ALc.c                  \
                    ../openal/Alc/alcConfig.c            \
                    ../openal/Alc/alcEcho.c              \
                    ../openal/Alc/alcModulator.c         \
                    ../openal/Alc/alcReverb.c            \
                    ../openal/Alc/alcRing.c              \
                    ../openal/Alc/alcThread.c            \
                    ../openal/Alc/ALu.c                  \
                    ../openal/Alc/android.c              \
                    ../openal/Alc/bs2b.c                 \
                    ../openal/Alc/null.c                 \

LOCAL_CFLAGS     := -DAL_BUILD_LIBRARY -DAL_ALEXT_PROTOTYPES
LOCAL_LDLIBS     := -llog -Wl,-s

LOCAL_STATIC_LIBRARIES := libtremolo

include $(BUILD_SHARED_LIBRARY)

########################################################################################################

include $(CLEAR_VARS)

LOCAL_MODULE     := openalwrapper
LOCAL_ARM_MODE   := arm
LOCAL_PATH       := $(ROOT_PATH)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../openal/include $(LOCAL_PATH)/../openal/tremolo
LOCAL_SRC_FILES  := openalwrapper.c                             \
                    org_pielot_openal_OpenAlBridge.c    \

LOCAL_LDLIBS     := -llog -Wl,-s

LOCAL_STATIC_LIBRARIES := libtremolo
LOCAL_SHARED_LIBRARIES := libopenal

include $(BUILD_SHARED_LIBRARY)

########################################################################################################

并且openal forder与jni文件夹同级 文件夹结构:

OpenAL4Android
    -app
    --src
    ---main
    -----jni
    -----openal
    -----java
    -----jniLibs
    -----res

没关系,我让它工作了。我将它集成到我的项目中。必须使用实验性 gradle 插件,然后必须再次 运行 ndk-build 以便它在 libs 文件夹中生成库。首先,我遇到一些错误,说它找不到本机方法的实现,因为我认为它会从 jniLibs 文件夹中获取它的库。