Android移植---JNI中HelloWorld的C和C++实现
来源:互联网 发布:淘宝首页改版 编辑:程序博客网 时间:2024/05/22 06:05
MainActivity.java
package com.example.jniload;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.widget.TextView;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);TextView tv = new TextView(this); tv.setText( stringFromJNI() ); setContentView(tv);//setContentView(R.layout.activity_main);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}native String stringFromJNI();static{System.loadLibrary("jniload");}}test-jni.c
#include <jni.h>#include <stdio.h>#include <string.h>#include <assert.h># define NELEM(x) ((int) (sizeof(x) / sizeof((x)[0])))#define JNIREG_CLASS "com/example/test/Test"JNIEXPORT jstring JNICALL stringFromJNI(JNIEnv *env, jclass clazzi){ return (*env)->NewStringUTF(env, "hello Android3.");}static JNINativeMethod method_table[] = { { "stringFromJNI", "()Ljava/lang/String;", (void*)stringFromJNI },//绑定};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;}int register_ndk_load(JNIEnv *env){ return registerNativeMethods(env, JNIREG_CLASS, method_table, NELEM(method_table));}JNIEXPORT jint 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 result; } register_ndk_load(env); return JNI_VERSION_1_4;}jni-load.cpp
#include <jni.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>#define NELEM(x) ((int) (sizeof(x) / sizeof((x)[0])))#define JNIREG_CLASS "com/example/jniload/MainActivity"extern "C"/*jstring Java_com_example_jniload_MainActivity_stringFromJNI( JNIEnv* env,jobject thiz ){char* str="Hello from JNI.";return (env)->NewStringUTF(str);}*/JNIEXPORT jstring JNICALL stringFromJNI( JNIEnv* env,jobject thiz ){char* str="Hello from JNI.";return (env)->NewStringUTF(str);}static JNINativeMethod method_table[] = { { "stringFromJNI", "()Ljava/lang/String;", (void*)stringFromJNI },};static int registerNativeMethods(JNIEnv* env, const char* className, JNINativeMethod* gMethods, int numMethods){ jclass clazz; clazz = env->FindClass(className); if (clazz == NULL) { return JNI_FALSE; } if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) { return JNI_FALSE; } return JNI_TRUE;}int register_ndk_load(JNIEnv *env){ return registerNativeMethods(env, JNIREG_CLASS, method_table, NELEM(method_table));}jint JNI_OnLoad(JavaVM* vm, void* reserved){ JNIEnv* env = NULL; jint result = -1; if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { return result;} //result=register_ndk_load(env); if ( register_ndk_load(env) < 0){ goto bail; } result = JNI_VERSION_1_4;bail: return result;}
0 0
- Android移植---JNI中HelloWorld的C和C++实现
- JNI简单实现Java调用C++/C的HelloWorld
- JNI简单实现Java调用C++/C的HelloWorld
- JNI简单实现Java调用C++/C的HelloWorld
- JNI_OnLoadJNI中HelloWorld的C和C++实现
- Android中JNI的使用之HelloWorld
- linux下java 调用 c jni 实现 HelloWorld
- jni 入门 android的C编程之旅 --->环境搭建&&helloworld
- android jni中碰到的问题 和步骤 (C 和 java互调)
- android NDK jni中c和c++文件报错
- Android NDK的C/C++代码中利用JNI回调实现字符编码转换
- Android NDK的C/C++代码中利用JNI回调实现字符编码转换
- Android NDK的C/C++代码中利用JNI回调实现字符编码转换
- Android Studio中通过jni实现对C/C++代码的调用,HelloJni,Ubuntu
- cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
- cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
- cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
- cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
- Populating Next Right Pointers in Each Node--为每一个节点填充next right指针
- 内存调试的东西D/dalvikvm( 809 ): GC_CONCURRENT freed
- Java:初始化块
- 10个关于视差滚动效果的教程和插件
- Oracle System密码忘记 密码修改、删除账号锁定lock
- Android移植---JNI中HelloWorld的C和C++实现
- SQL 存储过程入门(事务)
- eclipse中删除workspace
- shared memory driver(2)
- how to list tabes based on column name in sybase?
- Inside The c++ Object Model 读书笔记
- 我们需要根据设备的寄存器编写驱动么?
- iOS开发-retain/assign/strong/weak/copy/mutablecopy/autorelease区别
- css控制div显示/隐藏方法及2种方法比较原码