本文环境:
Android Studio 3.4.1
NDK 20.0.5594570
1.环境配置
下载并安装Android Studio
2.下载NDK
然后配置环境变量
最后在Project Structure里确认一下Android NDK location:
3.接下来开始创作,新建工程
在com.crimson.lz4下新建LZ4.java文件,编写代码:
package com.crimson.lz4;
public class LZ4
{
static {
public native String get();
}
}
生成.h文件:
进入java目录,执行:javah -jni [.h文件]
C:\Users\houyaosen\AndroidStudioProjects\LZ4>cd app\src\main\java
C:\Users\houyaosen\AndroidStudioProjects\LZ4\app\src\main\java>javah -jni com.crimson.lz4.LZ4
编写.c文件
.h同级目录创建.c文件:
#include "com_crimson_lz4_LZ4.h"
#include <android/log.h>
#define LOG_TAG "infoo"
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
JNIEXPORT jstring JNICALL Java_com_crimson_lz4_LZ4_get
(JNIEnv *env, jclass jc){
LOGI("hello,这里是native层");
return (*env)->NewStringUTF(env, "from c");
}
编写Android.mk
.h同级目录创建Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := LZ4
LOCAL_SRC_FILES := LZ4.c
LOCAL_LDLIBS +=-L$(SYSROOT)/usr/lib -lm -llog
include $(BUILD_SHARED_LIBRARY)
配置build.gradle
找到app/build.gradle,设置ndk和sourceSets.main如下:
android {
.... //为其它配置选项---忽略并非配置中添加...
ndk {
moduleName "BluetoothJniLibrary"
ldLibs "log"
abiFilters 'armeabi','arm64-v8a','armeabi-v7a','x86','x86_64'
}
sourceSets.main{
jni.srcDirs = []
jniLibs.srcDir "src/main/libs"
}
....//为其它配置选项---忽略并非配置中添加...
}
生成.so