android jni 开发 第一章

一直想学习 Android 的JNI 的开发,但是一直没有时间。现在抽空学习了一下,再次写个博客当个笔记。

在网上找了相关的文章以及教程,然后总结了一下,记在这里。话不多言,直接开始。

环境配置

本人使用的是Android studio ,首先是下载 NDK

android jni 开发 第一章
点击 OK 下载
下载完成后需要配置相关路径
android jni 开发 第一章
打开电脑的环境配置,设置 ndk 的路径
android jni 开发 第一章
打开命令窗口 敲入 ndk-build 出现如下界面,则环境配置成功

android jni 开发 第一章
打开Android studio 新建项目,在 local.properties 中配置ndk 路径
android jni 开发 第一章
打开项目下的 gradle.properties 添加代码
android.deprecatedNdkCompileLease=1517738977337
android jni 开发 第一章
在项目中新建一个文件 Mp3Coder.java 如下
android jni 开发 第一章
在main下新建文件夹 jni

android jni 开发 第一章

在jni文件夹下新建文件Mp3Coder.c 文件(此处的文件名 随意 只需是 .c的文件)

android jni 开发 第一章

在新建的 .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 节点

android jni 开发 第一章

moduleName "Mp3Coder"
moduleName 的名称需要和 android jni 开发 第一章文件名称一致。

在Mp3Coder.java文件中添加引用

public class Mp3Coder {

    {
        System.loadLibrary("Mp3Coder");
    }

    public native String getCode();
}
System.loadLibrary 的名称 需要和 build.gradle 中添加 ndk 节点的名称一致

build项目

android jni 开发 第一章

完成之后会在 app\build\intermediates\ndk\debug\lib 下面生成对于的 .so文件

android jni 开发 第一章

运行程序之后模拟器会打印对于的文字

android jni 开发 第一章

附上 代码

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");
};
如有不足之处,后续修改添加