NDK plugin来构建JNI项目(相对于手动构建)
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项目(相对于手动构建)的更多相关文章
- [ci]jenkins构建容器项目java-helloworld-非docker plugin模式
栗子思路说明: 不使用任何docker plugin 使用jenkins server本地(含mvn环境)构建,无jenkins slave jenkins server本地构建的war包,推送dep ...
- 使用Gradle构建Android项目
阅读目录 Gradle是什么? 环境需求 Gradle基本结构 任务task的执行 基本的构建定制 目录配置 签名配置 代码混淆设置 依赖配置 输出不同配置的应用 生成多个渠道包(以Umeng为例) ...
- Jenkins中构建Testcomplete项目的方法介绍
Jenkins的部署在上一篇随笔中已经和大家介绍了,下面我们介绍一下再Jenkins中构建testcomplete项目.我这里使用的是Testcomplete11,下面详细介绍一下构建步骤. 1.Je ...
- 【转】使用Eclipse构建Maven项目 (step-by-step)
安装eclipse 及配置maven时,参考的资料!!! from:http://blog.csdn.net/qjyong/article/details/9098213 Maven这个个项目管理和构 ...
- 使用Maven构建Android项目
http://www.ikoding.com/build-android-project-with-maven/ 之前一直在做WEB前端项目,前段时间接手第一个Android项目,拿到代码之后,先试着 ...
- 使用Eclipse构建Maven项目 (step-by-step)
Maven这个个项目管理和构建自动化工具,越来越多的开发人员使用它来管理项目中的jar包.本文仅对Eclipse中如何安装.配置和使用Maven进行了介绍.完全step by step. 如果觉得本文 ...
- Gradle用户指南(3)-构建Java项目
1.构建基本的Java项目 为了使用 Java 插件,添加下面代码到构建文件: build.gradle apply plugin: 'java' 这个就是 定义一个 Java 项目的全部.它会将 J ...
- 使用Eclipse构建Maven项目 (转)
Maven这个个项目管理和构建自动化工具,越来越多的开发人员使用它来管理项目中的jar包.本文仅对Eclipse中如何安装.配置和使用Maven进行了介绍.完全step by step. 如果觉得本文 ...
- 构建maven项目3
1.1.创建Jave Project 1.使用mvn archetype:generate命令,如下所示: mvn archetype:generate -DgroupId=com.mycompany ...
随机推荐
- Qt 计算两个日前间隔天数
某一个大神写的 改写了一点 请无视注释 //时间计算法则 /********************************************************************** ...
- Linux命令应用大词典-第31章 设备管理
31.1 udevadm info:查询udev数据库中的设备信息 31.2 mkdnod:创建块设备和字符设备文件 31.3 MAKEDEV:创建/dev中的设备 31.4 lsblk:列出块设备信 ...
- Spring 配置请求过滤器,编码格式设为UTF-8,避免中文乱码
<!-- 配置请求过滤器,编码格式设为UTF-8,避免中文乱码--> <filter> <filter-name>springUtf8Encoding</fi ...
- [Clr via C#读书笔记]Cp9参数
Cp9参数 可选参数和命名参数 参数设置了默认值(设置要从右到左,有默认值的参数必须放在没有默认值的参数的后面,默认值必须是常量),就可以使用可选参数和命名参数了.向方法传递实参的时候,编译器按照从左 ...
- Pandas基础教程
pandas教程 更多地可以 参考教程 安装 pip install pandas pandas的类excel操作,超级方便: import pandas as pd dates = pd.date_ ...
- lsscsi命令详解
基础命令学习目录首页 lsscsi包默认是不安装的.lsscsi包安装完之后,lsscsi命令就可以使用了.lsscsi命令(lsscsi -t -L)能很方便的看出哪些是固态硬盘(SSD),哪些是S ...
- 官方文档 恢复备份指南三 Recovery Manager Architecture
本节讨论以下问题: About the RMAN Environment 关于RMAN环境 RMAN Command-Line Client ...
- javaIO--字节流
流---是指的一组有序的.有气垫和重点的字节集合,是对的护具传输的总称或者抽象. 流采用缓冲区技术,当写一个数据时,系统将数据发送到缓冲区而不是外部设备(如硬盘),当读一个数据时,系统实际是从缓冲区读 ...
- Java之comparable接口
comparable 接口: 1. 问题:java.util.Collections 类中的方法 Collections.sort(List list) 是根据什么确定容器中对象的“大小”顺序的? 2 ...
- TCP系列27—窗口管理&流控—1、概述
在前面的内容中我们依次介绍了TCP的连接建立和终止过程和TCP的各种重传方式.接着我们在这部分首先关注交互式应用TCP连接相关内容如延迟ACK.Nagle算法.Cork算法等,接着我们引入流控机制(f ...