c++ log 打印android_Android JNI打印c\c++日志信息

一、下载android的源码

注:

此处源码的下载、配置、编译请自行搜寻。

二、创建相关文件

1、

在/mnt/yqmiao/android_2.2_20100715/development/apps下创建工程目录JniLog

mkdir JniLog

注:

有些文档的是在/mnt/yqmiao/android_2.2_20100715/development/下创建工程目录的,我之前执行[make xxxx]是成功的,但后来失败了!通过分析源码的核心配置文件Android.xml后放在apps下却是成功的!

注:

摘录Android.xml文件

subdirs += \

...

development/apps \

...

通过以上的Android.xml文件可以看出,如果我们修改Android.xml文件也是可以实现的!

eg:

subdirs +=\

...

development\

...

2、在JniLog下创建JniLog.c文件

#include

#define LOG_TAG "------JniLog Main--------"

#undef LOG

#include

JNIEXPORT void JNICALL Java_com_myq_android_Jni_printLog(JNIEnv * env, jobject jobj)

{

LOGD("Android Jni Log test !\n");

}

注:

LOGD及#define LOG_TAG "xxx"打印log的方式采用了Android所提供的LOG机制,这样才能通过Android的logcat工具看到log信息。

3、在JniLog下创建Android.mk文件

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \

JniLog.c

LOCAL_C_INCLUDES := \

$(JNI_H_INCLUDE)

LOCAL_SHARED_LIBRARIES := \

libutils

LOCAL_PRELINK_MODULE := false

LOCAL_MODULE := libJniLog

include $(BUILD_SHARED_LIBRARY)

注:

LOCAL_MODULE := libJniLog

libJniLog前面加lib是必须的,在加载的时候只需要JniLog

eg:

static

{

System.loadLibrary("JniLog") ;

}

4、到android源代码的根目录下执行

make libJniLog

输出如下信息:

target thumb C: libJniLog <= development/apps/JniLog/JniLog.c

target SharedLib: libJniLog (out/target/product/generic/obj/SHARED_LIBRARIES/libJniLog_intermediates/LINKED/libJniLog.so)

target Non-prelinked: libJniLog (out/target/product/generic/symbols/system/lib/libJniLog.so)

target Strip: libJniLog (out/target/product/generic/obj/lib/libJniLog.so)

Install: out/target/product/generic/system/lib/libJniLog.so

可以看出:

成功make后生成out/target/product/generic/system/lib/libJniLog.so文件

那么libJniLog.so如何使用呢?

5、libJniLog.so文件使用

1)方法一

在Android工程根目录下创建目录libs/armeabi,然后将此文件拷入

2)方法二

启动Emulator后

adb remount

adb push out/target/product/generic/system/lib/libJniLog.so /system/lib

6、java测试代码

1)本地方法类

package com.myq.android;

public class Jni {

public native void printLog() ;

}

注:

包名必须是 com.myq.android.JniLog

方法名 printLog

2)测试类

package com.myq.android.jni;

import android.app.Activity;

import android.os.Bundle;

import com.myq.android.Jni;

public class Main extends Activity {

private Jni mJniLog ;

static

{

System.loadLibrary("JniLog") ;

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

this.mJniLog = new Jni() ;

this.mJniLog.printLog() ;

}

}

三、运行

adb logcat

如下结果:

D/dalvikvm(  3

80): No JNI_OnLoad found in /data/data/com.myq.android.jni/lib/libJniLog.so 0x43e16a28, skipping init

D/------JniLog Main--------(  380): Android Jni Log test !I/ActivityManager(   61): Displayed activity com.myq.android.jni/.Main: 1288 ms (total 1288 ms)

说明:

我是将libJniLog.so拷贝到工程目录/libs/armeabi下使用的

四、重点强调

1、目前我是必须放在android的源码下make的,如果单纯的放在NDK里,会报错!

究其原因是有关于Log方面的!

2、有关于libJniLog.so文件

Android.mk文件中

LOCAL_MODULE := libJniLog

在程序中加载时,如下使用方法:

static

{

System.loadLibrary("JniLog") ; //前面没有lib啊

}

3、有关libJniLog.so文件的使用方法

1)

放在设备的 /system/lib 下

2)

放在 工程目录/libs/armeabi 下

五、附件说明

附件中是我的:

1、Jni源码 --可以解压后放到$Android_Src_Root/development/apps下

2、Client测试源码 --用Eclipse直接运行,我用的是Android2.2版本的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值