zoukankan      html  css  js  c++  java
  • Andriod学习笔记5:通过NDK在C++中实现日志输出

    开发环境

    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/java
    javah -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 <android/log.h>
    #include <stdio.h>
    #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.
    <a href="openFile:/Users/fanqi/AndroidStudioProjects/AndroidCLog/app/build.gradle">Open File</a>
    
    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
    
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 阮小二买彩票
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 企业奖金发放
    Java实现 蓝桥杯VIP 算法提高 企业奖金发放
    让程序后台隐藏运行
    只要你喜欢,并且可以养家糊口,就是好的
  • 原文地址:https://www.cnblogs.com/imfanqi/p/5218490.html
Copyright © 2011-2022 走看看