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-> ...
随机推荐
- 进入CentOS7紧急模式恢复root密码
第一步.重启CentOS7,在以下界面选择要编辑的内核(一般第一个),按e进入编辑界面 第二步.在编辑界面找到如下一行,将ro改为rw init=/sysroot/bin/sh.改完后<Ctrl ...
- nyoj(表达式求值)
描述 ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式都能求出它的值的计算器,现在请你帮助他来实现这个计算器吧. 比如输入:"1+2 ...
- 【BZOJ 1119】 1119: [POI2009]SLO (置换)
1119: [POI2009]SLO Description 对于一个1-N的排列(ai),每次你可以交换两个数ax与ay(x<>y),代价为W(ax)+W(ay) 若干次交换的代价为每次 ...
- canvas元素内容生成图片
转自https://segmentfault.com/a/1190000003853394 想要将canvas元素当前显示的内容生成为图像文件,我们首先要获取canvas中的数据,在HTML5 < ...
- luogu P1339 [USACO09OCT]热浪Heat Wave
题目描述 The good folks in Texas are having a heatwave this summer. Their Texas Longhorn cows make for g ...
- 【最优比率生成树】poj2728 Desert King
最优比率生成树教程见http://blog.csdn.net/sdj222555/article/details/7490797 个人觉得很明白易懂,但他写的代码略囧. 模板题,但是必须Prim,不能 ...
- 20162318 2016-2017-2《Java程序设计》课堂实践项目
20162318 2016-2017-2<Java程序设计>课堂实践项目 String类的使用 在String类中有一种split的方法.它可以把字符串分割为好几个小的字符串. 实践内容: ...
- 随机数选择器 Exercise07_13
import java.util.Scanner; /** * @author 冰樱梦 *时间:2018年下半年 *题目:随机数选择器 */ public class Exercise07_13 { ...
- ArcGIS Engine10.2与VS2017的环境设置
首先,在安装ArcGIS Engine 10.2之前,大家应该了解的事是:AE10.2推荐与VS2010或VS2012匹配使用,AE10.3推荐与VS2013匹配使用.除上述的推荐匹配版本之外的方法, ...
- Java之——redis并发读写锁,使用Redisson实现分布式锁
原文:http://blog.csdn.net/l1028386804/article/details/73523810 1. 可重入锁(Reentrant Lock) Redisson的分布式可重入 ...