NDK 入门实例

  参考了百度经验里面的部分内容,发现里面还有些细节没有写出来,其中遇到不少问题,所以就在这里写出来和大家分享!

  参考链接   Android NDK入门开发实例

  1、先下载  android-ndk32-r10b-windows-x86 我是32位的机子,将其放在一个没有空格的路径中,因为之后在配置cygwin的时候要求路径不能有空格。

  2、在cygwin官网上下载  cygwin   安装  ,这个网上有教程,注意不要少了make (我在网上看到的一篇教程里面就是少了make)

  安装完后进行测试   :打开cygwin  输入 make -v  gcc -v进行测试,出现下面的内容说明安装成功。

  

  3、配置cygwin

  如果没有配置cygwin的话,在生成so文件的时候会出现  $NDK/ndk-build  :no such file or directory的错误

  在安装目录的home里面找到bash_profile

  在里面加入

NDK=/cygdrive/g/androidconfig/android-ndk32-r10b-windows-x86/android-ndk-r10b export NDK

  这里要注意两点:1、不能使用换行符

          2、路径中不能带有空格,否则在运行cygwin 的时候会提示错误

  配置好后 ,运行cygwin 输出  cd $NDK   会进入安装路径,说明配置成功

  4、编写android程序

  首先新建一个项目,在布局页面添加一个按钮即可,如下图所示,图中有两个控件,一个是textview,另一个是button。

      新建一个类,并写一个native方法,我写的方法是,public native int add(int a, int b);

      实现传入的2个整形数字相加,这里的native方法不需要实现

    打开本次项目的路径,里面有2个类,其中JNITest.java便是有native方法的类,下面需要先把这个java编程成class文件然后再编译成.h头文件

    

  1. 在CMD中依次输入以下代码:

    cd C:\Users\Administrator\workspace\JNITest\src(切换到项目的src目录下)

    javac com\liutaw\jnitest\JNITest.java(编译有native方法的java类)

    javah com.liutaw.jnitest.JNITest(从class生成.h头文件)

  2. 2

    在项目的根目录新建一个jni文件夹,并把刚才javah生成的 com_liutaw_jnitest_JNITest.h文件复制到jni目录下

  3. 3

    打开com_liutaw_jnitest_JNITest.h,把定义的方法都改为实现,并把文件名的后缀名改为.c,注意方法的参数要加上,以下是修改前后的对比图。

    1. 4

      在jni文件夹下新建一个Android.mk文件,输入以下内容,注意更改成你自己的库文件名和原文件名称

      LOCAL_PATH := $(call my-dir)

      include $(CLEAR_VARS)

      LOCAL_MODULE    := hellojni(库文件名)

      LOCAL_SRC_FILES := com_liutaw_jnitest_JNITest.c(原文件名称)

      include $(BUILD_SHARED_LIBRARY)

      2个文件完成之后应该是下面这张图。

      这里还需要新建一个Application.mk,原文中没有提到。

      新建Application.mk。在里面输入

      APP_ABI := all
      APP_PLATFORM := android-9

      这里需要注意的是  假如使用APP_ABI  是x86  那么会出现  is  not a valid ELF Object错误。这里为了方便直接使用all

      APP_ABI

      在默认情况下,NDK会使用‘armeabi‘ ABI 来生成二进制机器码,这是基于ARMv5TE的浮点运算CPU,这可以通过使用此变量来选项不同的ABI(Application Binary Interface).
      例如:支持基于armv7 FPU指令集的设备:

      APP_ABI := armeabi-v7a
      支持IA-32指令集:

      APP_ABI := x86
      同时支持三种:APP_ABI := armeabi armeabi-v7a x86
      从NDK-r7版本后,同时支持三种还可以这样写:APP_ABI := all

      最后打开cygwin切换到项目目录

      最后补上onclick事件   运行OK!

时间: 2024-10-09 21:05:34

NDK 入门实例的相关文章

DWR之入门实例(一)

DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).它的最新版本DWR0.6添加许多特性如:支持Dom Trees的自动配置,支持Spring(JavaScript远程调用spring bean),更好浏览器支持,还支持一个可选的commons-

jni ndk 入门

1. Linux环境模拟,下载sygwin 安装,选择devl 和shell -> install sygwin 中的配置ndk环境,进入安装目录c:/cygwin64 etc/profile文件配置ndk的环境 //37行 PATH="/usr/local/bin:/usr/bin:/cygdrive/d/android-ndk-r9d-windows-x86_64/android-ndk-r9d${PATH:+:${PATH}}" 2. 下载ndk 3. 开发,参考于ndk/

React 入门实例教程

React 入门实例教程 作者: 阮一峰 日期: 2015年3月31日 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用,就在2013年5月开源了. 由于 React 的

Java AIO 入门实例(转)

Java7 AIO入门实例,首先是服务端实现: 服务端代码 SimpleServer: Java代码   public class SimpleServer { public SimpleServer(int port) throws IOException { final AsynchronousServerSocketChannel listener = AsynchronousServerSocketChannel.open().bind(new InetSocketAddress(por

FPGA入门实例一:LFSR

一:任务: 要求使用Verilog语言在Xilinx Virtex-6开发板上实现线性反馈移位寄存器(LFSR)的硬件逻辑设计. 二:前期准备: 基本上完成一个简单的设计需要用到以下几个软件 逻辑:Uedit32(硬件狗吐血推荐) 综合:ISE14.1 仿真:Modelsim SE 10.1b 分析:Chipscope Pro 三:设计流程 逻辑: 首先当然是RTL级设计,俗称硬件逻辑设计.使用的是Uedit32,这个软件相当于一个记事本,但编辑功能十分强大,简直是写Verilog代码的神器,具

php页面get方法实现ajax,入门实例教程

ajax,入门实例教程 本例针对php页面,做了一个小的demo加深对ajax的理解 1.文档结构: 共有ajax.php 和action.php 2个页面. 2.源码如下: /*ajax.php页面*/<!DOCTYPE html> <html lang="en"> <head> <title> ajax</title> <script type="text/javascript"> func

Omnet++ 4.0 入门实例教程

http://blog.sina.com.cn/s/blog_8a2bb17d01018npf.html 在网上找到的一个讲解omnet++的实例, 是4.0下面实现的. 我在4.2上试了试,可以用.照着做就能完成,有些小地方不同而已 Omnet++ 4.0 入门实例教程根据http://omnest.com/webdemo/ide 上的实例,自己动手做了做.新版本的4.0 跟它视频上的版本有些差别,配图说明一下我的操作过程,供大家一起学习.现在开始.首先,开发环境选择simulation 的视

freemarker入门实例与源码研究准备工作

首先去freemarker官网下载源码jar包,本文是基于freemarker-2.3.21.tar.gz进行研究的.解压源码包,找到freemarker的源码部分导入eclipse工程中.需要注意的是:freemarker的ftl文件解析使用javacc实现的,所以源码中没有解析类(FMParse.java).要想研究freemarker源码,往往还需要引入freemarker.jar(含有FMParse.class),否则源码会出现编译问题.另外,还需要引入的jar包有:commons-lo

Android HttpGet() 请求简单入门实例

HttpClient httpclient = new DefaultHttpClient(); String url = "http://example.com"; List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add( new BasicNameValuePair( "param", "value" ) ); URI uri =