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方法是在什么被初始化的呢?
展开
 我来答
百度网友f036095c5
推荐于2016-01-24 · TA获得超过1234个赞
知道小有建树答主
回答量:729
采纳率:83%
帮助的人:640万
展开全部

不是loadLib,是

static {
        System.loadLibrary("你的库名");
    }

这个是在类被加载的时候加载的,也就是你的Test。你说的有些没有使用load,是因为在系统启动的时候so已经被加载了。你可以通过命令行看到系统里面的很多so:

如果so被加载了,你就不需要再使用加载代码,可以直接用native接口

更多追问追答
追问
但是有的类也有本地方法  为啥没有这个操作呢?
追答
因为这个库在其它地方load了啊。只要被load了就可以用了,并不需要在所属的类中用静态方法去load。你可以做一个简单的实验,另外创建一个类,把这个静态load放到那个类中。在main中首先调用一下那个类,然后在来创建这个Test的实例,你会发现你的native接口都可以用
oueraini
推荐于2016-02-15 · TA获得超过3062个赞
知道小有建树答主
回答量:358
采纳率:100%
帮助的人:105万
展开全部
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());
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式