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

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:id="@+id/JNITest"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/JNITest"

/>

(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

/* 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

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 java调用c_Android JNI简单实例(android 调用C/C++代码)相关推荐

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

    转载自 xiechengfa 最终编辑 xiechengfa Android JNI简单实例关键字: android.jni Android的jni实例 android 的应用程序(Dalvik VM ...

  2. android 简单实现圆角,Android 实现圆角图片的简单实例

    Android 实现圆角图片的简单实例 实现效果图: 本来想在网上找个圆角的例子看一看,不尽人意啊,基本都是官方的Demo的那张原理图,稍后会贴出.于是自己自定义了个View,实现图片的圆角以及圆形效 ...

  3. Appium+Java环境搭建及简单实例

    Appium+Java环境搭建及简单实例 一.下载jdk并配置好环境 二.下载Android-sdk并配置好环境 三.下载Eclipse软件 四.下载Node.js 下载地址:https://node ...

  4. 用Java 开发 WebService Axis简单实例

    用 Java 开发 WebService Axis 简单实例 在开发之前, 先了解一下AXIS,axis目前出现的2版本以其灵活性,快速开发工具的集成高于xfire而使用者居其上.用Eclipse开发 ...

  5. Android 拖动条(SeekBar)实例 附完整demo项目代码

    Android 拖动条(SeekBar)实例 附完整demo项目代码 1.拖动条的事件 实现SeekBar.OnSeekBarChangeListener接口.需要监听三个事件: 数值改变(onPro ...

  6. Java WebService 接口的简单生成和调用

    Java WebService 接口的简单生成和调用 1.打开eclipse创建普通的java项目,写一个类  如下: package com.jspweb.ws;import javax.jws.W ...

  7. vue 调用webservice_js跨域调用WebService的简单实例

    步骤1. 在web.config中的system.web节点里加入 步骤2.webservice代码 using System; using System.Collections.Generic; u ...

  8. 使用cle 调用opengl的简单例子(android)

    使用Using common language extension(cle)作为接口组件,编程能够得到很大简化.下面是一个调用opengl的例子,是从ndk example hello-gl2.修改而 ...

  9. Android之NDK开发的简单实例

    NDK全称为Native Development Kit,是本地开发工具集.在Android开发中,有时为了能更好的重用以前的C/C++的代码,需要将这些代码编译成相应的so,然后通地JNI以供上层J ...

最新文章

  1. Explore Scheduling
  2. zabbix开启报警声音 网页也可以有声音
  3. hdu 1022 Train Problem I 解题报告
  4. 《走遍中国》珍藏版(七)
  5. strcmp java_C语言中strcmp的实现原型
  6. php按数字分页类,PHP简单实现数字分页功能示例
  7. php if 单行,php – 单行if语句或if语句没有大括号坏习惯?
  8. Spring ActiveMQ教程
  9. 垃圾回收算法与实现系列-锁在应用层的优化思路
  10. C/C++的内存泄漏检测工具Valgrind memcheck的使用经历
  11. 使用命令行 启动 各种服务(控制面板 开机启动项 注册表 等)
  12. java zip ant 密码_java对 zip文件的压缩和解压(ant解决中文乱码)
  13. STC学习:扫描频率可变的电子钟
  14. arcgis图像和坐标系统一致但不重合_学习ArcGIS,这62个Arcmap常用操作技巧可能帮到您...
  15. sql server的linux版命令行,Linux配置SQLServer
  16. 计算机显示器模糊,电脑显示器模糊了怎么办?
  17. python中私有属性无法访问的原理_python私有属性访问不到吗?
  18. 北航2017级软件学院算法第一次上机题解
  19. 日常踩坑记录-汇总版
  20. python 筛选重复数据和不重复数据_[Python] Pandas 对数据进行查找、替换、筛选、排序、重复值和缺失值处理...

热门文章

  1. Python实战从入门到精通第五讲——数据结构与算法3之序列中出现最多的元素
  2. java实现c语言的函数_C语言tolower函数介绍、示例和实现
  3. Keras一些基本概念
  4. 吴恩达机器学习学习笔记第三章:机器学习中的线性代数
  5. 吴恩达机器学习(十五)大规模机器学习(Batch、Stochastic、Mini-batch gradient descent、MapReduce)
  6. 开启python之旅
  7. 重置密码解决MySQL for Linux错误 ERROR 1045 (28000):
  8. Android自定义view之事件传递机制
  9. python接口自动化(三十一)--html测试报告通过邮件发出去——下(详解)
  10. jenkins手把手教你从入门到放弃02-jenkins在Windows系统安装与配置