Android Sudio配置NDK

1、给 Android Studio 配置 NDK

File-Project Structure-SDK Location

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

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类所对应的头文件
在这里插入图片描述
进入头文件中,代码是如下这个样子:
在这里插入图片描述

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");
  }

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

5、创建Android.mkApplication.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增加了如下代码
在这里插入图片描述

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>

效果图:
在这里插入图片描述

https://blog.csdn.net/young_time/article/details/80346631

https://blog.csdn.net/Hi_Red_Beetle/article/details/78994767

https://blog.csdn.net/yao_94/article/details/79151804
https://blog.csdn.net/u011339364/article/details/83377591

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值