`
aswang
  • 浏览: 847834 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

在android jni中使用log

 
阅读更多

开发环境:

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)


其中关键代码:
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
因为在程序中使用来log模块,所以需要指定到依赖库log

5、在console中进行到项目目录执行命令进行构建:
cd $HOME/workspace/JNIDemo
$NDK/ndk-build
-----------------------------------------------------------------------------------------------
lql@ubuntu:~/workspace/JNIDemo$ $NDK/ndk-build 
Compile thumb  : helloworld <= com_lt_jni_JNI.c
SharedLibrary  : libhelloworld.so
Install        : libhelloworld.so => libs/armeabi/libhelloworld.so

6、将手机和电脑连接,然后运行项目,在logcat中观察是否有日志信息输出:
09-14 17:28:32.067: INFO/JNI(6821): Java_com_lt_jni_JNI_print
09-14 17:28:32.067: INFO/JNI(6821): Java_com_lt_jni_JNI_sayHello

备注:
在使用$NDK/ndk-build进行构建到时候,如果之前构建过多次,那么最后先执行$NDK/ndk-build clean来进行清理
因为,有时,如果共享库文件已经生成,那么再次构建到时候,默认貌似不覆盖,这样导致虽然改来代码,却看不到效果,
之前还因为这个耽误来不少时间,特意记下,希望给路过到朋友一点帮助!





 

0
0
分享到:
评论
2 楼 aswang 2012-12-13  
weimianlong 写道
我也在弄NDK啊,很是蛋疼,eclipse里集成的c++开发环境不是很友好,你现在怎么搞这个开发环境的??


建议到ubuntu下面搭建android开发环境,包括ndk开发环境。

java代码和ndk代码分两个项目来开发。

ndk可以放到源码环境中编译
1 楼 weimianlong 2012-12-13  
我也在弄NDK啊,很是蛋疼,eclipse里集成的c++开发环境不是很友好,你现在怎么搞这个开发环境的??

相关推荐

    android jni获取 Mac地址

    在Android开发中,JNI(Java Native Interface)是一种技术,允许Java代码和其他语言写的代码进行交互。当需要执行一些性能敏感或者Java无法直接处理的任务时,开发者通常会利用JNI调用C/C++原生代码。本话题关注的...

    基于 Android NDK 的学习之旅-----JNI LOG 打印

    为了在Eclipse工程中使用NDK,你需要设置几个步骤。首先,确保你已经安装了Android NDK,并且在Eclipse的项目属性中配置了NDK路径。接着,创建一个名为`jni`的目录,这里将存放你的C/C++源文件。在Java代码中,使用`...

    serial_jni_largestgle_Androidjni_Android串口操作JNI代码_android_

    为了调试,可以使用NDK提供的`__android_log_print()`函数输出日志,便于在Android Studio的Logcat中查看。同时,了解Android权限管理,确保应用具有`WRITE_EXTERNAL_STORAGE`和`READ_EXTERNAL_STORAGE`权限,因为...

    android jni使用static变量

    本教程将深入探讨如何在Android JNI中使用静态(static)变量,以实现Java层与原生代码之间的数据共享。 首先,了解JNI的基本概念是必要的。JNI为Java应用程序提供了一个接口,可以调用本地方法(即非Java代码),...

    Android JNI日志工具类

    在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言编写的代码进行交互,特别是C++或C。JNI在处理性能敏感的计算、访问硬件特性或者利用现有C库时非常有用。然而,在JNI编程...

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

    总结起来,这个示例展示了如何在Android中使用JNI和C语言实现文件的读写操作。通过这种方式,开发者可以充分利用C语言的性能优势,同时保持Java的易用性和跨平台性。在实际项目中,这可能用于处理大量数据、加密解密...

    android jni抛出异常

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

    Android jni 编程实例

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

    android通过jni执行shell命令

    本文将深入探讨如何使用JNI在Android中执行shell命令。 首先,理解JNI的工作原理是必要的。JNI接口为Java应用程序提供了一个桥梁,使其可以直接调用本地(非Java)代码,通常是C/C++编写的库。这涉及到创建一个本地...

    Android_Jni 简单调用

    在本教程中,我们将探讨如何在Android Studio中使用CMake工具来开发JNI,实现简单的调用。 首先,让我们了解Android Studio中的CMake集成。自从Android Studio 3.0引入了CMake支持以来,开发者可以直接在Android ...

    Android JNI简单使用

    通过学习和实践这些步骤,你将能够初步掌握Android应用中使用JNI的基本操作。随着经验的增长,你可以深入学习更复杂的JNI用法,如多线程、错误处理和优化技巧,从而更好地利用C/C++的性能优势。

    Android 5.0jni调用

    2. **C++标准库支持**:从Android 5.0开始,Google引入了对C++11标准库的部分支持,这使得在JNI中使用C++代码变得更加容易,同时也提供了更丰富的编程功能。 3. **垃圾回收优化**:在旧版本中,JNI局部引用可能导致...

    android使用jni技术

    本教程将深入探讨如何在Android应用中使用JNI技术。 首先,我们需要理解JNI的工作原理。JNI提供了一种方式,使得Java代码可以调用本地(非Java)函数,同时本地代码也可以调用Java方法。这通常是通过创建本地方法...

    android之jniDemo

    在Android中,JNI的应用主要体现在提升性能、访问硬件设备以及使用已有的C/C++库等方面。 在"jniDemo"中,我们将看到以下几个关键部分: 1. **Java层**:这是Android应用的主入口,通常包含一个Java类,声明本地...

    andorid使用jni执行shell命令例子

    本文将详细介绍如何在Android应用中使用JNI来执行shell命令。 首先,我们需要理解JNI的概念。JNI是Java平台提供的一种机制,它允许Java代码和其他语言写的代码进行交互。通过JNI,我们可以在Java应用程序中调用C/...

    android jni helloword

    Android JNI(Java Native Interface)是Android系统中用于Java与C/C++代码交互的桥梁,它允许开发者在Android应用中调用本地方法,实现性能优化或者利用已有的C/C++库。"android jni helloworld"这个标题暗示我们将...

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

    在Android开发中,JNI(Java Native Interface)是一个关键的组件,允许Java代码和其他语言...理解并掌握JNI的使用,能让你在Android开发中更好地利用已有的C/C++库,提高代码效率,或者实现一些Java无法直接完成的功能。

    AndroidStudio加载jni

    Android Studio作为官方推荐的Android开发环境,集成了对NDK(Native Development Kit)的支持,使得在Android应用中使用JNI变得更加方便。现在我们来详细探讨如何在Android Studio中加载和使用JNI。 首先,我们...

    Android JNI使用demo源码

    在Android Studio中,JNI代码通常使用CMake构建。CMakeLists.txt文件是CMake的配置文件,它定义了编译目标、链接库等信息。以下是一个简单的示例: ```cmake cmake_minimum_required(VERSION 3.4.1) add_library( ...

Global site tag (gtag.js) - Google Analytics