NDK(2)使用eclipse + ndk开发过程演示,含CPU架构编译
环境linux + eclipse + adt + ndk
1,在ide中配置ndk
下载ndk,在eclipse中配置
2,使用ndk编程
2.1 给项目添加ndk 支持
右键 项目名 -->Android Tools -->Add Native Support...
生成jni目录,包含xxx.cpp和Android.mk ,xxx.cpp是c/c++源文件
Android.mk 是ndk代码配置文件,包括include,要编译的源文件名等等,如下: 源文件名之间用空格分开
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := NdkSample
LOCAL_SRC_FILES := NativeStudent.cpp NativeTeacher.cpp Animal.cpp include $(BUILD_SHARED_LIBRARY)
2.2 在java工程中添加本地类或函数(用native)
将来它们的实现在jni目录下.
public class NativeStudent {
//ndk编程第2步,在java中声明方法.
public native String getName();
public native static String getCls();
public native int add(int x,int y);
}
2.3 使用Ant 批量创建头文件
javah -jni 也可以生成头文件,但是它是命令,一次只能生成一个,用Ant可以批量生成和指定生成的目录.下面是Ant步骤:
a) 在jni下新建一个ant源文件,它是个xml,如: create_native_headers.xml
b) 在xml中生成模板代码,右健-->Open With ->Ant Editor (没有的话去Other里找),用代码提示功能生成模板代码,Ctrl+Space或Alt+/ 然后选Buildfile template
<?xml version="1.0" encoding="UTF-8"?>
<!-- ======================================================================
Aug 15, 2015 11:03:46 AM NdkSample
description efdfsdf
====================================================================== -->
<project name="NdkSample" default="BuildAll"> <!-- default="BuildAll" 指定要编译的target-->
<description>
description
</description> <!--target 是一个目标单位,一般一个target对应一个java类-->
<target name="BuildAll" description="description">
<!-- antcall target="NativeStudent" 其中antcall是引用其它target -->
<antcall target="NativeStudent"></antcall>
<antcall target="NativeTeacher"></antcall>
</target> <!-- =================================
target: NativeStudent
================================= -->
<target name="NativeStudent" description="description">
<!-- destdir 是生成的xxx.h存放的目录,classpath是java类的class所在的位置,class是java类的包名. -->
<javah destdir="." classpath="../bin/classes" class="com.example.ndksample.NativeStudent"></javah>
</target> <!-- - - - - - - - - - - - - - - - - -
target: NativeTeacher
- - - - - - - - - - - - - - - - - -->
<target name="NativeTeacher" description="description">
<javah destdir="." classpath="../bin/classes" class="com.example.ndksample.NativeTeacher"></javah>
</target> </project>
c) 在ant view 中添加 create_native_headers.xml (下图中 ok 右边 的第一个按钮 Add Buildfiles)

d) 运行ant,双击或点运行按钮 开始build ant 源文件 ,成功后就生成相应的 xxx.h
2.4 在使用ndk代码前要将它们导入到java项目中
public class MainActivity extends Activity {
TextView output;
//ndk编程第4步,load libNdkSample.so 它在Android.mk中指定的
/*
* LOCAL_MODULE := NdkSample
*/
static{
System.loadLibrary("NdkSample");
}
//...
}
2.5 在java中使用那些ndk中的c/c++代码
public class MainActivity extends Activity {
TextView output;
//ndk编程第4步,load libNdkSample.so 它在Android.mk中指定的
/*
* LOCAL_MODULE := NdkSample
*/
static{
System.loadLibrary("NdkSample");
}
public void onClickNativeTeacherSay(View btn){
NativeTeacher t = new NativeTeacher();
output.setText(t.say());
}
public void onClickNativeStudentClassName(View btn){
output.setText(NativeStudent.getCls());
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
output = (TextView) findViewById(R.id.tv_output);
}
}
2.6 面向多种CPU架构编译
在jni目录下新建 Application.mk
APP_ABI := x86 armeabi
x86 和 armeabi 是两种架构,它们之间用空格 ,
all代表所有,学用的有:arm64-v8a ,armeabi,armeabi-v7a,mips,mips64,x86,x86_64
NDK(2)使用eclipse + ndk开发过程演示,含CPU架构编译的更多相关文章
- Eclipse ndk fix插件开发
一. 手工修复ndk环境bug Eclipse做ndk开发的时候, 经常会遇到编译过去,却报语法错误的问题,比如 ①. 头文件不识别 ②. 头文件识别了, 类型不识别 针对这一的bug,我们一般按照如 ...
- NDK学习4: Eclipse HelloWorld
NDK学习4: Eclipse HelloWorld 1.配置Eclipse NDK环境 Window->preferences->android->ndk 2.新建Andro ...
- WINDOWS系统Eclipse+NDK+Android + OpenCv
WINDOWS系统Eclipse+NDK+Android + OpenCv 参考文档博客 1 NDK环境搭建 http://jingyan.baidu.com/article/5d6edee22d90 ...
- 用 eclipse ndk 编译 cocos2d-x for Android
Android 环境搭建不详述,,可以google,,, 我用的coco2dx 是 2.14 ,2.14 用 create_project.py 脚本创建工程,Python环境配置也是很简单,这里了不 ...
- Eclipse NDK 配置,无需安装Cygwin
Eclipse NDK 配置,不用安装Cygwin 文章转自http://www.cnblogs.com/chenjiajin/archive/2012/04/12/2444188.html 一.关于 ...
- 追索权 Eclipse + NDK error: stray '\24' in program
[size=16px][b][color=#FF0000]追索权 Eclipse + NDK error: stray '\24' in program[/color][b][/b][/b][/si ...
- Android + Eclipse + NDK + cygwin配制
以前做NDK开发时留下来的笔记,希望对后继开发人员有所帮助,在开放给大家使用,有不对的地方请留,扔砖头都可以的. 为了方便在Win32下开发android C++ 程序,我们作了如下配制:1.Andr ...
- 两分钟学会Android平台NDK编程(无须Eclipse和cygwin,可使用命令行打包多个so)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wangbin_jxust/article/details/37389383 之前在进行cocos2d ...
- 【NDK开发】使用NDK开发android
今天学习了一下android NDK,所以记录下来.据说NDK从r7开始自带编译器,在windows上无需配置cygwin的环境.现在我使用NDK r10来开发. 上午搭建的NDK并写了一个实例,不过 ...
随机推荐
- 使用Npoi向Excel中插入图片
先把数据库中的数据都导入到Excel表格中,把图片地址的路径全部转成绝对路径. 使用Npoi读取刚导出的Excle表格,把图片那个单元格的图片路径读出来,然后用文件流读取图片,然后通过Npoi把图片放 ...
- 自定义对话框 提示:Unable to add window token null is not for an application
这是因为在new Dialog(context);的时候传入的context是通过getApplicationContext()获得的,这样就会报错. 把context的获得方式改为MainActiv ...
- 3-Highcharts曲线图之显示点值折线图
直接上代码 根据代码注释讲解 <!DOCTYPE> <html lang='en'> <head> <title>3-Highcharts曲线图之显示 ...
- 快速、直接的XSS漏洞检测爬虫 – XSScrapy
XSScrapy是一个快速.直接的XSS漏洞检测爬虫,你只需要一个URL,它便可以帮助你发现XSS跨站脚本漏洞. XSScrapy的XSS漏洞攻击测试向量将会覆盖 Http头中的Referer字段 U ...
- 如何让360、遨游、猎豹等双核浏览器默认以webkit内核渲染网页?
众知目前国内不少浏览器都自称双核,一般是 IE(Trident)+Webkit.因为 webkit 急速的体验和对 HTML5 的支持,有些情况下开发者可能希望用户优先甚至只使用 webkit 内核渲 ...
- Hadoop发行版本介绍
前言 从2011年开始,中国进入大数据风起云涌的时代,以Hadoop为代表的家族软件,占据了大数据处理的广阔地盘.开源界及厂商,所有数据软件,无一不向Hadoop靠拢.Hadoop也从小众的高富帅领域 ...
- 疯狂java讲义——继承
本文章只是记录我在学习疯狂java讲义里面,对之前java知识查缺补漏进行的总结. 方法重写 方法重写要遵循"两同两小一大"规则."两同"即方法名相同.形参列表 ...
- JobClient学习------作业提交与初始化
public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); ...
- Grid分组特性
Ext.onReady(function () { Ext.define('personInfo', { extend: 'Ext. ...
- 解决Notice错误,性能竟然提升了1000多倍!
先说PHP的deprecated错误的性能问题 最近刚刚完成了一个项目,在测试完基本功能后,我们就发布到线上.结果上线不久就发现产生了大量的错误,如下图: 一看都是PHP的Deprecated错误,是 ...