`
朱嘉华
  • 浏览: 236209 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Android JNI简单实例(android 调用C/C++代码)

    博客分类:
  • java
阅读更多

 

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
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView  
    android:id="@+id/JNITest" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/JNITest" 
    /> 
</LinearLayout> 

(3)编辑java文件
package com.ura.test; 
 

 import android.app.Activity; 
 import android.os.Bundle; 
 import android.widget.TextView; 
 public class JNITest extends Activity { 
     /** Called when the activity is first created. */ 
    static { 
             System.loadLibrary("JNITest"); 
    } 
    public native String GetTest(); 
          @Override 
     public void onCreate(Bundle savedInstanceState) { 
         super.onCreate(savedInstanceState); 
         setContentView(R.layout.main); 
         String str =GetTest(); 
         TextView JNITest = (TextView)findViewById(R.id.JNITest); 
         JNITest.setText(str); 
     } 
 } 

(4)生成head文件
编译上面工程声称class文件,然后用javah工具生成c/c++ 头文件
javah -classpath bin -d jni com.ura.test.JNItest 

生成的头文件如下
/* DO NOT EDIT THIS FILE - it is machine generated */ 
 #include <jni.h> 
 /* Header for class com_ura_test_JNITest */ 
 

 #ifndef _Included_com_ura_test_JNITest 
 #define _Included_com_ura_test_JNITest 
 #ifdef __cplusplus 
 extern "C" { 
 #endif 
 /* 
 * Class:     com_ura_test_JNITest 
 * Method:    GetTest 
 * Signature: ()Ljava/lang/String; 
 */ 
 JNIEXPORT jstring JNICALL Java_com_ura_test_JNITest_GetTest 
   (JNIEnv *, jobject); 
 

 #ifdef __cplusplus 
 } 
 #endif 
 #endif 

(5)编写c/c++文件如下
include "com_ura_test_JNITest.h" 

#define LOG_TAG "JNITest" 
#undef LOG 
#include <utils/Log.h> 

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

 }

(6)编写android.mk文件
LOCAL_PATH:= $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_SRC_FILES:= \ 
    com_ura_test_JNITest.c 
LOCAL_C_INCLUDES := \ 
    $(JNI_H_INCLUDE) 
LOCAL_SHARED_LIBRARIES := libutils 
LOCAL_PRELINK_MODULE := false 
LOCAL_MODULE := libJNITest 
include $(BUILD_SHARED_LIBRARY) 

(7)编译生成动态库

新建文件夹


~/mydroid/external/libJNITest


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

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

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

在 ubuntu中执行
cd 
cd mydroid/build/ 
envsetup.sh 
cd ~/mydroid 
cd external/libJNITest/ 
mm 

编译成功的后会在下面目录中生成libJNITest.so文件
~mydroid/out/target/product/generic/system/lib/
(8)在模拟器中执行程序

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

启动模拟器
   
adb shell 
adb remount 
adb push libJNITest.so /system/lib 

确认拷贝成功
 cd /system/lib 
 ls

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

执行java程序JNITest

会看到屏幕上打印出

JNITest Native String
分享到:
评论

相关推荐

    android调用C/C++

    在Android平台上,调用C或C++代码是通过Java Native Interface (JNI) 实现的,这是一种允许Java代码与本地库交互的技术。JNI已经成为Android开发者在性能关键领域,如图形处理、游戏引擎、加密算法等中引入C/C++代码...

    使用C/C++实现Java的Native方法接口(JNI)/ JNI编程(C/C++) 代码实例

    本教程将详细介绍如何使用C/C++实现Java的Native方法接口,并通过代码实例来展示JNI编程的基本步骤。 1. **JNI简介** JNI是一种规范,它定义了Java虚拟机(JVM)和本地代码之间的接口。通过JNI,开发者可以在Java...

    Android Jni调用实例

    Android JNI(Java Native Interface)是Android系统中用于Java与C/C++代码交互的桥梁,它允许开发者在Android应用中使用本地代码,以实现性能优化、访问底层硬件或使用已有的C/C++库。JNI在Android NDK(Native ...

    Android jni 编程实例

    通过这个简单的实例,我们了解了Android Studio中JNI开发的基本流程,包括Java层的接口声明、JNI头文件生成、C/C++代码实现以及构建配置。实际项目中,JNI常用于使用高性能计算库、操作硬件特性或者封装已有的C/C++...

    android 使用jni调用c++

    本教程将详细介绍如何在Android项目中使用JNI调用C++代码。 首先,你需要配置Android的NDK(Native Development Kit)。NDK是一组工具,开发者可以用它来编写用C和C++编写的应用程序模块,这些模块可以直接在...

    android JNI调用实例

    通过上述步骤,我们可以成功地在Android应用中实现JNI调用,充分利用C/C++的性能优势,同时保持Java的易用性和跨平台性。不过,需要注意的是,过度使用JNI可能导致代码维护困难,因此应当谨慎权衡利弊。

    JNI技术手册 c/c++调用java

    **JNI(Java Native Interface)** 是Java平台的一部分,它允许Java代码与其他语言写的代码进行交互,尤其是C和C++。JNI是Java与本地代码之间沟通的桥梁,使得Java应用程序能够调用本地库中的方法,同时也支持从本地...

    Android JNI应用实例

    Android JNI(Java Native Interface)是Android开发中的一个重要概念,它为Java代码提供了与本地C/C++代码交互的能力。JNI在Android应用开发中的作用主要体现在以下几个方面: 1. 性能优化:对于计算密集型任务,...

    Android JNI实例01

    在这个“Android JNI实例01”中,我们将探讨如何使用JNI在Android应用中集成C/C++代码,以及如何在ARM架构的设备上运行这些本地代码。 1. **JNI基础**: - JNI接口定义了一系列函数,如`FindClass`, `GetMethodID`...

    Android-JNI完整工程,实现c++调用java和java调用c++

    Android-JNI,全称为Java Native Interface,是一种技术,允许Java代码和其他语言编写的代码进行交互。这个完整工程展示了如何在Android应用中使用JNI,实现C++与Java之间的双向调用。这种技术在需要高效计算、利用...

    android NDK入门篇----混合使用java和c/c++代码 源码工程

    本项目是一个关于Android NDK入门的实例,展示了如何混合使用Java和C/C++代码。我们将深入探讨这个主题,了解其关键概念、步骤以及实际应用。 首先,NDK的主要目的是为Android应用提供原生代码支持。原生代码通常比...

    jni.zip_c调用java_java 调用 c++_安卓 JNI

    在Android平台上,JNI(Java Native Interface)是一种关键的技术,它允许Java代码与本地(C/C++)代码进行交互。JNI是Java平台标准的一部分,旨在提供一个安全、高效的方式来调用和被调用,使得开发者可以利用C/C++...

    android调用jni实例

    我们将以"android调用JNI实例"为例,一步步解释这个过程。 首先,我们需要准备开发环境。安装Android NDK是必不可少的步骤,NDK(Native Development Kit)是一组工具,开发者可以使用它来编写用C和C++编写的本地...

    安卓串口Socket通讯USB驱动jni相关-Android调用JNI的简单实例附详细步骤.zip

    在Android开发中,有时我们需要利用Java Native Interface (JNI) 来调用C/C++的库,以实现一些高性能或者特定平台的功能,例如本案例中的串口Socket通讯和USB驱动。JNI是Java平台标准的一部分,它允许Java代码和其他...

    Android中C/C++调用Java代码

    Android中C/C++调用Java代码是通过Java Native Interface(JNI)实现的。JNI提供了一种机制,允许Java代码和native代码之间相互调用。下面我们将详细介绍Android中C/C++调用Java代码的过程。 首先,我们需要了解JNI...

    android JNI学习三实例

    Android JNI(Java Native Interface)是Android平台上的一个关键特性,它允许Java代码和其他语言写的代码进行交互,通常用于提升性能、调用系统底层库或利用C/C++的库。在这个"android JNI学习三实例"中,我们将...

    Android JNI应用实例02

    Android JNI(Java Native Interface)是Android开发中的一个重要概念,它为Java代码提供了与本地C/C++代码交互的能力。JNI在Android应用开发中的作用主要体现在以下几个方面: 1. 性能优化:对于计算密集型任务...

    Android JNI示例代码

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

    android C/C++ JNI普通数据类型 测试工程

    这个"android C/C++ JNI普通数据类型 测试工程"是用于演示如何在C/C++与Java之间传递和操作基本数据类型的一个实例。在本文中,我们将深入探讨JNI中的数据类型转换以及如何在C/C++代码和Java代码之间使用它们。 ...

    Android 调用C++/C的实例

    本文将详细介绍如何在Android应用中调用C++/C代码,通过一个实例来阐述这一过程。 首先,理解Android NDK:它是Google提供的一套工具,允许开发者在Android应用中使用原生C/C++代码。这不仅有助于复用已有的C/C++库...

Global site tag (gtag.js) - Google Analytics