一直想学习 Android 的JNI 的开发,但是一直没有时间。现在抽空学习了一下,再次写个博客当个笔记。
在网上找了相关的文章以及教程,然后总结了一下,记在这里。话不多言,直接开始。
环境配置
本人使用的是Android studio ,首先是下载 NDK
点击 OK 下载
下载完成后需要配置相关路径
打开电脑的环境配置,设置 ndk 的路径
打开命令窗口 敲入 ndk-build 出现如下界面,则环境配置成功
打开Android studio 新建项目,在 local.properties 中配置ndk 路径
打开项目下的 gradle.properties 添加代码
在项目中新建一个文件 Mp3Coder.java 如下
在main下新建文件夹 jni
android.deprecatedNdkCompileLease=1517738977337
在项目中新建一个文件 Mp3Coder.java 如下
在jni文件夹下新建文件Mp3Coder.c 文件(此处的文件名 随意 只需是 .c的文件)
在新建的 .c文件中输入一下代码
#include#include#include jstring Java_com_example_mp3application_Mp3Coder_getCode(JNIEnv* env,jobject obj){ return (*env)->NewStringUTF(env,"hello hhhh"); };此处的
Java_com_example_mp3application_Mp3Coder_getCode 是与Mp3Coder.java 中的 native 方法对应的 (所有的 . 更换成 _ ) 在前面需要加上 大写的 Java在 APP 的module下的 build.gradle 中添加 ndk 节点
moduleName "Mp3Coder"moduleName 的名称需要和
在Mp3Coder.java文件中添加引用
public class Mp3Coder { { System.loadLibrary("Mp3Coder"); } public native String getCode(); }
System.loadLibrary 的名称 需要和 build.gradle 中添加 ndk 节点的名称一致
build项目
完成之后会在 app\build\intermediates\ndk\debug\lib 下面生成对于的 .so文件
运行程序之后模拟器会打印对于的文字
附上 代码
mainactivity.java
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView=(TextView)findViewById(R.id.tv_dd); textView.setText(new Mp3Coder().getCode()); } }Mp3Coder.java
public class Mp3Coder { { System.loadLibrary("Mp3Coder"); } public native String getCode(); }Mp3Coder.c
#include#include#include jstring Java_com_example_mp3application_Mp3Coder_getCode(JNIEnv* env,jobject obj){ return (*env)->NewStringUTF(env,"hello hhhh"); };如有不足之处,后续修改添加