首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JNI方法静态解析验证

JNI方法静态解析验证
EN

Stack Overflow用户
提问于 2012-04-07 00:55:56
回答 1查看 496关注 0票数 0

我想知道有没有可能在Android SDK下的Java中验证Java类中作为原生JNI方法实现的方法是静态解析的?下面是我正在寻找的东西的解释。

我有一个部分实现为JNI类的Java类。如果相应的JNI库已创建为静态库(例如,libhelper.a),则此类可以静态初始化。或者,如果相应的JNI库被实现为动态库(例如libhelper.so),则可以动态地对其进行初始化。在动态初始化的情况下,该类应该有一个加载动态库libhelper.so的静态初始化器。我使用了这两种情况,并且我希望为它们保留相同的源代码。为此,我想在静态初始化器中验证相应的本机方法是否已经被解析。如果是真的,我就不需要加载动态库了。如果为false,则意味着我必须加载动态库。问题是我不知道如何验证类中的方法是否已经被解决。

下面的示例有不正确的行,这表明了我的意图。

代码语言:javascript
运行
复制
package com.sample.package;
public class MyUtilityClass 
{
    private static final String TAG = "MyUtilityClass";
    public MyUtilityClass () {
        Log.v(TAG, " MyUtilityClass constructor");     
    }
    public static native int initMyHelperClass();
    public static native int performHelpAction(String action);
    public static native int uninitMyHelperClass();

    static {
        try {
            /* Here I want to verify that the native method 
               initMyHelperClass has has been already resolved.
               In this code snippet I am just comparing it to null,
               which is not correct. It should be something different. */ 
            if (initMyHelperClass == null) {
                /* initMyHelperClass has not been resolved yet,
                   load the dynamic library - libhelper.so */            
                System.loadLibrary("helper");
            }   
        } catch (UnsatisfiedLinkError ule) {
            /*Library not found. We should throw second exception. */
            throw ule;  
        }     
    } 
} 

谢谢。

EN

Stack Overflow用户

发布于 2012-04-07 03:40:13

您可以使用UnsatisfiedLinkError和一个伪方法来检查给定类的本机方法是否已加载:

代码语言:javascript
运行
复制
private static native void checkMe();  // does nothing

static {
    try {
        checkMe();
    } catch (UnsatisfiedLinkError e) {
        System.loadLibrary("checkLibrary");
    }
}
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10046593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档