AndroidStudio调用C方法的介绍(JNI)

今天来简单的说说自己对JNI的理解

一、创建工程(这一步大家都会吧?)

二、配置相关参数

1、引入ndk(NDK官网下载地址,需要翻墙才能下载),选中你的项目按F4,

点击ok之后,查看一下local.properties文件,如果有下图红色圈圈中的那行代码,证明配置成功

2、在gradle.properties文件最后,加入这行代码   android.useDeprecatedNdk=true


三、引入c文件:Project模式下,在main文件夹下面创建jni的文件夹,将相关的c文件放入其中,如图

三个文件的内容分别是:

Operate.h

#include <string.h>

#include <jni.h>

int add(int x, int y);
Operate.c

#include "Operate.h"

/**

 * C 实现的 加法

 */

int add(int x, int y) {

return x+y;

}
hello-jni.c

#include <string.h>
#include <jni.h>

#include "Operate.h"

jint Java_com_aaron_jnicdemo_MainActivity_add( JNIEnv* env,
                                                  jobject thiz,
                                                   jint x,jint y)
{
    return add(x,y);
}

四、在gralde里面配置如下代码(详细解释这里不说了,百度一下吧)

五、回到Android代码里面,首先上一个简单的布局


然后直接上主要的代码:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final EditText etX = (EditText) findViewById(R.id.et_x);
        final EditText etY = (EditText) findViewById(R.id.et_y);
        final TextView textView = (TextView) findViewById(R.id.tv);
        Button button = (Button) findViewById(R.id.btn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String strX = etX.getText().toString().trim();
                String strY = etY.getText().toString().trim();

                if (TextUtils.isEmpty(strX) || TextUtils.isEmpty(strY)) {
                    Toast.makeText(MainActivity.this, "输入不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                int intX = Integer.parseInt(strX);
                int intY = Integer.parseInt(strY);
                int result = add(intX, intY);
                textView.setText(String.valueOf(result));

            }
        });
    }

    public native int add(int x, int y);

    static {
        System.loadLibrary("hello-jni");
    }
}

运行 ,ok!


**注意事项:

1、主代码里面引入c的时候,名字一定不能出错

System.loadLibrary("hello-jni");

2、c里面的方法名称,必须和引用类的目录对应

	
Java_com_aaron_jnicdemo_MainActivity_add

第一部分必须是Java,第一个字母大写;

第二个部分,告诉你只能在com/aaron/jnicdemo/MainActivity里面调用;

第三个部分,为方法名


附上源码:https://github.com/yangbin-aaron/JNI_C_Demo

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值