android支持使用NDK开发C程序,关于配置NDK环境问题应该不用再赘述了,这个网上有很多,这里通过一篇实例来讲述简单的JNI开发,大家可以参考这篇文章(Get Your Eclipse-Integrated NDK On!)搭建Eclipse编译C语言为so文件的开发环境。

native方法实现步骤如下:

1、在Java中声明native()方法,然后编译(javac);

2、用javah产生一个.h文件;

3、编写包含.h文件的c文件

4、编译c文件

5、使用编译成功的so文件。

第一步:

1、声明native方法

  1. public class Printf_Jni {
  2. static {
  3. System.loadLibrary("com_nedu_jni_helloword_printf-jni");
  4. }
  5. public native void printHello();
  6. }

2、javac编译

进入java文件所在路径,调用javac命令,如图:

第二步:使用javah命令生成.h头文件,如图:

这个要回到src目录下,不知道什么原因,如果在上面的javac路径下会报错,如图:

使用javah命令生成的头文件如下:

  1. /* DO NOT EDIT THIS FILE - it is machine generated */
  2. #include <jni.h>
  3. /* Header for class com_nedu_jni_helloword_Printf_Jni */
  4. #ifndef _Included_com_nedu_jni_helloword_Printf_Jni
  5. #define _Included_com_nedu_jni_helloword_Printf_Jni
  6. #ifdef __cplusplus
  7. extern "C" {
  8. #endif
  9. /*
  10. * Class:     com_nedu_jni_helloword_Printf_Jni
  11. * Method:    printHello
  12. * Signature: ()V
  13. */
  14. JNIEXPORT void JNICALL Java_com_nedu_jni_helloword_Printf_1Jni_printHello
  15. (JNIEnv *, jobject);
  16. #ifdef __cplusplus
  17. }
  18. #endif
  19. #endif

第三步:编写c文件,代码如下:

  1. #include<stdio.h>
  2. #include <stdlib.h>
  3. #include "com_nedu_jni_helloword_Printf_Jni.h"
  4. JNIEXPORT void JNICALL Java_com_nedu_jni_helloword_Printf_1Jni_printHello
  5. (JNIEnv *e, jobject j)
  6. {
  7. printf("Hello world!");
  8. }

第四步,书写Android.mk文件,编译c文件
        Android.mk文件如下:

  1. LOCAL_PATH := $(call my-dir)
  2. include $(CLEAR_VARS)
  3. LOCAL_MODULE    := com_nedu_jni_helloword_printf-jni
  4. LOCAL_SRC_FILES :=Printf_Jni.c
  5. include $(BUILD_SHARED_LIBRARY)

LOCAL_MODULE    := com_nedu_jni_helloword_printf-jniLOCAL_MODULE    := com_nedu_jni_helloword_printf-jniLOCAL_MODULE  表示so文件名

LOCAL_SRC_FILES 需要编译的文件

按照这篇文章(Get Your Eclipse-Integrated NDK On!)的介绍就可以在Eclipse编译了。

第五步:使用so文件:

通过下面的代码加载so文件

  1. System.loadLibrary("com_nedu_jni_helloword_printf-jni");

通过下面的代码加载so文件通过下面的代码加载so文件

调用如下:

  1. Printf_Jni print=new Printf_Jni();
  1. print.printHello();

/**
* @author 张兴业
* 邮箱:xy-zhang#163.com
* android开发进阶群:278401545
*
*/

Android JNI入门第一篇——HelloJni的更多相关文章

  1. Android JNI入门第二篇——Java参数类型与本地参数类型对照

    前面一篇通过简单的例子介绍了android中JNI的使用.这一篇从基础上了解一些Java参数类型与本地参数类型区别. 1)        java中的返回值void和JNI中的void是完全对应的哦! ...

  2. Android开源项目第一篇——个性化控件(View)篇

    本文为那些不错的Android开源项目第一篇——个性化控件(View)篇,主要介绍Android上那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Ga ...

  3. Android JNI开发提高篇

    有关JNI的开发技术,我们继续围绕Android平台进行,JNI可以支持C或C++,从目前为止我们写过的JNI代码均为C实现的,即文件名为.C而C++的和这些有什么不同呢? Android平台上的JN ...

  4. ElasticSearch入门 第一篇:Windows下安装ElasticSearch

    这是ElasticSearch 2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  5. Flink入门-第一篇:Flink基础概念以及竞品对比

    Flink入门-第一篇:Flink基础概念以及竞品对比 Flink介绍 截止2021年10月Flink最新的稳定版本已经发展到1.14.0 Flink起源于一个名为Stratosphere的研究项目主 ...

  6. android 串口开发第一篇:搭建ndk开发环境以及第一个jni调用程序

    一:ndk环境搭建 1:开发环境 我使用的是android studio 2.3.3版本,搭建ndk开发环境比较简单,打开File----Settings----Appearance&Beha ...

  7. Android基础学习第一篇—Project目录结构

    写在前面的话: 1. 最近在自学Android,也是边看书边写一些Demo,由于知识点越来越多,脑子越来越记不清楚,所以打算写成读书笔记,供以后查看,也算是把自己学到所理解的东西写出来,献丑,如有不对 ...

  8. Zookeeper 入门第一篇

    转载原文地址: ZooKeeper学习总结 第一篇:ZooKeeper快速入门 ZooKeeper学习总结 第二篇:ZooKeeper深入探讨 ZooKeeper学习第一期---Zookeeper简单 ...

  9. JavaMail入门第一篇 邮件简介及API概述

    现如今,电子邮件在我们的生活当中扮演着越来越重要的角色,我们每个人几乎都会与其打交道(至少时不时我们都会接收到莫名其妙的垃圾邮件),在工作中,使用邮件进行交流沟通,可以使我们的工作有迹可循,也显的较为 ...

随机推荐

  1. 算法——A*——HDOJ:1813

    Escape from Tetris Time Limit: 12000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  2. Django一对多,多对多操作

    简要说明 Django里面的数据库操作O2O&M2M,一般归属于models管理 使用场景 一对一:在某表中创建一行数据时,有一个单选的下拉框(下拉框中的内容被用过一次就消失了).//两个表的 ...

  3. android 中获取网络状态、判断3G、2G、wifi网络、判断wifi是否打开、获取本机地址、获取本机串号IMEI整理

    代码如下:package com.android.xym; import java.io.IOException; import java.net.HttpURLConnection; import ...

  4. jdk、jre与jvm的区别与联系

    为了学习数据库,重装了系统,之前前一直在用eclipse,现在准备换成myeclipse,这之前当然需要重新设置环境变量,顺手写下有关jdk.jre与jvm的区别与联系以供交流参考. 首先来说一下JD ...

  5. C、C++中引用与指针的区别

    1:引用的和指针在概念上的区别 引用是变量的别名,例如 int m; int &n=m; 引用作为一个别名.它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用 ...

  6. 时尚B2B方兴未艾-Maker’s Row 获100万美元种子投资 |华丽志

    时尚B2B方兴未艾-Maker's Row 获100万美元种子投资 |华丽志 华丽志 » 网internet, 时尚B2B方兴未艾-Maker's Row 获100万美元种子投资 由 luxeco 发 ...

  7. localstroge与cookie的区别

    HTML5本地存储是一种让网页可以把键值对存储在用户浏览器客户端的方法.像Cookie一样,这些数据不会因为你打开新网站,刷新页面,乃至关闭你的浏览器而消失. 而与Cookie不同的时,这些数据不会每 ...

  8. httpunit使用演示样例

    import java.io.IOException; import java.net.MalformedURLException; import org.xml.sax.SAXException; ...

  9. Android 调用相册 拍照 实现系统控件缩放 切割图片

    android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家. package cn.m15.test; import java.io.B ...

  10. 在windows下完美安装GitHub

    笔者最近在Windows下安装GitHub,过程中遇到不少问题.现在把安装的详细步骤分享给大家,免得大家走弯路. 笔者安装了GitHub for Windows程序,一切都运行顺利.但事情没有结束,首 ...