我使用来自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 混合器是打开的,并且混合器控件应该被列出。
我错过了什么吗?我怎样才能让它从我的代码中工作?