0
点赞
收藏
分享

微信扫一扫

Android Sudio配置NDK

1、给 Android Studio 配置 NDK

File-Project Structure-SDK Location

点击最下面的DownLoad按钮
Android Sudio配置NDK_Android studio
下载好之后as会自动将ndk加载到项目中,默认情况下ndk下载到了sdk所在的目录下,如下图所示
Android Sudio配置NDK_NDK_02
下载完成时候也可以通过local.properties文件查看sdk和ndk在电脑上的保存路径,local.properties文件的内容如下:
Android Sudio配置NDK_NDK_03

2、创建一个 JNITest.java 的一个类

public class JNITest {
public native static String get();
}

3、创建 .h 的头文件

打开Terminal,输入以下命令

cd app/src/main/java
javah -d ../jni com.xx.myapplication.JNITest

第一行命令就是先进入当前项目的​​app/src/main/java​​​路径下
重点介绍下第二行命令。要生成Java类对应的头文件我们就必须要用到​​​javah​​​这个命令,其次​​-d​​​表示生成一个目录。生成目录路径就是后面的​​../jni​​​。​​../​​​表示在当前目录的上一层目录,也就是​​main​​​目录了。而​​jni​​​就表示我们生成的目录的名称。所以第二行命令的作用就是在​​main​​​目录下生成JNITest类所对应的头文件
Android Sudio配置NDK_android_04
进入头文件中,代码是如下这个样子:
Android Sudio配置NDK_NDK_05

4、编写C/C++代码

在jni目录下创建test.c文件,实现头文件中的方法

#include<jni.h>
#include<stdio.h>
//导入我们创建的头文件
#include "com_xx_myapplication_JNITest.h"

JNIEXPORT jstring JNICALL Java_com_xx_myapplication_JNITest_get
(JNIEnv *env, jclass jclass){
//返回一个字符串
return (*env)->NewStringUTF(env,"This is my first NDK Application");
}

Android Sudio配置NDK_NDK_06
其中第一个注意的地方是导入我们的头文件这里,改为你自己的文件名称
第二个就是第二个画方框的地方代码是从头文件里复制过来的,就是下面的参数变了

5、​​创建Android.mk​​​、​​Application.mk​​

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := JNITest
LOCAL_SRC_FILES := test.c

# for logging
LOCAL_LDLIBS += -llog

include $(BUILD_SHARED_LIBRARY)

Android.mk文件中的LOCAL_MODULE :=JNITest指定的是生成动态库的名字,LOCAL_SRC_FILES :=test.c关联的是jni目录下的.c文件

APP_ABI := all

​​Application.mk​​:APP_ABI就是abiFilters了,所以之前我们做的配置都可以在这里写,赋值为all表明全平台生成,如果有多个用空格分开

6、编译配置

​​编译配置​​

配置好后,build.gradle增加了如下代码
Android Sudio配置NDK_java_07

7、JNITest文件加载动态库

public class JNITest {
static {
System.loadLibrary("JNITest");
}
public native static String get();
}

7、使用

MainActivity

public class MainActivity extends AppCompatActivity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this,JNITest.get(),Toast.LENGTH_SHORT).show();
}
});
}
}

activity_main

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
android:gravity="center">

<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="button"/>

</LinearLayout>

效果图:
Android Sudio配置NDK_头文件_08


举报

相关推荐

0 条评论