本文介绍了Robolectric坦克上加载JNI库的应用程序对象。我可以得到一个解决方法吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的Andr​​oid应用程序

应用程序对象加载JNI库,并Robolectric似乎不喜欢这样。当我去运行我的测试Robolectric胡扯了,我得到这个堆栈跟踪:

我不完全相信我能做些什么这个问题。一个解决办法的任何想法?

解决方案

解决方案适用于Robolectric 1.2,而不是2 +

感谢扬伯克尔在这里回答这个: https://groups.google.com/d/msg/robolectric/beW9XjT8E1A/pJQrRaybN30J

 类MyJniClass {
 静态{
        尝试 {
            的System.loadLibrary(LIBNAME);
        }赶上(的UnsatisfiedLinkError E){
            //只有忽略例外非Android ENV
            如果(Dalvik的.equals(System.getProperty(java.vm.name)))掷Ë;
        }
    }
}
 
 公共类MyTestRunner扩展RobolectricTestRunner {
   公共MyTestRunner(类TestClass中)抛出InitializationError {
         //删除本地通话+替换阴影
        addClassOrPackageToInstrument(com.example.jni.MyJniClass);
   }

   保护无效bindShadowClasses(){
         //绑定阴影JNI类
   }
}
 

The Application object for my Android app loads a JNI library, and Robolectric doesn't seem to like that. When I go to run my tests Robolectric craps out and I get this stack trace:

I'm not exactly sure what I can do about this. Any ideas on a workaround?

解决方案

Solution works for Robolectric 1.2, not 2.+

Thanks to Jan Berkel for answering this here:https://groups.google.com/d/msg/robolectric/beW9XjT8E1A/pJQrRaybN30J

class MyJniClass {
 static {
        try {
            System.loadLibrary("libname");
        } catch (UnsatisfiedLinkError e) {
            // only ignore exception in non-android env
            if ("Dalvik".equals(System.getProperty("java.vm.name"))) throw e;
        }
    }
}
public class MyTestRunner  extends RobolectricTestRunner {
   public MyTestRunner(Class testClass) throws InitializationError {
         // remove native calls + replace with shadows
        addClassOrPackageToInstrument("com.example.jni.MyJniClass");
   }

   protected void bindShadowClasses() {
         // bind shadow JNI classes
   }
}

这篇关于Robolectric坦克上加载JNI库的应用程序对象。我可以得到一个解决方法吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-22 14:19