- 浏览: 847834 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
loveseed1989:
您好,我用您的方法运行Cone.java,会给我报java.l ...
vtk学习笔记 --- 编译vtk库和java库 -
60love5:
60love5 写道首先谢谢你的解析,但你这个验证可见性的小程 ...
多线程中共享对象的可见性 -
60love5:
首先谢谢你的解析,但你这个验证可见性的小程序是存在问题的,你的 ...
多线程中共享对象的可见性 -
Gamehu520:
...
java 中的Unsafe -
shanpao1234560:
这个list不是静态的第一种情况下也会有线程安全的问题么,求指 ...
一个看似线程安全的示例
开发环境:
ubuntu 10.10 + eclipse + adt +android ndk + android sdk
1、新建简单项目:JNIDemo,
设计jni到java类:
package com.lt.jni
public class JNI { /** * call the native printf method to print */ public native void print(); public native String sayHello(); }
2、在android到bin目录下,执行命令:
javah -jni com.lt.jni.JNI 来生成头文件:com_lt_jni_JNI.h
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_lt_jni_JNI */ #ifndef _Included_com_lt_jni_JNI #define _Included_com_lt_jni_JNI #ifdef __cplusplus extern "C" { #endif /* * Class: com_lt_jni_JNI * Method: print * Signature: ()V */ JNIEXPORT void JNICALL Java_com_lt_jni_JNI_print (JNIEnv *, jobject); /* * Class: com_lt_jni_JNI * Method: sayHello * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_lt_jni_JNI_sayHello (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
3、在项目目录下,新建jni目录,并新建c源文件com_lt_jni_JNI.c:
#include <jni.h> #include <stdio.h> #include <string.h> #include <android/log.h> #include "com_lt_jni_JNI.h" /* * Class: com_lt_jni_JNI * Method: print * Signature: ()V */ JNIEXPORT void JNICALL Java_com_lt_jni_JNI_print (JNIEnv *env, jobject obj) { __android_log_print(ANDROID_LOG_INFO,"JNI","Java_com_lt_jni_JNI_print"); printf("Hello world!\n"); return ; } JNIEXPORT jstring JNICALL Java_com_lt_jni_JNI_sayHello (JNIEnv *env, jobject obj) { __android_log_print(ANDROID_LOG_INFO,"JNI","Java_com_lt_jni_JNI_sayHello"); return (*env)->NewStringUTF(env,"Hello JNI"); }
关键代码:#include <android/log.h>
__android_log_print(ANDROID_LOG_INFO,"TAG","log info");
4、在jni目录下新建Android.mk文件:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=\
com_lt_jni_JNI.c
LOCAL_CFLAGS := -O2 -g
#LOCAL_CFLAGS += -D__FAVOR_BSD
#LOCAL_C_INCLUDES += \
# bionic/libc/include\
# external/libpcap
LOCAL_C_INCLUDES := \
$(JNI_H_INCLUDE)
#LOCAL_STATIC_LIBRARIES += libpcap
#LOCAL_SHARED_LIBRARIES += libssl libcrypto
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
#LOCAL_MODULE_TAGS := eng
LOCAL_MODULE := helloworld
include $(BUILD_SHARED_LIBRARY)
评论
建议到ubuntu下面搭建android开发环境,包括ndk开发环境。
java代码和ndk代码分两个项目来开发。
ndk可以放到源码环境中编译
发表评论
-
基于Oracle Streams + Oracle AQ 捕获变更,发布变更(二)
2014-11-21 22:23 3216要求:使用Oracle Streams捕获某个用户下部 ... -
基于Oracle Streams + Oracle AQ 捕获变更,发布变更(一)
2014-11-20 22:23 2806要求:使用Oracle Streams捕获某个用户下部分表 ... -
如何去掉在浏览器中打开java applet时的警告对话框
2013-08-24 12:10 6998好久没更新博客了! 最近,由于项目要求,需要将sw ... -
Android 内存泄露笔记
2013-03-05 23:10 01、大部分内存泄露都是错误的持有了Activity或者Con ... -
java 虚拟机总结 【思维导图】
2012-12-22 20:11 2098java虚拟机总结思维导图: 参考《深入理解jav ... -
Java虚拟机字节码执行引擎 【思维导图】
2012-12-22 19:51 1687java虚拟机字节码执行引擎思维导图总结: 参考《深入理 ... -
java 垃圾回收相关总结 【思维导图】
2012-12-21 19:03 3289java垃圾回收相关总结: 参考《深入理解java ... -
java并发中的延迟初始化
2012-12-12 19:17 4707在《java并发编程实战 ... -
java同步容器与并发容器
2012-12-09 18:07 4365何为同步容器:可以简 ... -
一个看似线程安全的示例
2012-12-09 14:56 5082在《java并发编程实战》第四章4.4.1节给出了一个程序示 ... -
多线程中的long和double
2012-12-08 19:26 4207在看一些代码的时候,会发现在定义long型和double型的 ... -
多线程中共享对象的可见性
2012-12-08 18:52 5152在阅读《java并发编程实战》的第三章的时候,看到书中的一个 ... -
一个快速、轻量级 Collection 库 Trove
2012-12-07 09:35 3766Trove一个快速、轻量级针对java原子类型(byte,i ... -
java 中的Unsafe
2012-12-05 22:25 32761在阅读AtomicInteger的源码时,看到了这个类:su ... -
在ubuntu10上编译Thrift0.8.0
2012-08-01 15:34 2160下载thrift0.8.0 ,地址: http:// ... -
生活小工具--记账小助手1.0发布
2012-05-31 15:08 1760因为自己平时喜欢记账,把每日的消费情况都记录下来,所以希望找 ... -
话费速查升级版v1.3发布
2012-05-04 12:47 1443前段时间开发了一个话费速查的小应用,最近一直保持每周更新一个 ... -
编译zeromq的java绑定:jzmq
2012-05-03 22:47 135521、 下载zeromq源码:http://www.ze ... -
Android软件包静默安装小应用 - 附源码
2012-04-21 20:50 12424老早之前,写了一个android软件包静默安装的应用,放在工 ... -
最方便的联通话费,余额查询软件来了! --- 联通话费速查v1.2
2012-04-12 18:01 4045软件介绍: 联通话费速查是一款针对联通 ...
相关推荐
在Android开发中,JNI(Java Native Interface)是一种技术,允许Java代码和其他语言写的代码进行交互。当需要执行一些性能敏感或者Java无法直接处理的任务时,开发者通常会利用JNI调用C/C++原生代码。本话题关注的...
为了在Eclipse工程中使用NDK,你需要设置几个步骤。首先,确保你已经安装了Android NDK,并且在Eclipse的项目属性中配置了NDK路径。接着,创建一个名为`jni`的目录,这里将存放你的C/C++源文件。在Java代码中,使用`...
为了调试,可以使用NDK提供的`__android_log_print()`函数输出日志,便于在Android Studio的Logcat中查看。同时,了解Android权限管理,确保应用具有`WRITE_EXTERNAL_STORAGE`和`READ_EXTERNAL_STORAGE`权限,因为...
本教程将深入探讨如何在Android JNI中使用静态(static)变量,以实现Java层与原生代码之间的数据共享。 首先,了解JNI的基本概念是必要的。JNI为Java应用程序提供了一个接口,可以调用本地方法(即非Java代码),...
在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言编写的代码进行交互,特别是C++或C。JNI在处理性能敏感的计算、访问硬件特性或者利用现有C库时非常有用。然而,在JNI编程...
总结起来,这个示例展示了如何在Android中使用JNI和C语言实现文件的读写操作。通过这种方式,开发者可以充分利用C语言的性能优势,同时保持Java的易用性和跨平台性。在实际项目中,这可能用于处理大量数据、加密解密...
在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言(如C++或C)交互。JNI在许多场景下都非常有用,例如优化性能、调用系统库或者处理特定的硬件功能。然而,如同任何编程...
在这个"Android jni 编程实例"中,我们将探讨如何在Android Studio环境下进行JNI开发,通过一个简单的入门demo来学习这个过程。 首先,我们需要了解JNI的基本概念。JNI是Java平台提供的一种接口,它允许Java代码...
本文将深入探讨如何使用JNI在Android中执行shell命令。 首先,理解JNI的工作原理是必要的。JNI接口为Java应用程序提供了一个桥梁,使其可以直接调用本地(非Java)代码,通常是C/C++编写的库。这涉及到创建一个本地...
在本教程中,我们将探讨如何在Android Studio中使用CMake工具来开发JNI,实现简单的调用。 首先,让我们了解Android Studio中的CMake集成。自从Android Studio 3.0引入了CMake支持以来,开发者可以直接在Android ...
通过学习和实践这些步骤,你将能够初步掌握Android应用中使用JNI的基本操作。随着经验的增长,你可以深入学习更复杂的JNI用法,如多线程、错误处理和优化技巧,从而更好地利用C/C++的性能优势。
2. **C++标准库支持**:从Android 5.0开始,Google引入了对C++11标准库的部分支持,这使得在JNI中使用C++代码变得更加容易,同时也提供了更丰富的编程功能。 3. **垃圾回收优化**:在旧版本中,JNI局部引用可能导致...
本教程将深入探讨如何在Android应用中使用JNI技术。 首先,我们需要理解JNI的工作原理。JNI提供了一种方式,使得Java代码可以调用本地(非Java)函数,同时本地代码也可以调用Java方法。这通常是通过创建本地方法...
在Android中,JNI的应用主要体现在提升性能、访问硬件设备以及使用已有的C/C++库等方面。 在"jniDemo"中,我们将看到以下几个关键部分: 1. **Java层**:这是Android应用的主入口,通常包含一个Java类,声明本地...
本文将详细介绍如何在Android应用中使用JNI来执行shell命令。 首先,我们需要理解JNI的概念。JNI是Java平台提供的一种机制,它允许Java代码和其他语言写的代码进行交互。通过JNI,我们可以在Java应用程序中调用C/...
Android JNI(Java Native Interface)是Android系统中用于Java与C/C++代码交互的桥梁,它允许开发者在Android应用中调用本地方法,实现性能优化或者利用已有的C/C++库。"android jni helloworld"这个标题暗示我们将...
在Android开发中,JNI(Java Native Interface)是一个关键的组件,允许Java代码和其他语言...理解并掌握JNI的使用,能让你在Android开发中更好地利用已有的C/C++库,提高代码效率,或者实现一些Java无法直接完成的功能。
Android Studio作为官方推荐的Android开发环境,集成了对NDK(Native Development Kit)的支持,使得在Android应用中使用JNI变得更加方便。现在我们来详细探讨如何在Android Studio中加载和使用JNI。 首先,我们...
在Android Studio中,JNI代码通常使用CMake构建。CMakeLists.txt文件是CMake的配置文件,它定义了编译目标、链接库等信息。以下是一个简单的示例: ```cmake cmake_minimum_required(VERSION 3.4.1) add_library( ...