android 的native方法,在哪使用System.loadLib()方法?
比如我有一个累calssTest{static{System.loadLib(lib名字)//有的没有这个操作}publicnativevoidgetString();}...
比如我有一个累
calss Test{
static{
System.loadLib(lib名字)//有的没有这个操作
}
public native void getString();
}
这个时候类Test必须要在前面加上System.loadLib(lib名字)吗?,为什么我在Android源码中发现有的也使用底层c代码,但是类里面却没有出现 类似System.loadLib(lib名字)这样的操作呢?这个native方法是在什么被初始化的呢? 展开
calss Test{
static{
System.loadLib(lib名字)//有的没有这个操作
}
public native void getString();
}
这个时候类Test必须要在前面加上System.loadLib(lib名字)吗?,为什么我在Android源码中发现有的也使用底层c代码,但是类里面却没有出现 类似System.loadLib(lib名字)这样的操作呢?这个native方法是在什么被初始化的呢? 展开
2个回答
展开全部
更多追问追答
追问
但是有的类也有本地方法 为啥没有这个操作呢?
追答
因为这个库在其它地方load了啊。只要被load了就可以用了,并不需要在所属的类中用静态方法去load。你可以做一个简单的实验,另外创建一个类,把这个静态load放到那个类中。在main中首先调用一下那个类,然后在来创建这个Test的实例,你会发现你的native接口都可以用
展开全部
System.loadLibrary()是在使用Java的JNI机制时,会用到的一个非常重要的函数,它的作用即是把实现native方法的那个链接库load进来,或者load其他什么动态连接库。
System.loadLib()的实现(code在libcore/luni/src/main/java/java/lang/System.java这个文件中):
/**
* Loads and links the library with the specified name. The mapping of the
* specified library name to the full path for loading the library is
* implementation-dependent.
*
* @param libName
* the name of the library to load.
* @throws UnsatisfiedLinkError
* if the library could no<span style="color:#003399;"></span>t be loaded.
*/
public static void loadLibrary(String libName) {
Runtime.getRuntime().loadLibrary(libName, VMStack.getCallingClassLoader());
}
System.loadLib()的实现(code在libcore/luni/src/main/java/java/lang/System.java这个文件中):
/**
* Loads and links the library with the specified name. The mapping of the
* specified library name to the full path for loading the library is
* implementation-dependent.
*
* @param libName
* the name of the library to load.
* @throws UnsatisfiedLinkError
* if the library could no<span style="color:#003399;"></span>t be loaded.
*/
public static void loadLibrary(String libName) {
Runtime.getRuntime().loadLibrary(libName, VMStack.getCallingClassLoader());
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询