android java调用c_Android JNI简单实例(android 调用C/C++代码)
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++代码)相关推荐
- Android JNI简单实例(android 调用C/C++代码)
转载自 xiechengfa 最终编辑 xiechengfa Android JNI简单实例关键字: android.jni Android的jni实例 android 的应用程序(Dalvik VM ...
- android 简单实现圆角,Android 实现圆角图片的简单实例
Android 实现圆角图片的简单实例 实现效果图: 本来想在网上找个圆角的例子看一看,不尽人意啊,基本都是官方的Demo的那张原理图,稍后会贴出.于是自己自定义了个View,实现图片的圆角以及圆形效 ...
- Appium+Java环境搭建及简单实例
Appium+Java环境搭建及简单实例 一.下载jdk并配置好环境 二.下载Android-sdk并配置好环境 三.下载Eclipse软件 四.下载Node.js 下载地址:https://node ...
- 用Java 开发 WebService Axis简单实例
用 Java 开发 WebService Axis 简单实例 在开发之前, 先了解一下AXIS,axis目前出现的2版本以其灵活性,快速开发工具的集成高于xfire而使用者居其上.用Eclipse开发 ...
- Android 拖动条(SeekBar)实例 附完整demo项目代码
Android 拖动条(SeekBar)实例 附完整demo项目代码 1.拖动条的事件 实现SeekBar.OnSeekBarChangeListener接口.需要监听三个事件: 数值改变(onPro ...
- Java WebService 接口的简单生成和调用
Java WebService 接口的简单生成和调用 1.打开eclipse创建普通的java项目,写一个类 如下: package com.jspweb.ws;import javax.jws.W ...
- vue 调用webservice_js跨域调用WebService的简单实例
步骤1. 在web.config中的system.web节点里加入 步骤2.webservice代码 using System; using System.Collections.Generic; u ...
- 使用cle 调用opengl的简单例子(android)
使用Using common language extension(cle)作为接口组件,编程能够得到很大简化.下面是一个调用opengl的例子,是从ndk example hello-gl2.修改而 ...
- Android之NDK开发的简单实例
NDK全称为Native Development Kit,是本地开发工具集.在Android开发中,有时为了能更好的重用以前的C/C++的代码,需要将这些代码编译成相应的so,然后通地JNI以供上层J ...
最新文章
- Explore Scheduling
- zabbix开启报警声音 网页也可以有声音
- hdu 1022 Train Problem I 解题报告
- 《走遍中国》珍藏版(七)
- strcmp java_C语言中strcmp的实现原型
- php按数字分页类,PHP简单实现数字分页功能示例
- php if 单行,php – 单行if语句或if语句没有大括号坏习惯?
- Spring ActiveMQ教程
- 垃圾回收算法与实现系列-锁在应用层的优化思路
- C/C++的内存泄漏检测工具Valgrind memcheck的使用经历
- 使用命令行 启动 各种服务(控制面板 开机启动项 注册表 等)
- java zip ant 密码_java对 zip文件的压缩和解压(ant解决中文乱码)
- STC学习:扫描频率可变的电子钟
- arcgis图像和坐标系统一致但不重合_学习ArcGIS,这62个Arcmap常用操作技巧可能帮到您...
- sql server的linux版命令行,Linux配置SQLServer
- 计算机显示器模糊,电脑显示器模糊了怎么办?
- python中私有属性无法访问的原理_python私有属性访问不到吗?
- 北航2017级软件学院算法第一次上机题解
- 日常踩坑记录-汇总版
- python 筛选重复数据和不重复数据_[Python] Pandas 对数据进行查找、替换、筛选、排序、重复值和缺失值处理...
热门文章
- Python实战从入门到精通第五讲——数据结构与算法3之序列中出现最多的元素
- java实现c语言的函数_C语言tolower函数介绍、示例和实现
- Keras一些基本概念
- 吴恩达机器学习学习笔记第三章:机器学习中的线性代数
- 吴恩达机器学习(十五)大规模机器学习(Batch、Stochastic、Mini-batch gradient descent、MapReduce)
- 开启python之旅
- 重置密码解决MySQL for Linux错误 ERROR 1045 (28000):
- Android自定义view之事件传递机制
- python接口自动化(三十一)--html测试报告通过邮件发出去——下(详解)
- jenkins手把手教你从入门到放弃02-jenkins在Windows系统安装与配置