我正在尝试在Android上使用OpenAL来生成空间音频,而我真的很难想到NDK和JNI以及所有这些内容。
注意:这是我第一次使用JNI和NDK,而且我对Android开发还很陌生
但我找到了一个名为OpenAL4Android的库。此外,here是一个使用它的示例应用程序(在“HelloOpenAL4Android”标题下)。该项目很旧,在Eclipse中完成。所以我做的是:
中的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))
}
答案 0 :(得分:0)
没关系,我开始工作了。我将它集成到我的项目中。不得不使用实验gradle插件然后不得不再次运行ndk-build,因此它在libs文件夹中生成了库。首先我遇到一些错误,说它无法找到原生方法的实现,因为我认为它会从jniLibs文件夹中获取它的库。