之前写了一篇JNI的使用,这里其实也是JNI的使用,只不过现在的使用更加方便,不需要什么cygwin或者gnu去创建那边麻烦,直接eclipse完成所有操作。

先前的一篇:http://xuzhiwei.blog.51cto.com/978424/976839


 1、首先现在Android的SDK和NDK

2、sdk中以及集成了eclipse,打开eclipse并下载CDT插件支持,一会儿写c++使用。

    CDT下载地址:http://www.eclipse.org/cdt/

3、配置NDK环境,windows->preferences->Android->NDK进行配置。

4、创建项目

5、创建完成后,右击项目Android Tools->Add Native Support就可以了。


自动为我们生成了JNI的目录,以及编译的Android.mk等文件。


6、好了,开始写代码。

创建NativeUtils.java

package com.xzw.firstndk;/** * 与c++的接口类,用来生成.h头文件 * @author xzw * */public class NativeUtils {    public static native String getWords();}


现在要生成.h的头文件,之前是在cmd里面通过javah命令来生成的,这里我们使用ant来自动为我们生成头文件。


创建build_headers.xml然后以ant editor的方式打开,使用快捷键ALT+/生成模板。

<?xml version="1.0" encoding="UTF-8"?>                description                                        

右击运行ant,然后刷新jni目录就可以看到.h文件了,也把一些依赖库给我们创建好了,方便很多。

如图

打开com_xzw_firstndk_NativeUtils.h可以看到:

/* DO NOT EDIT THIS FILE - it is machine generated */#include /* Header for class com_xzw_firstndk_NativeUtils */#ifndef _Included_com_xzw_firstndk_NativeUtils#define _Included_com_xzw_firstndk_NativeUtils#ifdef __cplusplusextern "C" {#endif/* * Class:     com_xzw_firstndk_NativeUtils * Method:    getWords * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_xzw_firstndk_NativeUtils_getWords  (JNIEnv *, jclass);#ifdef __cplusplus}#endif#endif


现在开始实现,打开FirstNDK.cpp,引入.h头文件

eclipse提示功能也是很不错的,alt+/快捷快速提示,

#include #include "com_xzw_firstndk_NativeUtils.h"/* * Class:     com_xzw_firstndk_NativeUtils * Method:    getWords * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_xzw_firstndk_NativeUtils_getWords  (JNIEnv *env, jclass clazz){    return env->NewStringUTF("hello firt ndk");}

好了,c++部分ok了,现在来调用咯。

package com.xzw.firstndk;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends Activity {    TextView resultText;        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);         resultText = (TextView)findViewById(R.id.result);        //调用c++的输出,显示出来        resultText.setText(NativeUtils.getWords());            }     static{        System.loadLibrary("FirstNDK");    }}


完成了,默认生成的是armeabi架构的so文件,如果需要生成多中架构的支持的so,需要在jni目录下创建Application.mk文件。

APP_ABI :=armeabi armeabi-v7a x86

添加好了,运行起来就可以在libs目录下看到这几个架构的文件夹了。搞定手工了。

更多相关文章

  1. 箭头函数的基础使用
  2. NPM 和webpack 的基础使用
  3. Python list sort方法的具体使用
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. android 使用html5作布局文件: webview跟javascript交互
  6. Android(安卓)Resource介绍和使用
  7. "Failed to fetch URL https://dl-ssl.google.com/android/repos
  8. 使用NetBeans搭建Android开发环境
  9. Android之菜单总结

随机推荐

  1. java.util.ConcurrentModificationExcept
  2. 【Android】android开发过程遇到的问题以
  3. Android手机客户端与Servlet交换数据
  4. android中关于调用super的时机
  5. Android 开发之获取手机中所有App
  6. android > 旋转屏幕时 不重加载 activity
  7. Android编译系统详解(三)
  8. Android获取手机存储空间大小
  9. Android build.gradle 中 使用 buildConf
  10. Android 文件IO总结