0

我使用来自tinyalsa-ndk的源代码构建了 tinyalsa lib ,并使用 JNI 调用将其包装起来,我正尝试在我的代码中使用它。

我使用Swig生成 Java 包装器(并修改了输出以符合我的包)我的本机方法声明是:

public final static native long mixer_open(long jarg);

我的 JNI 包装器调用位于根 pacakge 下的包装器类 TinyAlsa.java 中(例如,我将使用 com.Example.App):

public static SWIGTYPE_p_mixer mixer_open(long card) 
{
    long cPtr = TinyAlsaJNI.mixer_open(card);
    return (cPtr == 0) ? null : new SWIGTYPE_p_mixer(cPtr, false);
}

我的包装器 c 方法是:

SWIGEXPORT jlong JNICALL Java_com_Example_App_Native_TinyAlsaJNI_mixer_1open(JNIEnv *jenv, jclass jcls, jlong jarg1) 
{
    jlong jresult = 0 ;
    unsigned int arg1 ;
    struct mixer *result = 0 ;

    (void)jenv;
    (void)jcls;
    arg1 = (unsigned int)jarg1; 
    result = (struct mixer *)mixer_open(arg1);
    *(struct mixer **)&jresult = result; 
    return jresult;
}

tinalsa 库加载正常,没有异常,但调用如mixer_open(0)返回空指针。
但是,如果我执行编译后的 tinymix 混合器是打开的,并且混合器控件应该被列出。
我错过了什么吗?我怎样才能让它从我的代码中工作?

4

0 回答 0