免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4822 | 回复: 0
打印 上一主题 下一主题

android ndk示例hello-jni的c++版 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-18 09:22 |只看该作者 |倒序浏览
官方发布目前只有C版,现提供C++版,代码如下
               
               
                #include stdio.h>
#include jni.h>
//#define LOG_TAG "HelloJni"
//#undef LOG
//#include
JNIEXPORT jstring JNICALL Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv * env, jobject obj)
{
    return env->NewStringUTF( (char *)"HelloJni Native String");
    //LOGD("Hello LIB!\n");
}
static JNINativeMethod methods[] = {
        {"stringFromJNI", "()Ljava/lang/String;", (void*)Java_com_example_hellojni_HelloJni_stringFromJNI },
};
static const char *classPathName = "com/example/hellojni/HelloJni";
/*
* Register several native methods for one class.
*/
static int registerNativeMethods(JNIEnv* env, const char* className,
                JNINativeMethod* gMethods, int numMethods)
{
    jclass clazz;
    fprintf(stderr, "RegisterNatives start for '%s'", className);
    clazz = env->FindClass(className);
    if (clazz == NULL) {
        fprintf(stderr, "Native registration unable to find class '%s'", className);
        return JNI_FALSE;
    }
    if (env->RegisterNatives(clazz, gMethods, numMethods)  0) {
        fprintf(stderr, "RegisterNatives failed for '%s'", className);
        return JNI_FALSE;
    }
    return JNI_TRUE;
}
/*
* Register native methods for all classes we know about.
*
* returns JNI_TRUE on success.
*/
static int registerNatives(JNIEnv* env)
{
    if (!registerNativeMethods(env, classPathName,
        methods, sizeof(methods) / sizeof(methods[0]))) {
            return JNI_FALSE;
    }
    return JNI_TRUE;
}
// ----------------------------------------------------------------------------
/*
* This is called by the VM when the shared library is first loaded.
*/

typedef union {
    JNIEnv* env;
    void* venv;
} UnionJNIEnvToVoid;
jint JNI_OnLoad(JavaVM* vm, void* reserved)
{
    UnionJNIEnvToVoid uenv;
    uenv.venv = NULL;
    jint result = -1;
    JNIEnv* env = NULL;
    printf("JNI_OnLoad");
    if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_4) != JNI_OK) {
        fprintf(stderr, "GetEnv failed");
        goto bail;
    }
    env = uenv.env;
    if (registerNatives(env) != JNI_TRUE) {
        fprintf(stderr, "GetEnv failed");
        goto bail;
}
        result = JNI_VERSION_1_4;
bail:
    return result;
}


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/23800/showart_2054975.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP