仅从本机代码加载FMOD

时间:2012-07-11 06:49:15

标签: android-ndk fmod

我在FMOD示例文件夹中找到了一个名为nativeactivity的示例,但不幸的是它使用了一些java代码:

package org.fmod.nativeactivity;

public class Example extends android.app.NativeActivity 
{
    static 
    {
        System.loadLibrary("fmodex");
        System.loadLibrary("main");
    }    
}

Android.mk看起来像这样:

LOCAL_PATH := $(call my-dir)

#
# FMOD Ex Shared Library
# 
include $(CLEAR_VARS)

LOCAL_MODULE            := fmodex
LOCAL_SRC_FILES         := libfmodex.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/inc

include $(PREBUILT_SHARED_LIBRARY)

#
# Example Library
#
include $(CLEAR_VARS)

LOCAL_MODULE           := main
LOCAL_SRC_FILES        := main.c
LOCAL_LDLIBS           := -llog -landroid
LOCAL_SHARED_LIBRARIES := fmodex
LOCAL_STATIC_LIBRARIES := android_native_app_glue

include $(BUILD_SHARED_LIBRARY)

$(call import-module,android/native_app_glue)

没有java部分可以吗?如果是这样,我需要改变什么呢?

1 个答案:

答案 0 :(得分:6)

我不知道你为什么要摆脱这几行Java。据我所知,这对您的其他应用程序没有任何影响。

您需要Java的原因是Android系统加载程序无法找到libfmodex.so,这对于解析libghost.so中的引用至关重要。因此,libghost.so的加载失败。 Java允许您在加载库之前预加载依赖项。

不幸的是,NativeActivity本身只能加载一个库。 2012年4月发布了request,以便在将来的某个时间改善这种情况。

目前,您可以将所有与 fmod 配合使用的代码切换为动态链接,或者构建第三个加载 fmod 的共享库,然后加载幽灵库。在这种情况下,加载器将能够解析 ghost 中的引用,因为 fmod 已经加载。