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
posted @ 2016-02-26 08:09  HH番茄  阅读(668)  评论(0编辑  收藏  举报