目标:

利用NDK生成SO库,使用SO库进行JNI调用,在Android sdcard创建文件并写入数据。

工具:

NDK1.5 R1, android SDK1.5 R1, SDCARD, Eclipse , ADT 0.9, Eclipse Galileo for C/C++, Cygwin 1.5。

工具比较多,我是在Windows XP进行操作的,如果在Ubuntu或者其他的Linux系统下进行操作直接进入步骤2即可。请看步骤:

1. 安装Cygwin

关于Cygwin的安装请自行百度或者google,因为网速原因,建议大家使用本地安装包进行下载:http://www.gougou.com/search?search=cygwin&id=2 下载一个38.2M 即可,我用的就是这个版本。

2. 安装NDK

进入正题安装NDK,首先打开cygwin,然后使用cd命令进入你的NDK根目录,(不会用linux命令??Google去),然后运行:build/host-setup.sh

如果出现以上的信息,说明安装正确,如果出现GCC为找到,请输入gcc命令查看,如果出现toolchain未找到的信息,请试着修改build/host-setup.sh文件第一行代码,将:#!/bin/sh 改成#!/bin/bash, 在Ubuntu上这个是需要修改的

安装成后,我们使用make命令试试编译自带的程序,输入make APP=hello-jni,hello-jni为apps下hello-jni文件夹的名称,这个命令会先找到apps\hello-jni下地Application.mk文件,然后找到source\samples\hello-jni这个目录,然后找到Android.mk这个文件中的配置信息进行编译。看图:

因为我的已经编译过了,使用 make APP=hello-jni -B进行重新编译

出现上面的信息,说明编译成功,so文件在apps/hello-jni/project/libs/armeabi文件夹下。

3. 书写java native接口

下面我们进入实战的阶段,写代码。

建立一个android1.5的项目,NDK不支持1.5以下的版本

JNI.java的代码:

JniTest.java的代码:

4. 生成JNI 头文件

下面生成JNI头文件啦,使用javah命令,对JNI..java这个文件生成,别搞错啦!

使用cmd进入android项目的bin目录中,然后执行 javah -classpath .  -jni cc.androidos.jni.JNI这个命令。别忘记包名!(^_^)

生成了一个cc_androidos_jni_JNI.h

打开看看:

里面都是c语言的头文件声明

5. 书写C代码,写入数据

下面进行c语言代码的阶段,不会C的,可以去学习一下。

我这里使用eclipse for c/c++的进行开发,简单的代码大家可以使用记事本。

工程如下:

cc_androidos_jni_JNI.h内容不变

cc_androidos_jni_JNI.c的内容:

在这里的代码会在运行的时候向sdcard写入androidos.cc.txt文件。然后写入aaaa数据。

6. 编译SO文件

进行编译so文件:

在NDK的apps目录下面创建一个myjni文件夹,在myjni文件夹中创建一个Application.mk文件,文件的内容为:

在NDKsources目录下创建myjni文件夹,在myjni文件中创建一个Android.mk文件,然后将cc_androidos_jni_JNI.h和cc_androidos_jni_JNI.c文件copy进来:

Android.mk中的内容如下:

里面内容的关键字含义请自行查看docs\OVERVIEW.TXT文件

编译:

7. 加入到Android项目中进行运行

将apps\myjni\libs整个文件夹copy到android项目下:

运行android项目使用adb shell进行查看:

进入sdcard查看数据。

注意:sdcard具有system的权限,如果你的目录是root权限的,那么是不能写成功的,除非是真机越权,模拟器是不成功的,并且在Eclipse logcat下会有DEBUG信息出现。

史上最强NDK入门项目实战的更多相关文章

  1. 史上最强Java NIO入门:担心从入门到放弃的,请读这篇!

    本文原题“<NIO 入门>,作者为“Gregory M. Travis”,他是<JDK 1.4 Tutorial>等书籍的作者. 1.引言 Java NIO是Java 1.4版 ...

  2. 一文深入了解史上最强的Java堆内缓存框架Caffeine

    它提供了一个近乎最佳的命中率.从性能上秒杀其他一堆进程内缓存框架,Spring5更是为了它放弃了使用多年的GuavaCache 缓存,在我们的日常开发中用的非常多,是我们应对各种性能问题支持高并发的一 ...

  3. Java算法面试题(史上最强、持续更新、吐血推荐)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  4. 史上最强maven配置详情

    史上最强maven配置详情 优点 对第三方依赖库进行了统一的版本管理 统一了构建过程 统一了项目的目录结构 构建 清理 : mvn clear 编译 : mvn compile 测试 : mvn te ...

  5. JVM面试题(史上最强、持续更新、吐血推荐)

    文章很长而且持续更新,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 + 社群大片好评 < Java 高并发 三部 ...

  6. Webbrowser控件史上最强技巧全集

    原文:Webbrowser控件史上最强技巧全集 Webbrowser控件史上最强技巧全集 VB调用webbrowser技巧集 1.获得浏览器信息: Private Sub Command1_Click ...

  7. 史上最强php生成pdf文件,html转pdf文件方法

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  8. 基于renren-fast的快速入门项目实战(实现报表增删改查)

    基于renren-fast的快速入门项目实战(实现报表增删改查) 说明:renren-fast是一个开源的基于springboot的前后端分离手脚架,当前版本是3.0 官方开发文档需付费,对于新手而言 ...

  9. Github 上热门的 Spring Boot 项目实战推荐

    最近经常被读者问到有没有 Spring Boot 实战项目可以学习,于是,我就去 Github 上找了 10 个我觉得还不错的实战项目.对于这些实战项目,有部分是比较适合 Spring Boot 刚入 ...

随机推荐

  1. 《算法问题实战策略》——chaper9——动态规划法技巧

    Q1: 数字游戏: 两个人(A.B)用n个整数排成的一排棋盘玩游戏,游戏从A开始,每个人有如下操作: (1)    拿走棋盘最右侧或者最左侧的棋子,被拿走的数字从棋盘中抹掉. (2)    棋盘中还剩 ...

  2. Django中的Form

    Form 一.使用Form Django中的Form使用时一般有两种功能: 1.生成html标签 2.验证输入内容 要想使用django提供的form,要在views里导入form模块 from dj ...

  3. 常用的MySQL图形化管理软件

    本博文的主要内容有 .SQLyog软件的安装.下载和使用 .Navicat for MySQL软件的安装.下载和使用 1.SQLyog软件的安装.下载和使用 2.Navicat for MySQL软件 ...

  4. 深度学习Matlab DeepLearningToolBox 工具包最常见错误解决办法\

    deeplearningtoolbox  下载链接github : https://github.com/rasmusbergpalm/DeepLearnToolbox,只需要解压到matlab当前工 ...

  5. PHP小题目 求 1*3+5*7+…+97*99的值

    下面是另外两种比较基础的方法实现的代码

  6. sql 视图 按where条件多个字段取一个 分类: SQL Server 2014-12-01 14:09 308人阅读 评论(0) 收藏

    首先介绍一下 Case ..When...Then..End  的用法: CASEJiXiaoFind_RowID  WHEN '1' THENJiXiao_Money1  WHEN '2' THEN ...

  7. 《31天成为IT服务达人》之精准运维

     1       第十四章精准运维服务 近年来国内IT产业的发展格局始终与我国的经济转型与创新创业的社会大潮息息相关,纵观国内国际形势,IT产业仍是创新的领头者,是解决人类各种经济危机的主要扮演者 ...

  8. DataFromFile

    #region Copyright 2013, Andreas Hoffmann // project location ==> http://datafromfile.codeplex.com ...

  9. 基于xmpp openfire smack开发之openfire介绍和部署[1]

    前言 http://blog.csdn.net/shimiso/article/details/8816558 Java领域的即时通信的解决方案可以考虑openfire+spark+smack.当然也 ...

  10. /proc/sys/ 下内核参数解析

    http://blog.itpub.net/15480802/viewspace-753819/ http://blog.itpub.net/15480802/viewspace-753757/ ht ...