首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android NDK/JNI-范例开发流程

2012-10-05 
android NDK/JNI-实例开发流程#endif/*?* Class:???? com_myq_android_HelloNDK_Jni?* Method:??? getCInt

android NDK/JNI-实例开发流程

#endif
/*
?* Class:???? com_myq_android_HelloNDK_Jni
?* Method:??? getCInt
?* Signature: (II)I
?*/
JNIEXPORT jint JNICALL Java_com_myq_android_HelloNDK_Jni_getCInt
? (JNIEnv *, jobject, jint, jint);/*
?* Class:???? com_myq_android_HelloNDK_Jni
?* Method:??? getCString
?* Signature: (Ljava/lang/String;)Ljava/lang/String;
?*/
JNIEXPORT jstring JNICALL Java_com_myq_android_HelloNDK_Jni_getCString
? (JNIEnv *, jobject, jstring);#ifdef __cplusplus
}
#endif
#endif??5、在android工程根目录下创建jni文件夹,移动刚才的.h文件至此目录下mkdir $NDKROOT/apps/HelloNDK/project/jni注:该jni文件夹主要存放c\c++方面的头文件和源文件及Android.mk文件?移动刚才的.h文件至jni目录下mv com_myq_android_HelloNDK_Jni.h ../jni/?6、在jni下创建com_myq_android_HelloNDK_Jni.c文件?#include<stdio.h>
#include<stdlib.h>
#include"com_myq_android_HelloNDK_Jni.h"JNIEXPORT jint JNICALL Java_com_myq_android_HelloNDK_Jni_getCInt(JNIEnv *env , jobject thiz , jint x , jint y)
{
? return x+y ;
}JNIEXPORT jstring JNICALL Java_com_myq_android_HelloNDK_Jni_getCString(JNIEnv *env , jobject thiz , jstring name)
{
? const jchar *str = (*env)->GetStringChars(env,name,JNI_FALSE);
? jsize len = (*env)->GetStringLength(env,name) ;
? (*env)->NewString(env,str,len) ;
? //(*env)->ReleaseStringChars(env,name,str) ;
}?7、在jni下创建Android.mk文件?LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_PRELINK_MODULE := falseLOCAL_MODULE := HelloNDK
LOCAL_SRC_FILES := com_myq_android_HelloNDK_Jni.cinclude $(BUILD_SHARED_LIBRARY)?注:相关参数说明自行查询?8、在HelloNDK的工程目录[$NDKROOT/apps/HelloNDK]下创建Application.xml文件?APP_PROJECT_PATH := $(call my-dir)/project
APP_MODULES := HelloNDK
注:该文件时必须的,否则make无法编译?9、在$NDKROOT下编译生成.so文件make APP=HelloNDK编译成功后:在apps/HelloNDK/project/libs/armeabi下生成libHelloNDK.so?注:重新编译 make -B APP=HelloNDK?10、创建java文件,调用native方法package com.myq.android.HelloNDK;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;public class HelloNDK extends Activity {
?public static final String TAG = "------HelloNDK-------" ;
?private Jni mJni ;
?
?static
?{
??System.loadLibrary("HelloNDK") ;
?}
?
??? @Override
??? public void onCreate(Bundle savedInstanceState) {
??????? super.onCreate(savedInstanceState);
??????? mJni = new Jni() ;
???????
??????? final String cString = mJni.getCString("myq") ;
??????? final int cInt = mJni.getCInt(1, 2) ;
???????
??????? Log.i(TAG, "cString--" + cString + "--cInt--" + cInt) ;
???????
??????? setContentView(R.layout.main);
??? }
}?注:加载库文件static
?{
??System.loadLibrary("HelloNDK") ;
?}
11、在eclipe中运行

热点排行