为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Android

下面我介绍下JNI层的log打印方法的使用,类似与Android sdk提供的log

1、Android 应用层 MainActivity.java
主要功能代码

a)        静态载入 So 库

b)       声明本地方法

c)        调用本地方法

代码附有注释如下:

public classMainActivity extends Activity {

//也就是你mk配置文件中的  LOCAL_MODULE    := NDK_02

private static final String libSoName ="NDK_02";

private Context mContext = null;

private Button btnClick = null;

private String mStrMSG = null;

private EditText etContext = null;

/** Called when the activity is firstcreated. */@Overridepublic void onCreate(BundlesavedInstanceState) {    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    mContext = this;

    etContext =(EditText)findViewById(R.id.et_content);

    btnClick = (Button) findViewById(R.id.btn_click);

    btnClick.setOnClickListener(newOnClickListener() {          

           public void onClick(View v) {

                  mStrMSG =setParamToJNI(getContent());                  if(mStrMSG == null) {

                         mStrMSG = "调用JNI失败";

                  }

                  LogUtils.toastMessage(mContext,mStrMSG);

           }

    });

   

}/**

 * 获取输入框内容

 * @return 输入框内容

 */private String getContent() {

Stringstr = etContext.getText().toString();

returnstr.trim().length() > 0 ? str:"default value";

}/**

 * 该方法为native方法.

 *

 *    由C实现

 *

 * @return

 */public native String  setParamToJNI(String msg);/**

 * 载入JNI生成的so库文件

 */static {

    System.loadLibrary(libSoName);

}

2、Android.mk 文件的配置
之前有介绍过相关的内容,如果对配置有不清晰的地方请阅读 Android.mk 文件 简介

LOCAL_PATH :=$(call my-dir)

include$(CLEAR_VARS)

LOCAL_C_INCLUDES:= $(LOCAL_PATH)/include

LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog

LOCAL_MODULE    := NDK_02

LOCAL_SRC_FILES:= \

PrintLog.c

include$(BUILD_SHARED_LIBRARY)

要打印log 必须添加

LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog

3、JNI层PrintLog.c文件的实现

include <string.h>

include<android/log.h>

include <jni.h>

jstringJava_com_duicky_MainActivity_setParamToJNI(JNIEnv* env, jobject thiz,

          jstringmsg)

{

   if(msg == NULL) {          //该方法为打印的方法

          __android_log_print(ANDROID_LOG_INFO, "JNIMsg","Your params is null");          return(*env)->NewStringUTF(env, "Your params is null");

   }



   chardata[128];   memset(data,0, sizeof(data));   char*c_msg = NULL;

   c_msg= (*env)->GetStringUTFChars(env, msg, 0);   //该方法为打印的方法

   __android_log_print(ANDROID_LOG_INFO,"JNIMsg", "Get Param:  %s From Java", c_msg);   return(*env)->NewStringUTF(env, "success");

}

i、              必须引用头文件#include <android/log.h>

ii、            __android_log_print(ANDROID_LOG_INFO,"JNIMsg", " Log Content ");

JNIMsg 为 你想输出到的过滤标签

Log Content 为你 想输出的相关信息,用法与C的Printf一样

4、运行程序
输入内容

webp

点击发送

查看控制台打印信息

webp



作者:Android高级架构探索
链接:https://www.jianshu.com/p/8e6ec09e87c4



点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消