开发环境
- android studio 1.5.1
实现步骤
新建android项目
项目名称为AndroidCLog,选择Empty Activity模板,其他默认即可。- 下载配置ndk 在项目上右键选择“Open Module Setting”,在弹出窗口中选择“SDK Location”,我们会看到Android NDK location,如果之前没有配置的话,这里会是空的。 有两种下载方法:
- 点击下边的Download,由Android Studio自行下载配置安装
- 在下载并解压,然后再这里配置NDK的路径。
添加JNI目录
在工程目录上右键选择New -> Folder -> JNI Folder,其他默认即可。- 新建一个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。
- 在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);}
- 在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"'。
- 在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
- 在MainActivity.java中增加输出日志的代码
JNIBridge.logI("this is a log from cpp");
- 运行应用程序,并找到输出的日志
02-26 08:04:53.198 2507-2507/? I/OUTPUT: this is a log from cpp