一、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 生成头文件

MFirstNDK.zip

Android NDK学习记录(一)的更多相关文章

  1. 【Android】学习记录<1> -- 初识ffmpeg

    工作需要用到ffmpeg来进行Android的软编码,对这玩意儿一点都不了解,做个学习记录先. FFmpeg:http://www.ffmpeg.org Fmpeg is the leading mu ...

  2. Android NDK学习(2)Windows下NDK开发环境配置

    转:http://www.cnblogs.com/fww330666557/archive/2012/12/14/2817386.html 一.配置好Android开发环境 二.下载安装安卓NDK   ...

  3. Android NDK 学习之传递类对象

    本博客主要是在Ubuntu 下开发,且默认你已经安装了Eclipse,Android SDK, Android NDK, CDT插件. 在Eclipse中添加配置NDK,路径如下Eclipse-> ...

  4. Android NDK学习总结

    一.android NDK编程步骤 java文件中声明native方法. android工程根目录新建jni文件夹. 调用javah命令为第一步声明的native方法生成相应的.h头文件. 通过win ...

  5. Android NDK学习(一):目录结构解析

    我们配置好NDK环境后,基本可以看到其目录结构如下图: 下面我们来分析一下NDK根目录的结构: ndk-build:该Shell脚本是Android NDK构建系统的起始点,一般在项目中仅仅执行这一个 ...

  6. Android NDK学习(1) 简介

    转:http://www.cnblogs.com/fww330666557/archive/2012/12/14/2817385.html 一.What is the NDK? The Android ...

  7. Android NDK 学习之在C中抛出异常

    本博客主要是在Ubuntu 下开发,且默认你已经安装了Eclipse,Android SDK, Android NDK, CDT插件. 在Eclipse中添加配置NDK,路径如下Eclipse-> ...

  8. Android NDK 学习之调用Java函数

    本博客主要是在Ubuntu 下开发,且默认你已经安装了Eclipse,Android SDK, Android NDK, CDT插件. 在Eclipse中添加配置NDK,路径如下Eclipse-> ...

  9. Android NDK 学习之在C中调用Java的变量和静态变量

    本博客主要是在Ubuntu 下开发,且默认你已经安装了Eclipse,Android SDK, Android NDK, CDT插件. 在Eclipse中添加配置NDK,路径如下Eclipse-> ...

随机推荐

  1. 进入CentOS7紧急模式恢复root密码

    第一步.重启CentOS7,在以下界面选择要编辑的内核(一般第一个),按e进入编辑界面 第二步.在编辑界面找到如下一行,将ro改为rw init=/sysroot/bin/sh.改完后<Ctrl ...

  2. nyoj(表达式求值)

    描述 ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式都能求出它的值的计算器,现在请你帮助他来实现这个计算器吧. 比如输入:"1+2 ...

  3. 【BZOJ 1119】 1119: [POI2009]SLO (置换)

    1119: [POI2009]SLO Description 对于一个1-N的排列(ai),每次你可以交换两个数ax与ay(x<>y),代价为W(ax)+W(ay) 若干次交换的代价为每次 ...

  4. canvas元素内容生成图片

    转自https://segmentfault.com/a/1190000003853394 想要将canvas元素当前显示的内容生成为图像文件,我们首先要获取canvas中的数据,在HTML5 < ...

  5. luogu P1339 [USACO09OCT]热浪Heat Wave

    题目描述 The good folks in Texas are having a heatwave this summer. Their Texas Longhorn cows make for g ...

  6. 【最优比率生成树】poj2728 Desert King

    最优比率生成树教程见http://blog.csdn.net/sdj222555/article/details/7490797 个人觉得很明白易懂,但他写的代码略囧. 模板题,但是必须Prim,不能 ...

  7. 20162318 2016-2017-2《Java程序设计》课堂实践项目

    20162318 2016-2017-2<Java程序设计>课堂实践项目 String类的使用 在String类中有一种split的方法.它可以把字符串分割为好几个小的字符串. 实践内容: ...

  8. 随机数选择器 Exercise07_13

    import java.util.Scanner; /** * @author 冰樱梦 *时间:2018年下半年 *题目:随机数选择器 */ public class Exercise07_13 { ...

  9. ArcGIS Engine10.2与VS2017的环境设置

    首先,在安装ArcGIS Engine 10.2之前,大家应该了解的事是:AE10.2推荐与VS2010或VS2012匹配使用,AE10.3推荐与VS2013匹配使用.除上述的推荐匹配版本之外的方法, ...

  10. Java之——redis并发读写锁,使用Redisson实现分布式锁

    原文:http://blog.csdn.net/l1028386804/article/details/73523810 1. 可重入锁(Reentrant Lock) Redisson的分布式可重入 ...