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 ...
随机推荐
- 接口测试工具postman(八)上传文件接口
涉及到选择文件的接口,在[Body]页签下,key选择File选项,会显示“选择文件”按钮,选择本地的文件
- python 终级篇 django ---ORM操作
一般操作 必会的 ...
- dotnetframe的清理工具
微软的产品一向不敢恭维,卸载都没有办法卸载干净,卸载又慢又不彻底,dotnet被我卸载之后还有注册表残留以至于无法重新安装. .NET Framework Cleanup Tool真的很好用,全部版本 ...
- leetcode个人题解——#19 Remove Nth Node From End of List
思路:设置两个指针,其中第二个指针比第一个延迟n个元素,这样,当第二个指针遍历到指针尾部时,对第一个指针进行删除操作. 当然,这题要注意一些边界值,比如输入[1,2] n=2时如果按照思路走会指向未分 ...
- ARM架构中的程序执行与调用
ARM架构中的程序执行与调用 1. 几个名词 ABI : 可执行文件必须遵守的规范,以在特定执行环境中运行: 单独产生的可重定址的文件必须遵守的规范,以用来链接和执行. EABI: 适用于嵌入式环境的 ...
- Python3 小工具-ARP欺骗
在kali中使用 from scapy.all import * import optparse import os def send(pkt,interface): for p in pkt: se ...
- POJ 2449 Remmarguts' Date(第k短路のA*算法)
Description "Good man never makes girls wait or breaks an appointment!" said the mandarin ...
- SDUST OJ 时间类的加、减法赋值运算
Problem F: 时间类的加.减法赋值运算 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 3801 Solved: 2210[Submit][St ...
- 从电梯问题,看c和c++之间的区别(有点懂了)错觉错觉
磕磕碰碰的也相继用c和c++构造了不少的电梯了.虽然对自我的表现不满意,但是总体来说还是有一定的收获的,对于c和c++之间的区别感觉也摸到了一点点门道了... 用c语言构造电梯的步骤: 第一步: 分析 ...
- Alpha 冲刺报告(3/10)
Alpha 冲刺报告 队名:洛基小队 峻雄(组长) 已完成:开始编写角色的移动脚本 明日计划:继续学习并进行脚本编写 剩余任务:物品背包交互代码 困难:如何把各个模块的脚本整合起来 --------- ...