Android studio下配置ndk以及利用gradle编译生成SO文件

方便以后查找做一下记录:

主要流程:

1.配置NDK->

2.编写native方法和要加载的库名->

3.生成头文件-->

4.编写C文件-->

5.配置gradle中的NDK->

6.命令生成SO库


1.首先新建一个project,然后配置NDK 路径,如下图所示进行配置



找到NDK路径,进行如下配置



这时可以查看 local.properties中的已经自动生成NDK路径,下图所示:



2.接下来在需要调用本地方法的的类文件中编写native 接口和要加载的库:

public class MainActivity extends Activity {

    static {
        System.loadLibrary("JniTest");
    }

    public native String getStringFromNative();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView view = (TextView) findViewById(R.id.textview);
        view.setText(getStringFromNative());
    }
}


3.进行构建



4.生成头文件.h

首先配置一个tools文件,名字随便起,只要自己能识别。下面的命令统一进行设置,直接进行复制即可:

$JDKPath$\bin\javah.exe

-classpath . -jni -o $ModuleFileDir$/src/main/jni/$Prompt$  $FileClass$ 

$ModuleFileDir$\src\main\java  点击保存。



然后在引用native方法的类右击-->externalTools-->你设定的tools文件:


点击输入要生成的头文件的名称,名称包含包名和类名,以下划线“-”分隔,后缀用“.h”,


构建成功后会在main下面生成一个jni文件夹,并包含一个头文件


其内容为:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_fencer_ndkapplication_MainActivity */

#ifndef _Included_com_fencer_ndkapplication_MainActivity
#define _Included_com_fencer_ndkapplication_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_fencer_ndkapplication_MainActivity
 * Method:    getStringFromNative
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_fencer_ndkapplication_MainActivity_getStringFromNative
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

5.复制头文件,放在该文件夹,后缀改为.c,然后修改内容:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
#include "com_fencer_ndkapplication_MainActivity.h"
/* Header for class com_fencer_ndkapplication_MainActivity */
/*
 * Class:     com_fencer_ndkapplication_MainActivity
 * Method:    getStringFromNative
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_fencer_ndkapplication_MainActivity_getStringFromNative
  (JNIEnv * env, jobject object){
  return (*env)->NewStringUTF(env, "this form JNI!");
  }

6.在APP的build.gradle文件defaultConfig中加入ndk的配置:

ndk {
    moduleName "JniTest"
    abiFilters "armeabi", "armeabi-v7a", "x86"
}

7.点击rebuild project 构建,成功后会在build文件夹下生成NDK 文件夹:


完成!


已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页