无法在Android Studio中运行OpenAL4Android示例

时间:2016-04-06 22:52:48

标签: android android-ndk java-native-interface openal

我正在尝试在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)
  • 尝试构建项目,但是我收到以下错误: enter image description here

中的openalwrapper.h标题中的

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)

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

当我尝试使用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:抱歉这篇长篇文章,我非常绝望,我无法完成我的项目,而且我已经没时间了。

EDIT1:

这是我的Android.mk文件:

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

并且openal forder与jni文件夹处于同一级别 文件夹结构:

package main

import "fmt"

type Currency string

type Amount struct {
    Currency Currency
    Value float32
}

type Balance map[Currency]float32

func (b *Balance) Add(amount Amount) *Balance {
    current, ok := (*b)[amount.Currency]
    if ok {
        (*b)[amount.Currency] = current + amount.Value
    } else {
        (*b)[amount.Currency] = amount.Value
    }
    return b
}

func main() {
    b := &Balance{Currency("USD"): 100.0}
    b = b.Add(Amount{Currency: Currency("USD"), Value: 5.0})

    fmt.Println("Balance: ", (*b))
}

1 个答案:

答案 0 :(得分:0)

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