目前Android NDK只能编译出动态库.so文件,并不是能生成.apk文件,这里我们简单介绍下NDK中的Hello JNI列子。整个例子分Java和Native C两个部分。首先是我们常用的Java端调用部分。 package com.example.hellojni;
import android.app.Activity;
import android.widget.TextView;
import android.os.Bundle;
public class HelloJni extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText( stringFromJNI() ); //如果调用失败将会抛出 java.lang.UnsatisfiedLinkError异常
setContentView(tv);
} //注意下面的native关键字
public native String stringFromJNI();
public native String unimplementedStringFromJNI();
static {
System.loadLibrary("hello-jni"); //载入hello-jni库
}
}
需要注意的是这里必须设置SDK版本为1.5或以上版本即在androidmanifest.xml文件中指明<uses-sdk android:minSdkVersion="3" /> 这里我们看到JNI调用无需特殊的权限。
而在Native C/C++中我们可以直接使用C++库,不过这里包含了jni这个头文件。
#include <string.h>
#include <jni.h>
其中下面的返回类型jstring是VM String,在jni.h头文件中有定义
jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz )
{
return (*env)->NewStringUTF(env, "Hello from JNI, Android123 Test!");
}
其实很好理解的,仅仅是换个了别名而以,定义如下
typedef uint8_t jboolean; /* unsigned 8 bits */
typedef int8_t jbyte; /* signed 8 bits */
typedef uint16_t jchar; /* unsigned 16 bits */
typedef int16_t jshort; /* signed 16 bits */
typedef int32_t jint; /* signed 32 bits */
typedef int64_t jlong; /* signed 64 bits */
typedef float jfloat; /* 32-bit IEEE 754 */
typedef double jdouble; /* 64-bit IEEE 754 */
#else
typedef unsigned char jboolean; /* unsigned 8 bits */
typedef signed char jbyte; /* signed 8 bits */
typedef unsigned short jchar; /* unsigned 16 bits */
typedef short jshort; /* signed 16 bits */
typedef int jint; /* signed 32 bits */
typedef long long jlong; /* signed 64 bits */
typedef float jfloat; /* 32-bit IEEE 754 */
typedef double jdouble; /* 64-bit IEEE 754 */
#endif
typedef jint jsize;
还有一些调用平时注意的声明
#define JNI_FALSE 0
#define JNI_TRUE 1
#define JNI_VERSION_1_1 0x00010001
#define JNI_VERSION_1_2 0x00010002
#define JNI_VERSION_1_4 0x00010004
#define JNI_VERSION_1_6 0x00010006
#define JNI_OK (0) /* no error */
#define JNI_ERR (-1) /* generic error */
#define JNI_EDETACHED (-2) /* thread detached from the VM */
#define JNI_EVERSION (-3) /* JNI version error */
#define JNI_COMMIT 1 /* copy content, do not free buffer */
#define JNI_ABORT 2 /* free buffer w/o copying back */
#define JNIIMPORT
#define JNIEXPORT
#define JNICALL
分享到:
相关推荐
Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例
Android NDK 开发时需要的 常用的JNI API
一个简单的OpenGL ES 3.0 示例 (Android NDK jni)
原文链接 http://blog.csdn.net/u012840567/article/details/53283274
内包括常用的 android JNI开发文档档。还官方的jni英语版手册。诚心分享。
在网上找的NDK资料 以及利用Android NDK编写一个简单的HelloWorld的图文教材
史上最强NDK入门项目实战.rar ndk入门很好的资料附代码
android jni demo 已经通过测试
网上虽然可以找到相关的,但是都是零星散乱,需要用大量的时间去摸索.这篇独家专作将为你节省大量摸索时间和网络搜索时间.让你不走弯路,快速入门.
介绍安卓相关的知识介绍安卓相关的知识介绍安卓相关的知识介绍安卓相关的知识介绍安卓相关的知识介绍安卓相关的知识介绍安卓相关的知识介绍安卓相关的知识介绍安卓相关的知识介绍安卓相关的知识介绍安卓相关的知识...
android ndk jni模块,用于从源代码使用android内部库。 用法 将代码从github推送到您的jni文件夹: $ git clone https://github.com/feicong/ndk 将这些行应用于您的Android.mk文件: LOCAL_C_INCLUDES := $...
Android NDK jni使用,包括java调用,脚本编写,和C++代码实现
这是Android NDK开发标准的JNI和Android.mk编写模版,里面的一些东西可能涉及我的项目,但不影响观看
Android studio 下 NDK Jni 开发 简单demo 谢谢
ndk demo开发过程在http://blog.csdn.net/gzjck/article/details/51724970
传智播客android NDK JNI编程
android ndk举例 jni
android NDK 自动生成jni头文件 要所java 类自动生成jni调用头文件。
Android Studio JNI/NDK 编程; 具体见博客: http://blog.csdn.net/q610098308/article/details/51313341
AndroidStudio环境下的jni调用(NDK),这个教程可以让完全不会AndroidStudio的人学会jni调用。完全步骤话,非常简单。