Android之eclipse简单NDK入门

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

站在用户的角度思考问题,与客户深入沟通,找到丰宁网站设计与丰宁网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、成都网站建设、企业官网、英文网站、手机端网站、网站推广、域名注册、网络空间、企业邮箱。业务覆盖丰宁地区。

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

 1、首先现在Android的SDK和NDK

Android之eclipse简单NDK入门

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

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

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

Android之eclipse简单NDK入门

4、创建项目

Android之eclipse简单NDK入门

5、创建完成后,右击项目Android Tools->Add Native Support就可以了。Android之eclipse简单NDK入门

Android之eclipse简单NDK入门

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

Android之eclipse简单NDK入门

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+/生成模板。




    
            description
    

    
    

    
    
        
        
    

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

如图

Android之eclipse简单NDK入门

打开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 __cplusplus
extern "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头文件

Android之eclipse简单NDK入门

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目录下看到这几个架构的文件夹了。搞定手工了。


分享文章:Android之eclipse简单NDK入门
当前链接:http://scyanting.com/article/pegsed.html