一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Android JNI(實(shí)現(xiàn)自己的JNI_OnLoad函數(shù))

 mandrave 2012-05-15

實(shí)現(xiàn)JNI中本地函數(shù)注冊(cè)可以兩種方式: 
(1)采用默認(rèn)的本地函數(shù)注冊(cè)流程。 
(2)自己重寫(xiě)JNI_OnLoad()函數(shù)。(本文介紹)(Android中采用這種)

Java端代碼:

package com.jni;
public class JavaHello {
	public static native String hello();
	static {
		// load library: libtest.so
		try {
			System.loadLibrary("test");
		} catch (UnsatisfiedLinkError ule) {
			System.err.println("WARNING: Could not load library!");
		}
	}
	public static void main(String[] args) {
		String s = new JavaHello().hello();
		System.out.println(s);
	}
}

本地C語(yǔ)言代碼:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <jni.h>
#include <assert.h>

JNIEXPORT jstring JNICALL native_hello(JNIEnv *env, jclass clazz)
{
	printf("hello in c native code./n");
	return (*env)->NewStringUTF(env, "hello world returned.");
}

#define JNIREG_CLASS "com/jni/JavaHello"//指定要注冊(cè)的類(lèi)

/**
* Table of methods associated with a single class.
*/
static JNINativeMethod gMethods[] = {
	{ "hello", "()Ljava/lang/String;", (void*)native_hello },//綁定
};

/*
* Register several native methods for one class.
*/
static int registerNativeMethods(JNIEnv* env, const char* className,
        JNINativeMethod* gMethods, int numMethods)
{
	jclass clazz;
	clazz = (*env)->FindClass(env, className);
	if (clazz == NULL) {
		return JNI_FALSE;
	}
	if ((*env)->RegisterNatives(env, clazz, gMethods, numMethods) < 0) {
		return JNI_FALSE;
	}

	return JNI_TRUE;
}


/*
* Register native methods for all classes we know about.
*/
static int registerNatives(JNIEnv* env)
{
	if (!registerNativeMethods(env, JNIREG_CLASS, gMethods, 
sizeof(gMethods) / sizeof(gMethods[0]))) return JNI_FALSE; return JNI_TRUE; } /* * Set some test stuff up. * * Returns the JNI version on success, -1 on failure. */ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) { JNIEnv* env = NULL; jint result = -1; if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_4) != JNI_OK) { return -1; } assert(env != NULL); if (!registerNatives(env)) {//注冊(cè) return -1; } /* success -- return valid version number */ result = JNI_VERSION_1_4; return result; }

編譯及運(yùn)行流程: 

1 設(shè)置三個(gè)環(huán)境變量: 
export JAVA_HOME:=/usr/lib/jvm/java-6-sun-1.6.0.15 
export JAVA_SRC_PATH:=/home/kortide/Jackey/jni/jni_onload/com/jfo 
export NATIVE_SRC_PATH:=/home/kortide/Jackey/jni/jni_onload/jni

2 編譯JavaHello.java: 
javac $JAVA_SRC_PATH/JavaHello.java

3. 編譯NativeHello.c,生成共享庫(kù) 
gcc -I $JAVA_HOME/include -I $JAVA_HOME/include/linux -c -o $NATIVE_SRC_PATH/NativeHello.o  $NATIVE_SRC_PATH/NativeHello.c

gcc -fPIC -I $JAVA_HOME/include -I $JAVA_HOME/include/linux -shared -o $NATIVE_SRC_PATH/libtest.so $NATIVE_SRC_PATH/NativeHello.o

4. 運(yùn)行 
java com/jni/JavaHello

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多

    在线免费不卡亚洲国产| 丰满少妇被猛烈撞击在线视频 | 欧美精品久久一二三区| 国产国产精品精品在线| 日本一区二区三区黄色| 大香蕉伊人一区二区三区| 欧美午夜国产在线观看| 国产综合香蕉五月婷在线| 亚洲a级一区二区不卡| 五月天丁香婷婷一区二区| 亚洲黄片在线免费小视频| 久久碰国产一区二区三区| 日本国产欧美精品视频| 亚洲综合日韩精品欧美综合区| 国产精品日韩精品一区| 精品人妻一区二区四区| 污污黄黄的成年亚洲毛片| 国产在线日韩精品欧美| 日本高清一区免费不卡| 99视频精品免费视频播放| 精品午夜福利无人区乱码| 91欧美日韩精品在线| 亚洲天堂精品1024| 日本加勒比在线观看一区| 国产成人精品视频一区二区三区| 色婷婷在线精品国自产拍| 日韩欧美国产三级在线观看| 中文字幕有码视频熟女| 91香蕉视频精品在线看| 丁香六月啪啪激情综合区| 亚洲成人久久精品国产| 日本理论片午夜在线观看| 国产成人一区二区三区久久| 高清亚洲精品中文字幕乱码| 欧美激情一区=区三区| 麻豆视传媒短视频免费观看 | 日韩成人动作片在线观看| 好吊色欧美一区二区三区顽频| 日韩欧美一区二区黄色| 日本久久精品在线观看| 久久久免费精品人妻一区二区三区|