http://blog.csdn.net/codezjx/article/details/8879670

1.添加ndk环境支持

Android Tools -> Add Native Support...

2.需要手动添加include头目录,否则jni.h不被识别

项目Properties -> C/C++ General -> Path and Symbols
include标签c,cpp,点Add添加头文件路径,FileSystem浏览自己NDK的头文件路径,比如我的:

E:/Documents/Android/sdk/ndk-bundle/platforms/android-/arch-arm/usr/include

3.需要手动生成.h文件:

cmd(powershell报错)下

E:\Documents\workspace\TestNDKPlugin>javah -classpath E:\Documents\Android\sdk\platforms\android-\android.jar;./bin/classes com.my.testndkplugin.MainActivity (要包含android环境类,否则类找不到)

powershell下:

E:\Documents\workspace\TestNDKPlugin> javah -classpath bin/classes -bootclasspath E:\Documents\Android\sdk\platforms\android-\android.jar com.my.testndkplugin.MainActivity

并且这种方式生成的头文件有很多其他undef信息,如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_my_testndkplugin_MainActivity */ #ifndef _Included_com_my_testndkplugin_MainActivity
#define _Included_com_my_testndkplugin_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
#undef com_my_testndkplugin_MainActivity_BIND_ABOVE_CLIENT
#define com_my_testndkplugin_MainActivity_BIND_ABOVE_CLIENT 8L
#undef com_my_testndkplugin_MainActivity_BIND_ADJUST_WITH_ACTIVITY
#define com_my_testndkplugin_MainActivity_BIND_ADJUST_WITH_ACTIVITY 128L
#undef com_my_testndkplugin_MainActivity_BIND_ALLOW_OOM_MANAGEMENT
#define com_my_testndkplugin_MainActivity_BIND_ALLOW_OOM_MANAGEMENT 16L
#undef com_my_testndkplugin_MainActivity_BIND_AUTO_CREATE
#define com_my_testndkplugin_MainActivity_BIND_AUTO_CREATE 1L
#undef com_my_testndkplugin_MainActivity_BIND_DEBUG_UNBIND
#define com_my_testndkplugin_MainActivity_BIND_DEBUG_UNBIND 2L
#undef com_my_testndkplugin_MainActivity_BIND_EXTERNAL_SERVICE
#define com_my_testndkplugin_MainActivity_BIND_EXTERNAL_SERVICE -2147483648L
#undef com_my_testndkplugin_MainActivity_BIND_IMPORTANT
#define com_my_testndkplugin_MainActivity_BIND_IMPORTANT 64L
#undef com_my_testndkplugin_MainActivity_BIND_NOT_FOREGROUND
#define com_my_testndkplugin_MainActivity_BIND_NOT_FOREGROUND 4L
#undef com_my_testndkplugin_MainActivity_BIND_WAIVE_PRIORITY
#define com_my_testndkplugin_MainActivity_BIND_WAIVE_PRIORITY 32L
#undef com_my_testndkplugin_MainActivity_CONTEXT_IGNORE_SECURITY
#define com_my_testndkplugin_MainActivity_CONTEXT_IGNORE_SECURITY 2L
#undef com_my_testndkplugin_MainActivity_CONTEXT_INCLUDE_CODE
#define com_my_testndkplugin_MainActivity_CONTEXT_INCLUDE_CODE 1L
#undef com_my_testndkplugin_MainActivity_CONTEXT_RESTRICTED
#define com_my_testndkplugin_MainActivity_CONTEXT_RESTRICTED 4L
#undef com_my_testndkplugin_MainActivity_MODE_APPEND
#define com_my_testndkplugin_MainActivity_MODE_APPEND 32768L
#undef com_my_testndkplugin_MainActivity_MODE_ENABLE_WRITE_AHEAD_LOGGING
#define com_my_testndkplugin_MainActivity_MODE_ENABLE_WRITE_AHEAD_LOGGING 8L
#undef com_my_testndkplugin_MainActivity_MODE_MULTI_PROCESS
#define com_my_testndkplugin_MainActivity_MODE_MULTI_PROCESS 4L
#undef com_my_testndkplugin_MainActivity_MODE_NO_LOCALIZED_COLLATORS
#define com_my_testndkplugin_MainActivity_MODE_NO_LOCALIZED_COLLATORS 16L
#undef com_my_testndkplugin_MainActivity_MODE_PRIVATE
#define com_my_testndkplugin_MainActivity_MODE_PRIVATE 0L
#undef com_my_testndkplugin_MainActivity_MODE_WORLD_READABLE
#define com_my_testndkplugin_MainActivity_MODE_WORLD_READABLE 1L
#undef com_my_testndkplugin_MainActivity_MODE_WORLD_WRITEABLE
#define com_my_testndkplugin_MainActivity_MODE_WORLD_WRITEABLE 2L
#undef com_my_testndkplugin_MainActivity_DEFAULT_KEYS_DIALER
#define com_my_testndkplugin_MainActivity_DEFAULT_KEYS_DIALER 1L
#undef com_my_testndkplugin_MainActivity_DEFAULT_KEYS_DISABLE
#define com_my_testndkplugin_MainActivity_DEFAULT_KEYS_DISABLE 0L
#undef com_my_testndkplugin_MainActivity_DEFAULT_KEYS_SEARCH_GLOBAL
#define com_my_testndkplugin_MainActivity_DEFAULT_KEYS_SEARCH_GLOBAL 4L
#undef com_my_testndkplugin_MainActivity_DEFAULT_KEYS_SEARCH_LOCAL
#define com_my_testndkplugin_MainActivity_DEFAULT_KEYS_SEARCH_LOCAL 3L
#undef com_my_testndkplugin_MainActivity_DEFAULT_KEYS_SHORTCUT
#define com_my_testndkplugin_MainActivity_DEFAULT_KEYS_SHORTCUT 2L
#undef com_my_testndkplugin_MainActivity_RESULT_CANCELED
#define com_my_testndkplugin_MainActivity_RESULT_CANCELED 0L
#undef com_my_testndkplugin_MainActivity_RESULT_FIRST_USER
#define com_my_testndkplugin_MainActivity_RESULT_FIRST_USER 1L
#undef com_my_testndkplugin_MainActivity_RESULT_OK
#define com_my_testndkplugin_MainActivity_RESULT_OK -1L
/*
* Class: com_my_testndkplugin_MainActivity
* Method: StringFromJni
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_my_testndkplugin_MainActivity_StringFromJni
(JNIEnv *, jobject); #ifdef __cplusplus
}
#endif
#endif

4.编辑C文件,编译ok

此时的编译命令为:

若要ndk编译生成gdb.setup和gdbserver
编译的时候,在$ndk-build指令后面加多一行 NDK_DEBUG=1,即$ndk-build NDK_DEBUG=1,则最后在libs目录下可以看到gdb.setup和gdbserver。

结果如下图:

=======================手动构建ndk工程======================

1.手动生成.h文件

2.手动创建jni目录,Android.mk、Application.mk、c文件

3.手动配置ndkBuilder

4.编译

NDK plugin来构建JNI项目(相对于手动构建)的更多相关文章

  1. [ci]jenkins构建容器项目java-helloworld-非docker plugin模式

    栗子思路说明: 不使用任何docker plugin 使用jenkins server本地(含mvn环境)构建,无jenkins slave jenkins server本地构建的war包,推送dep ...

  2. 使用Gradle构建Android项目

    阅读目录 Gradle是什么? 环境需求 Gradle基本结构 任务task的执行 基本的构建定制 目录配置 签名配置 代码混淆设置 依赖配置 输出不同配置的应用 生成多个渠道包(以Umeng为例) ...

  3. Jenkins中构建Testcomplete项目的方法介绍

    Jenkins的部署在上一篇随笔中已经和大家介绍了,下面我们介绍一下再Jenkins中构建testcomplete项目.我这里使用的是Testcomplete11,下面详细介绍一下构建步骤. 1.Je ...

  4. 【转】使用Eclipse构建Maven项目 (step-by-step)

    安装eclipse 及配置maven时,参考的资料!!! from:http://blog.csdn.net/qjyong/article/details/9098213 Maven这个个项目管理和构 ...

  5. 使用Maven构建Android项目

    http://www.ikoding.com/build-android-project-with-maven/ 之前一直在做WEB前端项目,前段时间接手第一个Android项目,拿到代码之后,先试着 ...

  6. 使用Eclipse构建Maven项目 (step-by-step)

    Maven这个个项目管理和构建自动化工具,越来越多的开发人员使用它来管理项目中的jar包.本文仅对Eclipse中如何安装.配置和使用Maven进行了介绍.完全step by step. 如果觉得本文 ...

  7. Gradle用户指南(3)-构建Java项目

    1.构建基本的Java项目 为了使用 Java 插件,添加下面代码到构建文件: build.gradle apply plugin: 'java' 这个就是 定义一个 Java 项目的全部.它会将 J ...

  8. 使用Eclipse构建Maven项目 (转)

    Maven这个个项目管理和构建自动化工具,越来越多的开发人员使用它来管理项目中的jar包.本文仅对Eclipse中如何安装.配置和使用Maven进行了介绍.完全step by step. 如果觉得本文 ...

  9. 构建maven项目3

    1.1.创建Jave Project 1.使用mvn archetype:generate命令,如下所示: mvn archetype:generate -DgroupId=com.mycompany ...

随机推荐

  1. 第五模块·WEB开发基础-第2章JavaScript基础

    第1章 JavaScript基础 01-JavaScript历史介绍 02-JavaScript的组成 03-JavaScript的引入方式 04-变量的使用 05-基本数据类型(一) 06-基本数据 ...

  2. 初学Direct X(6)

    初学Direct X(6) 这一文本应和上一篇放在一起的,但是上一章写着写着发现对Draw绘制透明位图的方式有感觉了,决定就单写一篇,留作笔记了. 那这一篇是记录如何使用位图表来绘制动画帧,想象一下, ...

  3. ActiveMQ服务器之间传输对象,项目A发送对象到项目B接收发送对象《二》

    ActiveMQ服务器之间传输对象,项目A发送对象到项目B接收发送对象<一> 上一篇文章写到对象之间传输使用线程方式 ,无法使用监听方式,最近解决了使用监听方式接收对象,本次使用配置文件方 ...

  4. 某即时通信工具与RMS结合

    某客户内部使用及时通信工具与RMS相结合,如果客户使用了海外版Office 365E3可以直接在手机端使用Office app打开. 如果客户没有使用海外版Office 365E3的版本,需要结合本地 ...

  5. LeeCode第一次刷题(两数相加)

    题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组 ...

  6. NSValue的valueWithBytes:objCType:方法

    + (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type; NSValue的valueWithBytes: ...

  7. Pipeline组项目Postmortem

    Pipeline组项目Postmortem 1.     设想和目标 1)目标我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的项目是学霸系统PipeLine, ...

  8. Hadoop 版本 生态圈 MapReduce模型

    忘的差不多了, 先补概念, 然后开始搭建集群实战 ... . 一 Hadoop版本 和 生态圈 1. Hadoop版本 (1) Apache Hadoop版本介绍 Apache的开源项目开发流程 : ...

  9. oracle数据库之存储函数和过程

    一.引言     ORACLE 提供可以把 PL/SQL 程序存储在数据库中,并可以在任何地方来运行它.这样就叫存储过程或函数.过程和函数统称为 PL/SQL 子程序,他们是被命名的 PL/SQL 块 ...

  10. Python基础1 Hello World!

    从今天开始和大家分享一下python最基础的知识,以便帮助初学者快速入门. 最最基础的当然是hello world 了,无论哪门语言都会从它开始... 简单的‘Hello World!’ 1. 直接运 ...