环境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架构编译的更多相关文章

  1. Eclipse ndk fix插件开发

    一. 手工修复ndk环境bug Eclipse做ndk开发的时候, 经常会遇到编译过去,却报语法错误的问题,比如 ①. 头文件不识别 ②. 头文件识别了, 类型不识别 针对这一的bug,我们一般按照如 ...

  2. NDK学习4: Eclipse HelloWorld

    NDK学习4: Eclipse HelloWorld 1.配置Eclipse NDK环境  Window->preferences->android->ndk   2.新建Andro ...

  3. WINDOWS系统Eclipse+NDK+Android + OpenCv

    WINDOWS系统Eclipse+NDK+Android + OpenCv 参考文档博客 1 NDK环境搭建 http://jingyan.baidu.com/article/5d6edee22d90 ...

  4. 用 eclipse ndk 编译 cocos2d-x for Android

    Android 环境搭建不详述,,可以google,,, 我用的coco2dx 是 2.14 ,2.14 用 create_project.py 脚本创建工程,Python环境配置也是很简单,这里了不 ...

  5. Eclipse NDK 配置,无需安装Cygwin

    Eclipse NDK 配置,不用安装Cygwin 文章转自http://www.cnblogs.com/chenjiajin/archive/2012/04/12/2444188.html 一.关于 ...

  6. 追索权 Eclipse + NDK error: stray &#39;\24&#39; in program

    [size=16px][b][color=#FF0000]追索权 Eclipse + NDK  error: stray '\24' in program[/color][b][/b][/b][/si ...

  7. Android + Eclipse + NDK + cygwin配制

    以前做NDK开发时留下来的笔记,希望对后继开发人员有所帮助,在开放给大家使用,有不对的地方请留,扔砖头都可以的. 为了方便在Win32下开发android C++ 程序,我们作了如下配制:1.Andr ...

  8. 两分钟学会Android平台NDK编程(无须Eclipse和cygwin,可使用命令行打包多个so)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wangbin_jxust/article/details/37389383 之前在进行cocos2d ...

  9. 【NDK开发】使用NDK开发android

    今天学习了一下android NDK,所以记录下来.据说NDK从r7开始自带编译器,在windows上无需配置cygwin的环境.现在我使用NDK r10来开发. 上午搭建的NDK并写了一个实例,不过 ...

随机推荐

  1. Memcached使用

    一.Memcached简介 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网 ...

  2. 剑指offer--面试题21--相关

    题目:设计包含min函数的栈,pop(),push(),min()的时间复杂度均为O(1) 自己所写代码如下:(写‘栈’的代码还是有些不熟练!) #include <iostream> u ...

  3. Codeforces Round #FF (Div. 2)

    又一场中国场,果然注定被虐的场... A,B:都很水,差不多模拟就好了: C题:CF难得的题意简洁, 我们可以预处理出从左到右递增的数列个数, 举个例子:1 3 2 4 5 7 L[I]       ...

  4. ”sql Server2008 应用程序无法启动,因为应用程序的并行配置不正确。 找不到从属程序集。“C:\windows\SysWOW64\DTSPipelinePerf100.dll”的激活上下文生成失败“的解决方案

    一:控制面板->管理工具->事件查看器->windows日志->应用程序   查看错误原因: 二:在其他机子上拷贝一个DTSWizard.exe.config文件替换本机上已经 ...

  5. Sqli-labs less 19

    Less-19 从源代码中我们可以看到我们获取到的是HTTP_REFERER 那和less18是基本一致的,我们从referer进行修改. 还是像less18一样,我们只给出一个示例 将referer ...

  6. 如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用?(2)

    [编者按]本篇文章作者是 Reinder de Vries,既是一名企业家,也是优秀的程序员,发表多篇应用程序的博客.本篇文章中,作者主要介绍了如何基于 Parse 特点,打造一款类似 Instagr ...

  7. Codeforces 294B Shaass and Bookshelf(记忆化搜索)

    题目 记忆化搜索(深搜+记录状态) 感谢JLGG //记忆话搜索 //一本书2中状态,竖着放或者横着放 //初始先都竖着放,然后从左边往右边扫 #include<stdio.h> #inc ...

  8. HTML5 webSQL

    https://www.ibm.com/developerworks/cn/web/1108_zhaifeng_websqldb/   <!DOCTYPE HTML> <html&g ...

  9. mvc5 @RenderSection("scripts", required: false) 什么意思

    在模板中 相当于占位符 使用方法如下 @section scripts{ //coding }

  10. 未能加载文件或程序集"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad

    问题: 未能加载文件或程序集"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3 ...