【发布时间】:2016-07-27 14:21:33
【问题描述】:
我正在尝试在 Android 上使用 OpenAL 来生成空间音频,但我真的很难将我的思想包裹在 NDK 和 JNI 以及所有这些东西上。
注意:这是我第一次使用 JNI 和 NDK,我对 android 开发还很陌生
但我找到了一个名为 OpenAL4Android 的库。此外,here 是一个使用它的示例应用程序(在“HelloOpenAL4Android”标题下)。该项目很旧,是在 Eclipse 中完成的。所以我所做的是:
- 在Android Studio中导入项目(新建->导入项目)
- 创建了 gradle.properties 文件并添加了 android.useDeprecatedNdk=true;否则我得到一个错误。然后 Android Studio 将“OpenAL4Android”作为库加载到项目中(称为“helloOpenAL4Android”)
- 将 build.gradle 中的 min 和 target sdk 从 7 更改为 15(min) 和 23(target)
- 试图构建项目,但我得到以下错误:
在
的 openalwrapper.h 头文件中#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:抱歉,这篇文章太长了,我很绝望,我无法完成我的项目,而且我的时间不多了。
编辑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
【问题讨论】:
-
你的 Android.mk 是什么样的?
标签: android android-ndk java-native-interface openal