`
daibalusu
  • 浏览: 344397 次
文章分类
社区版块
存档分类
最新评论

【Android应用开发】-(14)JNI经典实例之一

 
阅读更多

接下来几篇文章,学习JNI开发,主要是学习《JNI详解》,将里面的实例通过Android平台实现,首先由一个经典实例引出 – HelloWorld!!HelloWorld是经典的,一想起学编程,就想起那些年我们一起写过的HelloWorld。这里用HelloWorld来讲解JNI的开发过程。这个过程大致可通过下图来说明:

1) 新建一个HelloWorld工程;

2) 创建一个带有native方法的类Helloworld.java;

package org.winplus.helloworld;
public class HelloWorld {
	public native void print();  	
	private void stitic() {
		System.loadLibrary("helloworld");
	}
}

HelloWorld类首先声明了一个publicnativevoid print()方法。Static包含的是本地库。在java代码中声明为native的本地方法只作为声明存在。在调用本地方法之前,必须先装载含有该方法的本地库,如HelloWorld中所示,置于static中,在JavaVM初始化一个类时,首先会执行这段代码,这可保证调用本地方法之前装载了本地库。转载的机制请看后文…

3) 使用javac编译Helloworld.java

使用Eclipse的同学不需要做此动作,都自动编译了。进入Class目录。

4) 使用javah –jni 编译Helloworld.class 生成头文件 Helloworld.h;Javah –jni org.winplus.helloworld.HelloWorld会生成一个名为:org_winplus_helloworld_ HelloWorld.h的头文件。生成的代码如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class org_winplus_helloworld_HelloWorld */

#ifndef _Included_org_winplus_helloworld_HelloWorld
#define _Included_org_winplus_helloworld_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     org_winplus_helloworld_HelloWorld
 * Method:    print
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_org_winplus_helloworld_HelloWorld_print
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

我们注意到JNIEXPORTvoid JNICALL Java_org_winplus_helloworld_HelloWorld_print(JNIEnv *,jobject);这里我们注意到JNIEXPORT和JNICALL两个宏,我们看到这个函数声明接收两个参数而对应的Java代码中并没有参数。第一个参数是指向JNIEnv结构的指针;第二个参数,为HelloWorld对象自身,即this指针。
5) 使用C实现头文件中的函数

#include <jni.h>
#include <stdio.h>
#include "android/log.h"
#include "HelloWorld.h"
static const char *TAG="HelloWorld";
#define LOGI(fmt, args...) __android_log_print(ANDROID_LOG_INFO,  TAG, fmt, ##args)
JNIEXPORT void JNICALL Java_org_winplus_helloworld_HelloWorld_print
  (JNIEnv *env, jobject obj){
	LOGI("Hello World");
	return;  
}

这里为了方便看到打印信息,使用了jni中的log.h头文件和ANDROID_LOG_INFO宏。

6) 编译C文件生成本地库。这一步比较繁琐,请下载源码看吧。具体步骤

a)将头文件及C文件拷贝到jni目录,并编写Android.mk和Application.mk文件

b)通过ndk或者在Ubuntu下编译,生成helloworld.so文件

c)将生成的文件拷贝到libs/armeabi目录下,并更改名字为:libhelloworld.so

7) 运行程序,查看结果。


源码下载==》

原创文章装载请注明出处:http://blog.csdn.net/tangcheng_ok
分享到:
评论

相关推荐

    Android代码-各种实例库

    博客:浅谈MVP实现Android应用层开发 博客文章链接---------实例代码工程 博客:EventBus使用之基础 博客文章链接---------实例代码工程 博客:Android应用Design Support Library完全使用实例 博客文章链接--------...

    《Android应用开发揭秘》附带光盘代码.

    《Android应用开发揭秘》全部实例源代码,配合《Android应用开发揭秘》使用 前言  第一部分 准备篇  第1章 Android开发简介  1.1 Android基本概念  1.1.1 Android简介  1.1.2 Android的系统构架  1.1.3 ...

    Android应用开发揭秘pdf高清版

    C++(NDK)和Python、Lua等脚本语言(AndroidScriptingEnvironment)来开发Android应用,《Android应用开发揭秘》实战性强,书中的每个知识点都有配精心设计的示例,尤为值得一提的是,它还以迭代的方式重现了各种...

    《Android应用开发揭秘》源码

     第10章 Android应用开发实例  10.1 情境模式  10.2 文件管理器  10.3 通讯录  10.4 音乐播放器  10.5 天气预报  10.6 个人地图  10.7 Widget日历  10.8 小结  第11 章Android游戏开发实例  11.1 手机...

    Android应用程序使用JNI调用驱动程序

    基于老罗的《Android内核源代码情景分析》第二章freg实例,使用NDK编译jni层从而调用驱动程序,能大大缩短项目开发周期。

    新版Android开发教程.rar

    � 由于采用了 Java 作为应用开发语言,目前可用的传统第三方应用还很少,但由于 Android 是一款完全 开 源的移动计算平台,相信第三方应用会很快的丰富起来。 � Google 提供了一套 Java 核心包 (J2SE 5,J2SE 6) 的...

    android-framework-hal

    7 Android的Audio系统 7.1 Audio系统的综述 Audio系统架构和代码路径 7.2 meida库中Audio相关接口 Audio系统的本地核心接口,类的层次结构 7.3 Audio系统和上层接口 Audio系统的JAVA层次的接口 7.4 Audio...

    android ndk开发步骤和实例

    分步骤描述了android jni如实开发。

    JNI使用实例

    一个JNI入门的使用实例 android 的应用程序(Dalvik VM)中使用JNI(Java Native Interface)调用C/C++开发的共享库

    Android JNI 调用演示代码

    演示JNI中几种不同的调用方法 1. 在应用的JAVA代码中调用NDK中C/C++实现的函数...3. 在NDK开发中的C/C++代码调用应用中JAVA类当前传入NDK中的实例的函数。 4. 在NDK开发中的C/C++代码调用应用中JAVA类新建实例的函数。

    android系统原理及开发要点详解

     1.2.2 Android应用开发 8  1.2.3 Android系统开发 9  1.3 Android的SDK与源代码 10  1.3.1 基于SDK的Android开发 10  1.3.2 基于源代码SDK Android开发 11  第2章 Android系统开发综述 13  2.1 Android的...

    android 完全中文版 开发应用详解

    目录: 结构如下,非常详细 第1章 android系统概述 1 1.1 基础知识 1 1.1.1 android开发系统的...15.2 android应用开发实例 381 15.2.1 gui依赖类的程序 382 15.2.2 单独模块类程序 387 15.3 android的设计理念 393

    Android 初学中阶高阶书籍_集合打包2

    部分,Android的连接部分,Android的传感器系统,Android应用开发揭秘(含代码),Android 电话与短信应用,Android斗地主[牌 桌实现源码],Android核心分析,Android开发权威指南. Android开发指南中文版-应用程序框架,...

    Android 初学中阶高阶书籍_集合打包3

    部分,Android的连接部分,Android的传感器系统,Android应用开发揭秘(含代码),Android 电话与短信应用,Android斗地主[牌 桌实现源码],Android核心分析,Android开发权威指南. Android开发指南中文版-应用程序框架,...

    Android底层开发技术实战详解--内核、移植和驱动.(电子工业.王振丽).part1

    在每一章中,重点介绍了与Android驱动开发相关的底层知识,并对Android源码进行了剖析。 本书适合Android研发人员及Android爱好者学习,也可以作为相关培训学校和大专院校相关专业的教学用书。 全书压缩打包成3...

    深入理解Android:卷I--详细书签版

     本书适合有一定基础的android应用开发工程师和系统工程师阅读。通过对本书的学习,大家将能更深刻地理解android系统,从而自如应对实际开发中遇到的难题。 作译者  邓凡平,资深Android开发工程师,热衷于...

    《深度理解Android:第一卷》

    针对性强,注重实际应用开发需求,书中所涵盖的知识点都是Android应用开发者和系统开发者需要重点掌握的。 目录 第1章 阅读前的准备工作 / 1 1.1 系统架构 / 2 1.1.1 Android系统架构 / 2 1.1.2 本书的架构 / 3...

Global site tag (gtag.js) - Google Analytics