在Windows/Linux下,通过JNA调用dll/so接口,如果存在多个相互依赖的dll/so, 直接加载其中其中一个so就会有问题. 解决方案就是显式的把其他的so加载进去, Android不需要,Android会自动把指定目录下的所有so加载进去
比如有两个so接口, liba.so 和 libb.so, 其中a依赖b.
第一步,先创建libb.so的java接口B:
public interface B extends Library {
B INSTANCE = Native.load("b", B.class);
//不直接调用的话,方法可以不写
}
第二步,创建liba.so的java接口A,并优先加载B:
public interface A extends Library {
B b_instance = B.INSTANCE;//优先加载B
A INSTANCE = Native.load("a", A.class);
//A的接口方法忽略不写了
}
就是这样就可以了.