之前写了一篇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

1
2
3
4
5
6
7
8
9
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+/生成模板。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?xml version="1.0" encoding="UTF-8"?>
<!-- ====================================================================== 
     2014-6-19 下午2:07:38                                                        
     FirstNDK    
     description
                    
     XMYJ                                                                
     ====================================================================== -->
<project name="FirstNDK" default="BuilderHeaders">
    <description>
            description
    </description>
    <!-- ================================= 
          target: BuilderHeaders              
         ================================= -->
    <target name="BuilderHeaders" depends="BuildNativeHeader"/>
    <!-- - - - - - - - - - - - - - - - - - 
          target: BuildNativeHeader                      
         - - - - - - - - - - - - - - - - - -->
    <target name="BuildNativeHeader">
        <!--
        destdir:输出目标目录
        classpath:类路径
        class:要生成的类
        -->
        <javah destdir="./jni" classpath="bin/classes" class="com.xzw.firstndk.NativeUtils"></javah>
    </target>
</project>

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

如图

打开com_xzw_firstndk_NativeUtils.h可以看到:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* 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头文件

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

1
2
3
4
5
6
7
8
9
10
11
12
#include <jni.h>
#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了,现在来调用咯。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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文件。

1
APP_ABI :=armeabi armeabi-v7a x86

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

本文转自xuzw13 51CTO博客,原文链接:http://blog.51cto.com/xuzhiwei/1428192,如需转载请自行联系原作者

Android之eclipse简单NDK入门相关推荐

  1. 8步教你打开Android之门 NDK入门教程

    这是一篇Android NDK开发的入门教程,在这一教程结束后,你将创建你自己的项目,从Java代码简单地调用原生C语言代码. 本文为一篇外文翻译,我们将介绍如何学习安装 Android NDK 并开 ...

  2. Android SDK+Eclipse+ADT+CDT+NDK 开发环境在windows 7下的搭建

    Android SDK+Eclipse+ADT+CDT+NDK 开发环境在windows 7下的搭建 这几天一直在研究 Android SDK C/C++平台的搭建,尽管以前有成功在Windows X ...

  3. 简单的入门Android开发

    前言 去年年底到今年年初,我做过简单的智能家居,也实现过一些简单的直连和远程的智能家居.于是就将最简单的通信发布出来:智能家居简单实现-使用ESP8266简单实现和APP通讯 由于这方面的资料少之又少 ...

  4. 【Android】Eclipse自动编译NDK/JNI的三种方法

    [Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th  2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...

  5. Android - JNI环境搭建和简单案例入门

    一.简单概念: JNI:Java Native Interface.实现java 与本地语言(android是linex系统开发的,语言是c/c++) 的相互调用. NDK:Native Develo ...

  6. android nfc后台,android NFC开发简单入门

    前言: 说道NFC,是Near Field Communication缩写,就是近距离无线通讯技术.NFC采用主动和被动两种通信模式,工作的模式有三种,读写标签,点对点,仿真卡模式,今天我们只是简单的 ...

  7. 简单的入门Android开发和Java语言基础[图]

    简单的入门Android开发和Java语言基础[图] 前言: 去年年底到今年年初,我做过简单的智能家居,也实现过一些简单的直连和远程的智能家居.于是就将最简单的通信发布出来:智能家居简单实现-使用ES ...

  8. ldflags android,Android 开发手记一 NDK编程实例

    Android开发手记一 ---- NDK编程实例 在Android上,应用程序的开发,大部分基于Java语言来实现.要使用c或是c++的程序或库,就需要使用NDK来实现.NDK是Native Dev ...

  9. JNI/NDK入门指南之jobject和jclass

          JNI/NDK入门指南之jobject和jclass Android JNI/NDK入门指南目录 JNI/NDK入门指南之正确姿势了解JNI和NDK JNI/NDK入门指南之JavaVM和 ...

最新文章

  1. php判断多维数组的技巧
  2. Struts2+Hibernate+Spring 整合示例
  3. ajax大数据导入的一系列问题处理
  4. 人民的名义中,为什么蔡成功的贷款这么难?
  5. Sentinel实现黑白名单控制详细教程来了
  6. C++之类的静态成员变量和静态成员函数
  7. quarz 定时任务 cron表达式
  8. 四则运算系统:分析和设计
  9. 课程设计:混合数据排序
  10. MySQL 多表查询(Day43)
  11. openGauss企业级开源数据库获第十届中国电子信息博览会金奖
  12. excel如何批量查询手机号归属地
  13. Logback设置property参数
  14. 怎么用计算机向手机上传照片,华为手机怎么传照片到电脑上去?华为手机往电脑传照片方法...
  15. 关于HTML预处理器Pug的使用文档
  16. Linux之问题详解(一):Linux怎么创建一个html文件通过CentOS部署html网站到服务器
  17. 开源项目 - 收藏集 - 掘金
  18. 中航一院c语言笔试题目,C笔试题目汇总
  19. dul恢复oracle数据,学习笔记:Oracle dul数据挖掘 使用DUL数据恢复软件恢复分区表中...
  20. 计算机网络--串行传输与并行传输

热门文章

  1. 今日早上出来还是阴天
  2. mysql 控制台环境下查询中文数据乱码,插入、更新中文数据不成功
  3. 关于创建 LINQ to SQL 类时无法转换复数的问题(zhuan)
  4. Table_Vue table 表格中显示内容过长显示省略号_并且显示提示---SpringCloud Alibaba_若依微服务框架改造_前端ElementUI---工作笔记010
  5. 快速开发框架工作笔记001---项目开发中整理_整合好的_springcloud快速开发框架_springcloud框架_springcloud架构
  6. Seata多微服务互相调用_全局分布式事物使用案例_@GlobalTransactional验证---微服务升级_SpringCloud Alibaba工作笔记0065
  7. 深度学习工作笔记002---曼哈顿距离_欧氏距离
  8. Linux学习笔记018---Centos7 下安装JDK1.8
  9. python数据结构剑指offer-重建二叉树
  10. One Millisecond Face alignment with an Ensemble of Regression Trees