Android NDK学习记录(一)
一、NDK环境在Mac中部署
1.准备eclipse,android sdk安装包,android ndk安装包(http://dl.google.com/android/ndk/android-ndk64-r10-darwin-x86_64.tar.bz2)
2.部署android开发环境
3.部署NDK开发环境(配置环境变量)
二、编写基于NDK的HelloWorld
1.它的作用即是把实现了我们在Java code中声明的native方法的那个libraryload进来,或者load其他什么动态连接库。
static {
System.loadLibrary("MFirstNDK");
}
2.native关键标识的方法,不需要方法体的抽象方法,是由C/C++来实现的
public static native String getStr();
3.MFirstNDK.cpp 文件 用于返回java 本地方法getStr返回的操作实现
#include "jni.h"
#include "com_threew_ndk_NDKPlus.h"
/*
* Class: com_threew_ndk_NDKPlus
* Method: getStr
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_threew_ndk_NDKPlus_getStr
(JNIEnv *env, jclass thiz) {
return env->NewStringUTF("hello world JNI");
}
4.编写好以上文件代码,就可以在Android Activity里面调用本地方法getStr(),并获取"hello world JNI"
三、利用Ant工具快速生成java本地方法的.h的头文件
eclipse中带有ant插件,可以见在项目下编写ant xml文件,并添加入ant工作目录中,双击或run as 就可以直接在jni文件夹下生成想要的头文件。xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- ======================================================================
2014-9-20 上午11:27:05 MFirstNDK
description Rubert
====================================================================== -->
<project name="MFirstNDK" default="BuildAllHeaders">
<description>
description
</description> <!-- =================================
target: default
================================= -->
<target name="BuildAllHeaders">
<antcall target="BuildGetStringHeader"></antcall>
<antcall target="BuildGetIntHeader"></antcall>
</target> <!-- - - - - - - - - - - - - - - - - -
target: depends
- - - - - - - - - - - - - - - - - -->
<target name="BuildGetStringHeader">
<javah destdir="./jni" classpath="./bin/classes/" class="com.threew.ndk.NDKInt"></javah>
</target> <!-- =================================
target: name
================================= -->
<target name="BuildGetIntHeader" >
<javah destdir="./jni" classpath="./bin/classes/" class="com.threew.ndk.NDKPlus"></javah>
</target> </project>
四.新建c++ class 文件,并用java本地文件调用
1.在jni文件夹下创建Hello的c++文件,会生成Hello.h 和 Hello.cpp文件
2.在Hello.h文件内添加一个方法,内容如下:
/*
* Hello.h
*
* Created on: 2014-9-20
* Author: Rubert
*/ #ifndef HELLO_H_
#define HELLO_H_ class Hello {
public:
Hello();
char * getWords();
virtual ~Hello();
}; #endif /* HELLO_H_ */
3.在Hello.cpp文件的实现方法如下:
/*
* Hello.cpp
* Created on: 2014-9-20
* Author: Rubert
*/
#include "Hello.h"
Hello::Hello(){
// TODO Auto-generated constructor
}
char* Hello::getWords(){
return "hello";
}
Hello::~Hello(){
// TODO Auto-generated constructor
4.在MFirstNDK.cpp中的实现如下:
JNIEXPORT jstring JNICALL Java_com_threew_ndk_NDKPlus_getWords(JNIEnv *env, jclass){
Hello h;
return env->NewStringUTF((const char*)h.getWords());
}
5.遇到的问题
在编译工程中出现,4中得Hello 文件无法找到,前提是我头文件导入了,但是还是无法通过运行。最后发现是Eclipse错误提示的原因:最后是把一些提示都取消掉了
http://www.oschina.net/question/1987532_162259?sort=time
中间发现可能是这个问题,但是导入后依旧如此
http://blog.csdn.net/meegomeego/article/details/8109604
五、基于X86模拟器和Arm模拟
genymotion模拟器 基于X86架构
Android自带模拟器 基于Arm架构
一般情况下,NDK是生成Arm的so文件,如果想改成X86的so文件。那么就得在工程目录下,新建一个Application.mk文件,内容如下:
APP_ABI := x86
如果两者都可以生成,则这么些
APP_ABI := x86 armeabi
六、附
Terminal相关记录,mac下得终端命令
1.乱码问题,打开终端,偏好-设置-高级-中文
2.通过cd命令进入文件夹,用open ./ 来打开当前文件夹
3.javah -jni com.xx.xx.xx.Xxx 生成头文件
Android NDK学习记录(一)的更多相关文章
- 【Android】学习记录<1> -- 初识ffmpeg
工作需要用到ffmpeg来进行Android的软编码,对这玩意儿一点都不了解,做个学习记录先. FFmpeg:http://www.ffmpeg.org Fmpeg is the leading mu ...
- Android NDK学习(2)Windows下NDK开发环境配置
转:http://www.cnblogs.com/fww330666557/archive/2012/12/14/2817386.html 一.配置好Android开发环境 二.下载安装安卓NDK ...
- Android NDK 学习之传递类对象
本博客主要是在Ubuntu 下开发,且默认你已经安装了Eclipse,Android SDK, Android NDK, CDT插件. 在Eclipse中添加配置NDK,路径如下Eclipse-> ...
- Android NDK学习总结
一.android NDK编程步骤 java文件中声明native方法. android工程根目录新建jni文件夹. 调用javah命令为第一步声明的native方法生成相应的.h头文件. 通过win ...
- Android NDK学习(一):目录结构解析
我们配置好NDK环境后,基本可以看到其目录结构如下图: 下面我们来分析一下NDK根目录的结构: ndk-build:该Shell脚本是Android NDK构建系统的起始点,一般在项目中仅仅执行这一个 ...
- Android NDK学习(1) 简介
转:http://www.cnblogs.com/fww330666557/archive/2012/12/14/2817385.html 一.What is the NDK? The Android ...
- Android NDK 学习之在C中抛出异常
本博客主要是在Ubuntu 下开发,且默认你已经安装了Eclipse,Android SDK, Android NDK, CDT插件. 在Eclipse中添加配置NDK,路径如下Eclipse-> ...
- Android NDK 学习之调用Java函数
本博客主要是在Ubuntu 下开发,且默认你已经安装了Eclipse,Android SDK, Android NDK, CDT插件. 在Eclipse中添加配置NDK,路径如下Eclipse-> ...
- Android NDK 学习之在C中调用Java的变量和静态变量
本博客主要是在Ubuntu 下开发,且默认你已经安装了Eclipse,Android SDK, Android NDK, CDT插件. 在Eclipse中添加配置NDK,路径如下Eclipse-> ...
随机推荐
- Python使用boto3操作AWS S3中踩过的坑
最近在AWS上开发部署应用. 看了这篇关于AWS中国区填坑的文章,结合自己使用AWS的经历,补充两个我自己填的坑. http://www.jianshu.com/p/0d0fd39a40c9?utm_ ...
- luogu P3375 【模板】KMP字符串匹配
题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.如果你不知道这是什么意思也不要问,去百度搜[ ...
- POJ 2404 Jogging Trails(最小权完美匹配)
[题目链接] http://poj.org/problem?id=2404 [题目大意] 给出一张图,求走遍所有的路径至少一次,并且回到出发点所需要走的最短路程 [题解] 如果图中所有点为偶点,那么一 ...
- 【区间dp】【记忆化搜索】UVALive - 3516 - Exploring Pyramids
f(i,j)=sum(f(i+1,k-1)*f(k,j) | i+2<=k<=j,Si=Sk=Sj). f(i+1,k-1)是划分出第一颗子树,f(k,j)是划分出剩下的子树. #incl ...
- 20162327实验一Java开发环境的熟悉实验报告
20162327 <程序设计与数据结构>第一次实验报告 基础知识 1.JDB的使用 使用JDB调试程序需要以下五个步骤: 1.设置断点 stop in 2.run 3.print 4.ne ...
- [转]基于全注解的Spring3.1 mvc、myBatis3.1、Mysql的轻量级项目
摘要 对于现在主流的j2ee企业级开发而言,ssh(struts+hibernate+spring)依然是一个事实的标准.由struts充当的mvc调度控制:hibernate的orm持久化映射:sp ...
- Codeforces Beta Round #2 C. Commentator problem 模拟退火
C. Commentator problem 题目连接: http://www.codeforces.com/contest/2/problem/C Description The Olympic G ...
- Educational Codeforces Round 8 D. Magic Numbers 数位DP
D. Magic Numbers 题目连接: http://www.codeforces.com/contest/628/problem/D Description Consider the deci ...
- iOS UIPrintInteractionController打印
- (void)printData{ //为打印做准备,创建一个指向sharedPrintController的引用 UIPrintInteractionController *printer = [ ...
- NHibernate官方文档中文版--拦截器和事件(Interceptors and events)
对于应用程序来说,能够对NHibernate内部发生的事件做出响应式很有用的.这能够有助于实现一些类的功能或者扩展NHibernate的功能. 拦截器 IInterceptor接口提供了应用程序ses ...