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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章