【问题标题】:Can't run OpenAL4Android example in Android Studio无法在 Android Studio 中运行 OpenAL4Android 示例
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 2016-09-13
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多