Android Studio 生成so库 第二篇
Android Studio 生成so库 第三篇
Android studio中配置NDK环境
---------------- Android studio中安装NDK----------------

如果在这个过程中,你发现SDK Tools中根本没有NDK的选项,那么我们这样操作,即可!如图:

到这里,你的NDK环境就差不多了,
Android studio中创建一个工程
1.---------------- 新建一个JniTest类,增加native方法----------------
public class JniTest {
// 加载demoCPP名称的 so库
static {
System.loadLibrary("demoCPP");
}
public native String getStringFromNative(String str);
}
2.---------------- 打开Terminal----------------

3.---------------- 右键 选中Java目录 按住不放 拖到Terminal----------------

4.----------------通过Terminal输入命令生成头文件(.h文件),生成对应头文件名称:包名+类名----------------
//javah -jni 包名+类名
javah -jni com.test.testjni.JniTest

如果这个时候你发现javah不是内部方法,那么肯定是你的Jdk环境配置的有问题,先去配置环境,再继续搞
5.----------------在与java同级 创建jni文件夹----------------

6.----------------jni文件夹中创建C++文件.cpp,将刚刚生成的.h文件内容拷贝到.cpp文件中并实现----------------
#include <jni.h>
#ifndef _Included_com_test_testjni_JniTest
#define _Included_com_test_testjni_JniTest
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_test_testjni_JniTest
* Method: getStringFromNative
* Signature: (Ljava/lang/String;)Ljava/lang/String;
* 具体实现,接收传入的参数并且返回
*/
JNIEXPORT jstring JNICALL Java_com_test_testjni_JniTest_getStringFromNative
(JNIEnv *env, jobject obj, jstring str) {
const char *strAry = (env)->GetStringUTFChars(str, 0);
return (env)->NewStringUTF(strAry);
}
#ifdef __cplusplus
}
#endif
#endif
7.----------------jni文件夹中创建Android.mk文件和Application.mk文件----------------
Android.mk
NDK编译生成的动态库会有四个CPU平台:arm64-v8a、armeabi-v7a、x86、x86_64。
LOCAL_MODULE := demoCPP ----你想要的so库名称
LOCAL_SRC_FILES := demo.cpp ----上面刚刚创建的.cpp
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := demoCPP
LOCAL_SRC_FILES := demo.cpp
include $(BUILD_SHARED_LIBRARY)
Application.mk
会生成各个CPU平台下的动态库
APP_ABI := all ----生成的所有
APP_ABI := all
在app的build.gradle中配置
externalNativeBuild {
ndkBuild {
path "src/main/jni/Android.mk"
}
}
8.----------------执行clean project,然后执行Rebuild project 生成so库----------------

9.----------------代码中调用so库----------------
TextView tv=findViewById(R.id.txt001);
tv.setText(new JniTest().getStringFromNative("你好呀"));
网友评论