`
mintelong
  • 浏览: 396180 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android JNI简单实例

阅读更多
Android的jni实例

android 的应用程序(Dalvik VM)中使用JNI(Java Native Interface)调用C/C++开发的共享库。

c/c++中调用java程序的方法以后再发。


开发环境

(eclipse + android ADT)

WindowsXP SP3

JDK 1.6.0.12

VMWARE+Ubuntu Linux 8.04

    

(1) Eclipse中新建android工程

工程名 JNItest

Package名com.ura.test

Activity名 JNItest

应用程序名 JNItest

(2) 编辑main.xml

   1. <?xml version="1.0" encoding="utf-8"?>
   2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   3.     android:orientation="vertical"
   4.     android:layout_width="fill_parent"
   5.     android:layout_height="fill_parent"
   6.     >
   7. <TextView 
   8.     android:id="@+id/JNITest"
   9.     android:layout_width="fill_parent"
  10.     android:layout_height="wrap_content"
  11.     android:text="@string/JNITest"
  12.     />
  13. </LinearLayout>
14.

复制代码


(3)编辑java文件

   1. package com.ura.test;
   2.

   3. import android.app.Activity;
   4. import android.os.Bundle;
   5. import android.widget.TextView;
   6. public class JNITest extends Activity {
   7.     /** Called when the activity is first created. */
   8.    static {
   9.             System.loadLibrary("JNITest");
  10.    }
  11.    public native String GetTest();
  12.          @Override
  13.     public void onCreate(Bundle savedInstanceState) {
  14.         super.onCreate(savedInstanceState);
  15.         setContentView(R.layout.main);
  16.         String str =GetTest();
  17.         TextView JNITest = (TextView)findViewById(R.id.JNITest);
  18.         JNITest.setText(str);
  19.     }
  20. }

复制代码

(4)生成head文件     

编译上面工程声称class文件,然后用javah工具生成c/c++头文件。

   1. javah -classpath bin -d jni com.ura.test.JNItest

复制代码


生成的头文件如下

   1. /* DO NOT EDIT THIS FILE - it is machine generated */
   2. #include <jni.h>
   3. /* Header for class com_ura_test_JNITest */
   4.

   5. #ifndef _Included_com_ura_test_JNITest
   6. #define _Included_com_ura_test_JNITest
   7. #ifdef __cplusplus
   8. extern "C" {
   9. #endif
  10. /*
  11. * Class:     com_ura_test_JNITest
  12. * Method:    GetTest
  13. * Signature: ()Ljava/lang/String;
  14. */
  15. JNIEXPORT jstring JNICALL Java_com_ura_test_JNITest_GetTest
  16.   (JNIEnv *, jobject);
  17.

  18. #ifdef __cplusplus
  19. }
  20. #endif
  21. #endif

复制代码

(5)编写c/c++文件如下

   1. #include "com_ura_test_JNITest.h"
   2.

   3.


   4.



   5. #define LOG_TAG "JNITest"
   6.

   7. #undef LOG
   8.

   9. #include <utils/Log.h>
  10.

  11.


  12.



  13.




  14.





  15. JNIEXPORT jstring JNICALL Java_com_ura_test_JNITest_GetTest
  16.   (JNIEnv * env, jobject obj)
  17. {
  18.     return (*env)->NewStringUTF(env, (char *)"JNITest Native String");
  19.     LOGD("Hello LIB!\n");
  20.

  21. }

复制代码

(6)编写android.mk文件

   1. LOCAL_PATH:= $(call my-dir)
   2. include $(CLEAR_VARS)
   3. LOCAL_SRC_FILES:= \
   4.     com_ura_test_JNITest.c
   5. LOCAL_C_INCLUDES := \
   6.     $(JNI_H_INCLUDE)
   7. LOCAL_SHARED_LIBRARIES := libutils
   8. LOCAL_PRELINK_MODULE := false
   9. LOCAL_MODULE := libJNITest
  10. include $(BUILD_SHARED_LIBRARY)

复制代码

(7)编译生成动态库

新建文件夹


~/mydroid/external/libJNITest


把上面编写好的头文件,c/c++源文件,make文件拷贝进上面目录中

* 需要注意的是把PRELINK_MOUDULE设置成false

否则需要重新做成img文件再烧入。

在ubuntu中执行

   1. cd
   2. cd mydroid/build/
   3. envsetup.sh
   4. cd ~/mydroid
   5. cd external/libJNITest/
   6. mm

复制代码

编译成功的后会在下面目录中生成libJNITest.so文件


~mydroid/out/target/product/generic/system/lib/


(8)在模拟器中执行程序

首先要把动态库拷进/system/lib中。

启动模拟器

   1. adb shell
   2. adb remount
   3. adb push libJNITest.so /system/lib

复制代码

确认拷贝成功。

   1. cd /system/lib
   2. ls

复制代码


然后不要关闭模拟器(关掉再开动态库就没了,因为模拟器rom是只读)

执行java程序JNITest

会看到屏幕上打印出

JNITest Native String
分享到:
评论

相关推荐

    android JNI简单例子

    这个"android JNI简单例子"就是一个很好的学习平台,通过它,开发者可以了解并实践上述所有步骤,从而掌握在Android应用中使用JNI的基本流程。对于初学者来说,这将有助于理解Java和C/C++代码如何协同工作,提升应用...

    Android NDK JNI 经典实例

    Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例

    Android jni 编程实例

    在这个"Android jni 编程实例"中,我们将探讨如何在Android Studio环境下进行JNI开发,通过一个简单的入门demo来学习这个过程。 首先,我们需要了解JNI的基本概念。JNI是Java平台提供的一种接口,它允许Java代码...

    android JNI学习三实例

    在这个"android JNI学习三实例"中,我们将深入探讨如何在Android应用开发中使用JNI。 一、JNI简介 JNI是Java平台的一部分,提供了一套接口,让Java代码能够调用本地(native)代码,同时也允许本地代码调用Java对象...

    Android JNI串口通讯【实战例子】

    Android JNI串口通讯【实战例子】 学习NDK开发很好的例子,也可以直接用在项目中

    serial_jni_largestgle_Androidjni_Android串口操作JNI代码_android_

    总结来说,`serial_jni_largestgle_Androidjni_Android串口操作JNI代码_android_`项目是一个Android应用使用JNI进行串口通信的实例。它涵盖了JNI编程、Android NDK开发、原生代码与Java代码的交互、串口通信协议以及...

    Android JNI 用C函数写本地库读写文件,底层调用小例子

    这个小例子展示了如何使用JNI和C语言来创建一个本地库,用于执行文件的读写操作,从而实现底层的高效控制。下面将详细阐述Android JNI、C语言在Android中的应用以及如何实现文件的读写。 首先,我们需要了解JNI的...

    Android studio jni简单编程实例

    Android Studio是一款专为Android应用开发设计的...通过这个简单的实例,你已经掌握了Android Studio中JNI编程的基本步骤。随着深入学习,你可以使用JNI实现更复杂的任务,如与原生库交互、调用硬件接口、优化性能等。

    android jni调用demo

    本项目“android jni调用demo”是一个实际操作的例子,它提供了在Android Studio环境中运行的完整流程。 首先,我们需要理解JNI的基本概念。JNI是Java平台的一部分,允许Java代码与其他编程语言(如C/C++)进行通信...

    Android JNI应用实例

    在"Android JNI应用实例"中,我们可以深入学习如何使用JNI。通常,一个简单的JNI开发流程包括以下步骤: 1. 创建Java类:首先,我们需要在Java层定义一个类,声明native方法,这些方法将在C/C++代码中实现。 2. ...

    Android JNI多线程编程回调JAVA函数

    在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。JNI在处理性能敏感的任务,如图形渲染、硬件访问或者与C/C++库集成时,尤其有用。本话题将深入探讨如何...

    android jni实用demo

    Android JNI(Java Native Interface)是Android系统中连接Java层与C/C++原生代码的关键技术。这个"android jni实用demo"提供了一个很好的学习平台,帮助开发者深入理解如何在Android应用中使用JNI进行跨语言编程。 ...

    Android调用JNI的简单实例(附详细步骤)

    本教程将通过一个简单的实例,详细介绍如何在Android项目中调用JNI。 一、JNI简介 JNI是Java平台标准的一部分,它为Java程序员提供了一个接口,可以使用本地代码(如C/C++)来扩展Java应用程序。JNI使得开发者能够...

    Android JNI 实例

    总的来说,Android JNI实例涵盖了从Java到C/C++的调用过程,涉及了JNI的基本原理和实践技巧。无论是静态注册还是动态注册,都需要理解JNI的核心概念,如JNI函数的调用约定、JNI数据类型以及Java对象在本地代码中的...

    Android Jni调用实例

    在Android Jni调用实例中,我们通常会经历以下几个步骤: 1. **创建本地方法声明**:在Java层,我们需要声明一个native方法,该方法将在C/C++代码中实现。例如: ```java public class NativeDemo { static { ...

    android jni 中文字符传递demo

    虽然提供的压缩包文件名称列表只包含了"HelloWorld",通常这是JNI入门的典型示例,但在处理中文字符的情况下,这个简单的“你好,世界!”可能已经扩展为包含中文字符。开发者可能通过修改这个基础的"HelloWorld...

    android jni抛出异常

    在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言(如C++或C)交互。JNI在许多场景下都非常有用,例如优化性能、调用系统库或者处理特定的硬件功能。然而,如同任何编程...

    Android JNI应用实例02

    Android JNI(Java Native Interface)是Android开发中的一个重要概念,它为Java代码提供了与本地C/C++代码交互的能力。...通过学习这个实例,开发者可以加深对Android JNI的理解,提高在实际项目中应用JNI的能力。

    AndroidJNI.rar_Android jni_android

    本资料"AndroidJNI.rar_Android jni_android"可能包含一个简单的示例项目——HelloWorld,用于教学如何在Android应用中使用JNI。 首先,我们来理解JNI的基本概念。JNI是一套接口,使得Java虚拟机(JVM)能够调用...

    Android JNI示例代码

    在Android开发中,Java Native Interface (JNI) 是一个至关重要的技术,它允许Java代码与本地(C/C++)代码交互。JNI在很多场景下都扮演着关键角色,比如提升性能、利用硬件加速、调用已有的C库或者实现低级别操作。...

Global site tag (gtag.js) - Google Analytics