android eclipse ndk使用记录
为方便开发jni程序,android提供了ndk包来简化开发过程,避免开发人员下载完整的平台代码,并且可以在windows环境下集成到eclipse里面,大大加快了开发速度。这里记录下一个简单例子。
ADT开发环境:adt-bundle-windows-x86-20140702 Version 23.0.2
NDK的开发包:android-ndk-r10d
NDK的eclipse插件:com.android.ide.eclipse.ndk_23.0.2.1259578.jar 保存到eclipse/plugins/目录下面
重新打开eclipse,在Window -> Perferences -> Android下面会出现NDK的选项,在NDK Location里面选择android-ndk-r10d
的路径位置,如:D:\workspace\prebuild\android-ndk-r10d。 Apply之后按OK退出。
准备工作完成之后,开始新建工程。
1. 新建一个android工程,如ndktest,com.example.ndktest
2. 然后右键 -> Android Tools -> Add Native Support,在弹出的对话框里面填入jni共享库的名称,如:libndktest.so,点击确定之后eclipse会自动生成一个jni目录,并在该目录生成一个Android.mk和一个ndktest.cpp文件。
3. 编辑Activity类,添加jni函数的声明,新增加载动态库函数System.loadLibrary和一个JNI函数的声明
private native String printJNI(String inputStr);
public class MainActivity extends Activity {
static {
System.loadLibrary("ndktest");
}
private native String printJNI(String inputStr);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("TAG", printJNI("test"));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
23 }
4. 打开命令行,进入到classes目录:d:\workspace\Android\ndktest\bin\classes
执行javah com.example.ndktest.ManActivity, 之后会自动生成一个符合jni规范的头文件:
com_example_ndktest_MainActivity.h
5. 拷贝com_example_ndktest_MainActivity.h到jni目录下,在ndktest.cpp里面包含该头文件
com_example_ndktest_MainActivity.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_ndktest_MainActivity */ #ifndef _Included_com_example_ndktest_MainActivity
#define _Included_com_example_ndktest_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_example_ndktest_MainActivity
* Method: printJNI
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_ndktest_MainActivity_printJNI
(JNIEnv *, jobject, jstring); #ifdef __cplusplus
}
#endif
#endif
ndktest.cpp
#include <jni.h>
#include <string.h> #include "com_example_ndktest_MainActivity.h" JNIEXPORT jstring JNICALL Java_com_example_ndktest_MainActivity_printJNI
(JNIEnv *env, jobject thiz, jstring str)
{
return env->NewStringUTF("Hello from JNI from bear !");
}
Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := ndktest
LOCAL_SRC_FILES := ndktest.cpp include $(BUILD_SHARED_LIBRARY)
6. 最后clean一下工程,自动编译,eclipse会调用ndk去编译生成最终的动态库文件,如libndktest.so,并自动打包到
apk里面。
7. 安装生成的apk,可以在logcat里面看到来自jni的log内容。观察app的安装目录,可以发现最终生成的so库文件是存放在了
root@degasveltechn:/data/data/com.example.ndktest #ll
drwxrwx--x u0_a146 u0_a146 2015-10-04 20:57 cache
lrwxrwxrwx install install 2015-10-04 20:59 lib -> /data/app-lib/com.example.ndktest-2
库是统一安装到/data/app-lib目录下面的,/data/data/app-name下放的是一个link文件。
android eclipse ndk使用记录的更多相关文章
- Android + Eclipse + NDK + cygwin配制
以前做NDK开发时留下来的笔记,希望对后继开发人员有所帮助,在开放给大家使用,有不对的地方请留,扔砖头都可以的. 为了方便在Win32下开发android C++ 程序,我们作了如下配制:1.Andr ...
- 【Android】Android Studio NDK 开发
Android Studio NDK 开发 记录在Android Studio中NDK简单开发的步骤 用到的Android Studio版本为3.5. 配置NDK 下载NDK 一般在SDK下已经有自带 ...
- 【转】android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)
原文网址:http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.html android 最新 NDK r8 在w ...
- android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)
android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创) 一直想搞NDK开发却一直给其他事情耽搁了,参考了些网上的资料今天终于把 ...
- WINDOWS系统Eclipse+NDK+Android + OpenCv
WINDOWS系统Eclipse+NDK+Android + OpenCv 参考文档博客 1 NDK环境搭建 http://jingyan.baidu.com/article/5d6edee22d90 ...
- Android Studio NDK初探
Android Studio中实现NDK开发较之前Eclipse+Cygwin,方便了很多. 本文以最简单的从C程序中获取字符串,并显示到MainActivity的TextView上为例进行NDK开发 ...
- Android之NDK开发(转)
Android之NDK开发 一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第 ...
- Android中NDK的搭建及简单使用 Android.mk相关介绍 JNI的使用
Android中NDK的搭建及简单使用: 使用NDK,简述其重要步骤:.搭建NDK环境(作用:用于自动生成jni下的.c对应的so文件)---到Android NDK官网或Android官网下载ndk ...
- Android之NDK开发
转自:http://www.cnblogs.com/devinzhang/archive/2012/02/29/2373729.html 一.NDK产生的背景 Android平台从诞生起,就已经支持C ...
随机推荐
- unity3d 角色头顶信息3D&2D遮挡解决方案(一)
先上效果图,只凭文字描述,脑补应该有些困难- - 如图:有三个角色(我们暂且从左到右叫它们A.B.C),一个2D UI(中间动作选择的框框),一个cube(右边的方块) cube挡住了角色C的头顶信息 ...
- 低于0.01%的极致Crash率是怎么做到的?
WeTest 导读 看似系统Bug的Crash 99%都不是系统问题!本文将与你一起探索Crash分析的科学方法. 在移动互联网闯荡多年的iOS手机管家,经过不断迭代创新,已经涵盖了隐私(加密相册). ...
- 「日常训练」All Friends(POJ-2989)
题意 分析 代码 #include <iostream> #include <cstring> #include <algorithm> #define MP ma ...
- 接口测试工具postman(五)批量执行测试用例
1.准备好测试用例及相关数据 2.点击Run按钮 3.选择运行collection或者folder 4.运行完成
- Windowserver2012部署always on
1.首先,安装域环境 IP设置 域服务安装 如果建立域配置时出现 administrator账户密码不符合要求错误: cmd运行命令: net user administrator /password ...
- 韦大仙--python对文件操作 2--写入与修改
请大家看一段代码: yesterday2是我之前上个帖子创建的文件,为了方便大家看清我把本来的代码复制到下面: coding=utf-8 f=open("yesterday2",& ...
- Codeforces Round #495 (Div. 2) Sonya and Matrix
正常没有正方形的限制下,值为i的点个数4i 那么从0开始遍历,第一个不为4i的值就是min(x, y) 由于对称性我们姑且令x为这个值 我们先列举n*m=t的各种情况 对于一对n, m.我们已经知道n ...
- Git命令使用大全
一前言 最近公司在使用vue和WebAPI前后端分离的项目开发,使用的代码管理工具是git,刚开始使用的时候前端的vue文件还比较好处理,但是后端的C#文件在每一次自己编译之后上传都会和其他小伙伴的代 ...
- 谜题 (Puzzle,ACM/ICPC World Finals 1993,UVa227)
题目描述:算法竞赛入门经典习题3-5 题目思路:模拟题 #include <stdio.h> #include <string.h> #define maxn 55 char ...
- Java进阶知识点:协变与逆变
一.背景 要搞懂Java中的协办与逆变,不得不从继承说起,如果没有继承,协变与逆变也天然不存在了. 我们知道,在Java的世界中,存在继承机制.比如MochaCoffee类是Coffee类的派生类,那 ...