NDK/JNI02-实例开发流程

Android_NDK 2011-01-12 11:16:01 阅读40 评论0 字号:订阅

一、下载与配置 1、下载 提供如下Linux版下载地址: http://www.ideasandroid.com/android/sdk/android-ndk-r4-linux-x86.zip 下载好以后,解压到任意目录下 unzip android-ndk-r4-linux-x86.zip 2、简单配置 配置NDKROOT及PATH环境变量 方法1) export NDKROOT=/usr/local/android-sdk-linux_86/android-ndk-r4 export PATH=$PATH:$NDKROOT 方法2) vim ~/.profile #配置NDK环境变量 export NDKROOT=/usr/local/android-sdk-linux_86/android-ndk-r4 export PATH=$PATH:$NDKROOT 保存关闭后执行如下方法使之生效 source ~/.profile 方法3) vim /etc/profile 如下同2) 二、简单实例配置过程 1、创建工程目录 mkdir -p $NDKROOT/apps/HelloNDK/project 说明: 1)$NDKROOT/apps/HelloNDK --是NDK的工程目录 2)$NDKROOT/apps/HelloNDK/project --是Android的工程目录 2、在Eclipse中创建Android工程 工程Location为: $NDKROOT/apps/HelloNDK/project 3、创建native方法所在的class package com.myq.android.HelloNDK; public class Jni { public native int getCInt(int x , int y) ;
public native String getCString(String name) ;
} 4、创建com_myq_android_HelloNDK_Jni.h文件 1)重新编译Jni.java文件 拷贝Jni.java到$NDKROOT/HelloNDK/project/bin #进入NDK根 cd $NDKROOT #进入bin目录 cd apps/HelloNDK/project/bin/ #拷贝Jni.java文件 cp apps/HelloNDK/project/src/com/myq/android/HelloNDK/Jni.java cd ./ #编译 javac Jni.java 2)创建Jni.h文件 移动apps/HelloNDK/project/bin/下的Jni.class文件 cd $NDKROOT cd apps/HelloNDK/project/bin/ mv Jni.class com/myq/android/HelloNDK/ 生成Jni.h文件,在bin文件夹位置下执行 javah -jni com.myq.android.HelloNDK.Jni 注: 此时在bin下生成如下文件:com_myq_android_HelloNDK_Jni.h /* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_myq_android_HelloNDK_Jni */ #ifndef _Included_com_myq_android_HelloNDK_Jni
#define _Included_com_myq_android_HelloNDK_Jni
#ifdef __cplusplus
extern "C" {
#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 := false LOCAL_MODULE := HelloNDK
LOCAL_SRC_FILES := com_myq_android_HelloNDK_Jni.c include $(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中运行

更多相关文章

  1. android中build.gradle文件简单说明
  2. Android(安卓)pm命令详解
  3. android 使用系统照相程序照相并存储、显示在界面上
  4. Android(安卓)开发基础
  5. Android中向服务器上传图片
  6. Android(安卓)Android.mk 文件一点感悟
  7. Android中AIDL详解
  8. android的文件读写
  9. NPM 和webpack 的基础使用

随机推荐

  1. Android客户端与服务器数据交互流程
  2. Android增量升级功能
  3. 盛大词库 – 拥有众多专业词典的字典软件
  4. android图文弹幕
  5. Android代码规范-命名规范
  6. 谈一谈Android内存
  7. 【已解决】Android(安卓)Studio使用Datab
  8. Android移动端音视频的快速开发教程(三)
  9. Android(安卓)属性系统
  10. Android中的数据共享-application contex