文档章节

Android studio NDK成长记录(五)将C中的Log打到Logcat

风哲
 风哲
发布于 2017/02/06 16:03
字数 399
阅读 78
收藏 0

在Android studio中编写C代码时,如果想用printf()方法打印log进行调试,正常情况下不能像VS2015那样或者像Android中那样打印到logcat上,所以需要一定的配置对ndk-bundle\platforms\android-16\arch-arm\usr\lib中的liblog.so进行调用来打印log。
具体方法如下:下面的代码不能直接全抄,谨慎抄写!

  1. 需要在c源文件所在module中的build.gradle中配置libLog属性
    android {
        compileSdkVersion 25
        buildToolsVersion "25.0.0"
    
        defaultConfig {
            minSdkVersion 15
            targetSdkVersion 25
            versionCode 1
            versionName "1.0"
    
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    
            ndk {
                //配置该属性用于在C源文件中打印logstudio的控制台              
                ldLibs "log"     
            
                //该属性为生成的so库的名字为lib+'moduleName'+.so
                moduleName "native_jni"
            }
    
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
        externalNativeBuild {
            ndkBuild {
                path 'Android.mk'
            }
        }
    }
  2. 在C源文件中进行如下定义和导库
    //需要导入log.h这个库
    #include <android/log.h> 
    
    //定义Log标志
    #define LOG_TAG "Dragon_C"
    
    //定义宏,打印的方法是在log.h中,调用log.h中对应的方法来打log,logD对应log.d,logI对应log.i,logE对应log.e 
    #define LogD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
    #define LogI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
    #define LogE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
    
    JNIEXPORT jint JNICALL Java_com_picovr_javacall_NativeMethord_addNumberCallback
            (JNIEnv *env, jobject jobj) {
    
        //1.得到字节码
        //jclass      (*FindClass)(JNIEnv*, const char*);
        jclass jclass1 = (*env)->FindClass(env, "com/picovr/javacall/NativeMethord");
    
        //2.得到方法ID
        //jmethodID   (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
        jmethodID jmethodID1 = (*env)->GetMethodID(env, jclass1, "add_number",
                                                   "(II)I");//倒数第一个参数:方法签名,倒数第二个参数:方法名
    
        //3.实例化类
        //jobject     (*AllocObject)(JNIEnv*, jclass);
        jobject jobject1 = (*env)->AllocObject(env, jclass1);
    
        //调用方法
        //jint        (*CallIntMethod)(JNIEnv*, jobject, jmethodID, ...);
        jint result = (*env)->CallIntMethod(env, jobject1, jmethodID1, 20, 30);
        LogI("result :%d", result);
    }

© 著作权归作者所有

风哲
粉丝 0
博文 13
码字总数 12513
作品 0
海淀
私信 提问
Android Studio NDK开发(八):文件的拆分与合并

前言 通过前面的学习,相信大家对基本的JNI流程已经有不错的认知了。如果还是有问题,可以看之前的博客。 Android Studio NDK开发(一):准备工作(CMake方式) Android Studio NDK开发(二...

浮生若梦zp
2017/11/30
0
0
Android NDK :在 C语言代码中输出Log

Android NDK :在 C语言代码中输出Log 本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2012-07/66106.htmAndroid NDK 开发时,想要在 .c 文件中打...

zhangyujsj
2014/03/16
0
0
Android Studio 使用NDK开发

Android Studio 使用NDK编程 使用Android Studio有半年多了,感觉很好用,不就感觉费劲的就是NDK的支持一直不是很好,再Bate版的时候好像0.4.x之前可以使用NDK,当然本身Android Studio本身是...

HaidyCao
2014/12/21
0
17
Windows环境下Android Studio系列5—日志调试

定制Logcat调试日志字体颜色 Logcat是Android开发调试中最常用的一个工具,Android Studio 1.2.2中默认对Logcat调试的颜色已经有所区分,但如果你想要定制自己的调试日志对应的字体颜色,以便...

一配
2015/07/15
0
1
Android JNI学习(二)——实战JNI之“hello world”

本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Native相互调用 Android JNI学习(四)——JNI的常用方法...

隔壁老李头
2018/05/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

任务调度-单体应用定时任务解决方案

1. 应用场景: 单体应用(并发少、就公司内部使用)、业务比较简单、单一、稳定,传统行业首选,项目初期。 2. 主要方式: Spring XML配置方式,timer。 <bean id="cycleBonusTimer" class="...

秋日芒草
31分钟前
3
0
EditText中singleLine过期替代方法

android:lines="1" android:inputType="text"

球球
45分钟前
1
0
删除 Tomcat-webapps 目录自带项目

本文将 %CATALINA_HOME% 目录称为“tomcat”目录。 1.webapps目录中的项目 在 Tomcat 8.0 的 tomcat/webapps 目录中,含有 5 个 Tomcat 自带的 Web 项目,如下所示: docs 有关于 Tomcat 的介...

Airship
49分钟前
3
0
好文:华杉:我等用功,不求日增,但求日减。减一分人欲,则增一分天理,这是何等简易!何等洒脱!

#写在前面1.怎么理解“减一分人欲,则增一分天理,这是何等简易!”?1)华杉提倡 “一劳永逸” 排除浪费,少干活,多赚钱,一战而定,降低作业成本。2)华杉提倡学海无涯,回头是岸...

阿锋zxf
59分钟前
3
0
vue 的bus总线

bus声明 global.bus = new Vue() 事件发送 controlTabbar () {global.bus.$emit('pickUp', 'ddd')}, 事件接收 global.bus.$on('pickUp', (res) => {this.isFocus = true})......

Js_Mei
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部