NDK的一个简单例子代码
来源:互联网 发布:2017程序员考试真题 编辑:程序博客网 时间:2024/04/28 23:22
MainActivity.java代码:
/* * * 这是NDK中java与C++数据传输的接口例子 * */package com.example.test1;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.widget.Toast;public class MainActivity extends Activity {static { System.loadLibrary("Test1"); }native public static int getInt() ;native public static String stringFromJNI(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toast.makeText(MainActivity.this, ""+getInt()+stringFromJNI(), Toast.LENGTH_SHORT).show(); } @Override public 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; } }
Test1.cpp代码:
#include <jni.h>extern "C"JNIEXPORT jint JNICALLJava_com_example_test1_MainActivity_getInt(){return 8;}extern "C"//每一个C++的函数都要加上这个,C语言文件不用加JNIEXPORT jstring JNICALLJava_com_example_test1_MainActivity_stringFromJNI(JNIEnv* env, jobject thiz) { return env->NewStringUTF("Hello jni");}/* 补充说明: * 一、本地函数的返回值为jstring.这种类型是在jni.h中定义的,表示本地代码层中的Java.lang.String对名。 * 二、函数的名字必须以Java包和类名开关,它标识了声明相关本地方法 的位置。 * 三、函数的第一个参数env的类型为JNInv指针。JNIEnv是jni.h是定义的一个C结构体,标识该JNI函数可以在Java中被调用 并与之交互。 * 四、函数的第二个参数thiz的类型为jobject.这个类型是在jni.h中定义的,它表示了本地代码层任意的一个Java对象。传递给该参数的值 * 是一个隐式的thiz实例,是Java VM传递给所有Java实例方法的值。 * 五、这个函数会将env参数解引用来调用 NewStringUtf()JNI函数。NewStringUTF()将它的第二个参数(一个C字符串)转换成相应的jstring * (这个字符串是用Unicode UTF编码标准编码的),并将这个Java字符串返回,最后返回给Java层。 * 六、在C语言中使用JNI时,想要调用JNI函数就得解开JNIEnv参数(例如*env)。同样,必须把JNIVnv作为第一个参数传递给JNI函数。 * 相反,C++中则不需要这么麻烦:没必要非得解引用JNInv参数也不需要把它作为第一个参数递给JNI函数。例如,各序清单中用C编写的函数调用时 * 用(*env)->NewString(env,"Hello jni"),而在C++中则可以写成env->NewString("Hello jni"); * * *//*JNIEXPORT jstring JNICALLJava_com_example_firstndk_MainActivity_other(JNIEnv *env,jobject thiz){}*/
android.mk代码:
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := Test1LOCAL_SRC_FILES := Test1.cppinclude $(BUILD_SHARED_LIBRARY)
0 0
- NDK的一个简单例子代码
- 使用Android-studio简单实现一个NDK的例子
- Android NDK的简单例子
- Android studio ndk开发--简单的例子
- 一个简单的例子
- NSNotificationCenter 用法 一个简单的使用 NSNotificationCenter 的代码例子
- Android代码混淆的一个常用的简单例子
- 一个简单的打印HttpServletRequest头jsp代码例子
- 一个OpenGL ES 的简单使用例子代码
- 一个简单的jnative调用dll例子(含dll代码)
- 用装饰模式优化代码的一个简单例子
- 用装饰模式优化代码的一个简单例子
- 用装饰模式优化代码的一个简单例子
- 用装饰模式优化代码的一个简单例子
- 最简单 NDK 例子
- 一个NDK程序例子
- openmp 例子:一个简单的OpenMP例子
- android ndk 入门 - 一个简单的ndk工程
- 算法与数据结构第八次作业 count2
- ecshop前台使用print_r调试
- linux awk使用简介
- 跟着实例学习ZooKeeper的用法: Leader选举
- is not mapped问题,Spring加载jar中配置文件
- NDK的一个简单例子代码
- jquery小结
- 昭阳 E43A 的笔记本电脑 开启或者关闭笔记本自带无线网卡
- 【BZOJ】【P2348】【Baltic 2011】【Plagiarism】【二分】
- ExtJs 入门 [窗体:Window组件]
- CString和std::wstring互转,LPCTSTR和std::wstring互转
- Java服务端和Android客户端通讯对消息体加密和解密的工具类,主要依赖包:commons-codec-1.8.jar
- 萌WiFi 将“免费”上网进行到底
- java拓扑排序实现源码