6

我在 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部分可以吗?如果是这样,我需要改变什么?

4

1 回答 1

6

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

您需要 Java 的原因是 Android 系统加载器无法找到libfmodex.so解析libghost.so. 因此,加载libghost.so失败。Java 允许您在加载库之前预加载依赖项。

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

Currently, you can switch all your code that works with fmod to dynamic linking, or build a third shared library which will load fmod and then load the ghost library. In this situation, the loader will be able to resolve the references in ghost because fmod will already be loaded.

于 2012-10-15T14:46:02.403 回答