博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Andriod学习笔记5:通过NDK在C++中实现日志输出
阅读量:5020 次
发布时间:2019-06-12

本文共 2178 字,大约阅读时间需要 7 分钟。

开发环境

  1. android studio 1.5.1

实现步骤

  1. 新建android项目

    项目名称为AndroidCLog,选择Empty Activity模板,其他默认即可。

  2. 下载配置ndk
    在项目上右键选择“Open Module Setting”,在弹出窗口中选择“SDK Location”,我们会看到Android NDK location,如果之前没有配置的话,这里会是空的。
    有两种下载方法:
    1. 点击下边的Download,由Android Studio自行下载配置安装
    2. 在下载并解压,然后再这里配置NDK的路径。
  3. 添加JNI目录

    在工程目录上右键选择New -> Folder -> JNI Folder,其他默认即可。

  4. 新建一个java类,并生成C++的头文件
    例如JNIBridge.java:
package xyz.fanqi.androidclog;public class JNIBridge {    public native static void logI(String msg);    static {        System.loadLibrary("androidclog");    }}

通过终端命令生成C++头文件

cd AndroidCLog/app/src/main/javajavah -d ../jni/  -jni xyz.fanqi.androidclog.JNIBridge

编译成功之后,在JNI目录中就可以看到C++头文件xyz_fanqi_androidclog_JNIBridge.h。

  1. 在JNI目录中创建同名C++源文件xyz_fanqi_androidclog_JNIBridge.cpp
#include "xyz_fanqi_androidclog_JNIBridge.h"#include 
#include
#define LOG_TAG "OUTPUT"#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)void Java_xyz_fanqi_androidclog_JNIBridge_logI(JNIEnv *env, jclass, jstring jstr){ const char *message=NULL; message = env->GetStringUTFChars(jstr, 0); LOGI("%s", message);}
  1. 在build.gradle(Module: app)配置文件中添加ndk配置,然后点击右上角的“sync now”同步一下。
defaultConfig {        applicationId "xyz.fanqi.androidclog"        minSdkVersion 15        targetSdkVersion 23        versionCode 1        versionName "1.0"        ndk{            moduleName "androidclog"            abiFilters "x86"            ldLibs "log"        }    }

适配多种CPU架构的方法:abiFilters 后面指定要适配的平台,例如'abiFilters "x86","armeabi"'。

  1. 在gradle.properties文件中增加一行代码:
android.useDeprecatedNdk=true

解决Error:(14, 0) Error: NDK integration is deprecated in the current plugin.的问题。

Error:(14, 0) Error: NDK integration is deprecated in the current plugin.  Consider trying the new experimental plugin.  For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental.  Set "android.useDeprecatedNdk=true" in gradle.properties to continue using the current NDK integration.Open File
  1. 在MainActivity.java中增加输出日志的代码
JNIBridge.logI("this is a log from cpp");
  1. 运行应用程序,并找到输出的日志
02-26 08:04:53.198 2507-2507/? I/OUTPUT: this is a log from cpp

转载于:https://www.cnblogs.com/imfanqi/p/5218490.html

你可能感兴趣的文章
NSEnumerator用法小结
查看>>
vim如何配置go语言环境
查看>>
机器学习好网站
查看>>
python 中的 sys , os 模块用法总结
查看>>
解题:国家集训队 Middle
查看>>
响应者链
查看>>
指针从函数内部带回返回值
查看>>
在使用webView播放flash或视频文件时无法关闭声音的问题
查看>>
redhat 7 源码安装 mysql5.5.49
查看>>
CCP浅谈
查看>>
NAT虚拟网络配置
查看>>
c#部分---需要实例化的内容;
查看>>
销售类
查看>>
技术项目,问题
查看>>
线程池总结
查看>>
Learning to rank (software, datasets)
查看>>
git常见问题
查看>>
.NETFramework:template
查看>>
HM16.0之帧内模式——xCheckRDCostIntra()函数
查看>>
Jmeter性能测试 入门
查看>>