【Android】Jni开发部署
时间:2023-01-22 21:30:00
1,环境部署
AndroidStudio(4.xxx以上版本)安装NDK、CMake插件/
2,简单示例
(1)main目录下创建jni子目录
(2)创建demo.cpp文件
注意,方法名对应native例如,方法目录com.zjw.demo目录下MainActivity#getFromJni()声明如下:
#include "demo.h" #include #include extern "C" { JNIEXPORT jstring JNICALL Java_com_zjw_demo_MainActivity_getFromJNI(JNIEnv *env, jobject obj ){ return env -> NewStringUTF("Hello,I am from JNI!"); } }
(3)创建Android.mk和Application.mk文件
这两个文件用于指定编译路径、编译平台等配置
//Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello_jni LOCAL_SRC_FILES := demo.cpp include $(BUILD_SHARED_LIBRARY) //Application.mk //空
LOCAL_MODULE是生成so库名。
(4)activity中声明native方法
System.loadLibrary()方法是生成so库libxxx后xxx,也就是之前声明的模块名
import android.os.Bundle; import android.view.View; import android.widget.Button; import com.example.myapplication.R; public class MainActivity extends AppCompatActivity { static { System.loadLibrary("hello_jni"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.demo).setOnClickListener(view -> { ((Button) findViewById(R.id.demo)).setText(getFromJNI()); }); } public native String getFromJNI(); }
(5)生成so库
切换命令行到jni目录,操作ndk-build自动生成命令so库。
如果找不到目录,请配置环境变量或ndk-build全路径输入。
自动生成jniLibs如果生成了目录libs请更名目录,否则找不到。so在各种架构平台下生成库。so库。
(6)运行
点击按钮即可获得jni返回的字符串