android开发之NDK配置开发

news/2024/5/20 4:12:37 标签: android, gradle, NDK

1、打开项目后,一次点击Tools>SDK Manager
2、点击SDK Tools标签页
3、选中NDK(Side by Side)和CMake复选框
在这里插入图片描述
4、点击OK
此时系统会显示一个对话框,告诉你NDK软件包占用了多少磁盘空间
5、点击OK
6、安装完成后,点击finish
7、您的项目会同步build文件并执行构建,修改构建过程中所有的错误
如果您想要使用SDK管理器未包含的CMake版本,请按以下步骤操作:
1、从CMake官方网站下载并安装CMake
2、在模块的build.gradle文件中指定您想要让gradle使用的CMake版本
3、将CMake的安装路径添加到PATH环境变量,或将其添加到项目的local.properties文件中,如下所示。如果Gradle找不到您在build.gradle文件中指定的CMake版本,就会出现构建错误。

If you set this property, Gradle no longer uses PATH to find CMake.
cmake.dir = “path-to-cmake”

4.可以不安装,如果您尚未在工作站上安装Ninja构建系统,请访问Ninja官网 ,然后下载并安装适用于您的操作系统最新版Ninja。此外,请务必将Ninja的安装路径也添加到PATH环境变量。
5、在local.properties的文件添加NDK的路径和SDK的路径

sdk.dir=C:\Users\admin\AppData\Local\Android\Sdk
ndk.dir=C:\Users\admin\AppData\Local\Android\Sdk\ndk

6、在Project Structure配置SDK和NDK的路径
在这里插入图片描述
7、配置gradle.properties文件,输入图中红色框内的内容
在这里插入图片描述
8、在build.gradle文件中ndk的模块
在这里插入图片描述
9、指定android编译中c代码不用gradler编译,jniLib的库的加载目录
在这里插入图片描述
10、目录的结构如图
10
Application.mk和Android.mk

//Application.mk
APP_STL := c++_static
APP_CPPFLAGS := -frtti -fexceptions -std=c++0x
APP_ABI := arm64-v8a
APP_PLATFORM := android-19

//Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := playMusic
LOCAL_SRC_FILES := playMusic.so
include $(PREBUILT_SHARED_LIBRARY)
//上面的部分是指引用第三方so的配置
include $(CLEAR_VARS)
LOCAL_MODULE := tinyplayJni
LOCAL_SRC_FILES := com_aac_richtap_PlayMusic.cpp
LOCAL_LDLIBS += -llog
LOCAL_SHARED_LIBRARIES := playMusic
LOCAL_EXPORT_C_INCLUDES := src/main/jni
include $(BUILD_SHARED_LIBRARY)

11、以上配置完成后
在Terminal终端输入ndk-build 出现下图所示就表示成功了
在这里插入图片描述
12、最后一步就是使用System.loadLibrary将so加载到java代码

public class PlayMusic {

    public static native void setDeviceAndCard(int card,int device);

    public static native void playMusicByName(String name);

    static {
        System.loadLibrary("tinyplayJni");
    }
}
//在需要的activity中调用
 PlayMusic music = new PlayMusic();

        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                music.setDeviceAndCard(3,0);
                Log.d("Main", "onClick: ");
            }
        });

最后留言:为了直接将java文件编译成jni的头文件可以在配置以上的环境之后使用
输入命令javah -jni com.example.mr5.jnidemo.JniUtil --------包名+类名

如果报找不到该类的错误,用javah -classpath . -jni com.example.mr5.jnidemo.JniUtil。


http://www.niftyadmin.cn/n/384051.html

相关文章

NPM 制作命令行工具 - 进阶辅助库

一、简介 通过 NPM 制作命令行工具 - 入门案例 已经基本知道如何制作命令行工具了,现在就是内部命令处理。 如果不使用第三方插件辅助,那就只能对传入的参数进行一个一个判断处理,添加注释,这是很麻烦的,所以&#xf…

调整直线导轨间隙有什么方法?

直线导轨作为机械行业中非常重要的传动部件,应用范围当然相当广泛,尤其是自动化设备,基本上我们都能看到它的作用。 在机械行业待得久的人都知道,直线导轨在使用的过程中,为了保证直线导轨的正常工作,直线导…

1166 Summit(47行代码+超详细注释)

分数 25 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 A summit (峰会) is a meeting of heads of state or government. Arranging the rest areas for the summit is not a simple job. The ideal arrangement of one area is to invite those heads so that everyon…

cplex基础入门(一)

这边文章会以纯新手小白的视角,教会大家如何快速的搭建自己的cplex模型,做到求解模型不求人。 目录 一、引言 1、掌握数据类型及数据结构 2、常规Cplex编程方法 3、Cplex编程步骤 4、cplex 程序框架 5、创建模型 二、规划建模的入门求解案例 1、…

chatgpt赋能python:Python为什么出现多个语句?

Python为什么出现多个语句? 在Python中,同一行代码可以包含多个语句,这是Python与其他编程语言不同之处之一。那么,为什么Python出现了多个语句呢? 1. 简洁性 Python是一种高级编程语言,可以通过更少的代…

国内版Office 365 E3到E1降级方案

目录 文章目录 前言 一、什么是Office 365 E3和E1? 二、为什么需要Office 365 E3到E1降级? 三、Office 365 E3到E1降级的操作步骤 四、Office 365 E3到E1降级的注意事项 总结 前言 本篇文章将会介绍国内版Office 365 E3到E1降级方案,…

软考A计划-电子商务设计师-电子商务基础知识

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

php Nginx服务器占满

解决方案 PHP FastCGI Process Manager (PHP-FPM) 和 Nginx 是一种常见的服务器架构方案,如果您的 PHP-FPM 进程在投流期间遇到高并发请求(如 300000 个请求),会导致服务器 CPU 占用过高。 以下是一些可能的解决方案: 1.增加服务器的硬件资源。例如,升级使用更好的 CPU…