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中彩信文件的读取
  2. Android 上传图片到服务器(多文件上传)
  3. Android 系统文件简介
  4. 基于Android tess-two工程的数字识别
  5. [置顶] Android系统安全之旅 第1章 编译Android程序的方法
  6. Android 保存数据到文件
  7. Android使背景灯(Brightness)高亮的方法
  8. android spinner自动弹出列表,设置title,TtextView不换行自动截取

随机推荐

  1. Android系统的Binder机制分析
  2. android TextView设置字过多长长度后面显
  3. Android编译环境搭建步骤(公司) - 写给自
  4. android之Binder机制解析
  5. Android创建SDCard镜像
  6. Android中ListView和ScrollView总结【安
  7. Android浏览器插件开发
  8. Android――Android(安卓)lint工具项目资
  9. Android SAX和DOM解析XML文件
  10. 个人安卓学习笔记---第一个Android应用程