Android studio 3版本编译Gradle3.0 JNI的.so工程

Android Studio OpenCV环境的简单搭建 简单?绝知此事要躬行! 现在回头看非常简单,但真正把它做好却很难。虽然网上都有相关的资源,但由于日期久了,而且版本不一样,导致按部就班不一定能成功,甚至有一些细节抠起来真是蛋疼,今天折磨了一个上午终于搭建好了。为了以后省点心,还是纪录一下~ 解决问题的过程是艰难的,但也是锻炼能力的好事。 因为主要以java为主开发Android,所以对于C/C++开发也就少了,所以为了效率,搭建好符合自己开 阅读详情

Android Studio 3版本以上已经不再支持android.useDeprecatedNdk,这是我看过的比较细致的一篇文章,文章原址:

https://blog.youkuaiyun.com/gd6321374/article/details/78996339

一、最近更新Android studio 到3.0 版本,发现编写jni 时,报错了,错误如下:

Error:Execution failed for task ':app:compileDebugNdk'.
> Error: Flag android.useDeprecatedNdk is no longer supported and will be removed in the next version of Android Studio. Please switch to a supported build system.
 Consider using CMake or ndk-build integration. For more information, go to:
  https://d.android.com/r/studio-ui/add-native-code.html#ndkCompile
  To get started, you can use the sample ndk-build script the Android
  plugin generated for you at:
  /Users/apple/Desktop/AndroidJNITest/app/build/intermediates/ndk/debug/Android.mk
 Alternatively, you can use the experimental plugin:
  https://developer.android.com/r/tools/experimental-plugin.html
 To continue using the deprecated NDK compile for another 60 days, set 
 android.deprecatedNdkCompileLease=1512283120054 in gradle.properties

找到了很久,都是按照以前的方法编写和配置,应该还不会错,结果仔细查看,3.0版本的android studio 不支持

android.useDeprecatedNdk

这种方式配置ndk,错误提示使用CMake 或则另外一种方式,上网找了一下,大多都是使用CMake 方式。

 

因此,写这个文章记录下来。

二、概念普及一下

1、我们先将写好的C/C++代码编译成对应平台的动态库(windows是.dll文件,linux是.so文件)。

2、下面我们来举个栗子:使用AndroidStudio来实现JNI

3、要实现JNI先下载NDK,那么NDK又是什么呢?(面试宝典来了,赶紧掏出小本本)

  1. NDK是一系列工具的集合
  2. NDK提供了一份稳定、功能有限的API头文件声明
  3. NDK的发布,使“Java+C”的开发方式终于转正,成为官方支持的开发方式
  4. NDK将使Android平台支持C开发的开端

三、举个例子,(编写android 串口库)

1、工具:Android studio3.0 

2、新建工程

2.1 在src\main\java\chenxi\com 包下创建serialportjni 包

2.2 将Serialport类拷贝到serialportjni包下面,如图

2.3 使用javah 命令生成.h头文件

2.3.1 确认当前系统已经安装相应的JDK,并且在windows 控制台使用java -version 查看是否配置好相关的环境变量。

2.3.2 在android studio 打开控制台到相应工程目录下

* javah 
* javah native方法声明的java类的全类名 

2.3.3 生成头文件

 

javah -classpath . -jni chenxi.com.serialportjni.SerialPort


 

2.4 创建jni目录,将相应的接口 xx.h文件复制到jni目录下,并且创建同名.c文件

2.5 编写相应的接口函数

三、接下来编译库文件,上面一开始提到,android studio 3.0在gradle3.0 不支持android.useDeprecatedNdk.

3.1 上网看,发现需要使用CMake, 因此需要下载CMake 和 LLDB

3.2 在工程目录下的build.gradle的defaultConfig节点中加入

// 使用Cmake工具
    externalNativeBuild {
      cmake {
        cppFlags ""
        //生成多个版本的so文件
        abiFilters 'arm64-v8a','armeabi-v7a','x86','x86_64'
      }
    }

3.3 在build.gradle的android节点中,加入:

// 配置CMakeLists.txt路径
  externalNativeBuild {
    cmake {
      path "CMakeLists.txt"  // 设置所要编写的c源码位置,以及编译后so文件的名字
    }
  }


3.4 添加CMakeLists.txt文件到build.gradle文件同级目录下,具体内容如下:


3.5 复制如下文本

# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html
 
# Sets the minimum version of CMake required to build the native library.
#CMakeLists.txt
cmake_minimum_required(VERSION 3.4.1)
 
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.
 
add_library( # Sets the name of the library.
      # 设置so文件名称.
       serial_port
 
       # Sets the library as a shared library.
       SHARED
       # 设置这个so文件为共享.
 
       # Provides a relative path to your source file(s).
       # 设置这个so文件为共享.
       src/main/jni/chenxi_com_serialportjni_SerialPort.c)
 
# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.
 
find_library( # Sets the name of the path variable.
       log-lib
 
       # Specifies the name of the NDK library that
       # you want CMake to locate.
       log )
 
# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.
 
target_link_libraries( # Specifies the target library.
            # 制定目标库.
            serial_port
 
            # Links the target library to the log library
            # included in the NDK.
            ${log-lib} )

3.6 点击菜单“Build - Make project”

最后,借用大神一句原话:

至此,我们所有的流程都做完了,下面来检查一下我们的成果,见证奇迹的时候到了:

OK, 记录到此为止。

安卓 jni 开发 —— Android Studio 打包 so 的坑 阅读详情

相关推荐

Android studio调用第三方so文件(成功)

踩了很多坑,走了很长的路,网上各种各样的说法把我整得晕头转向,最终还是成功了,这里自己总结一下,也顺便分享有需要的伙伴。 如何利用ndk编译我这里就不说了。在linux中进行ndk编译:https://blog.csdn.net/FZeroTHero/article/details/89308312 在Android studio中ndk编译:https://blog.csdn.net/FZero...

FZeroTHero的博客 7173

Android 发出警告 android.useDeprecatedNdk 不在被支持

WARNING: The following project options are deprecated and have been removed: android.useDeprecatedNdk NdkCompile is no longer supported Affected Modules: app 这种情况是android.useDeprecatedNdk不再被支持使用 改为使用...

qq_42795723的博客 1万+

Android studio Gradle使用NDK 示例Speex

Android studio Gradle使用NDK 示例Speex 安装NDK,注意要android stdio 1.5的版本以上才支持NDK,我当前的版本为 点击设置中心下载NDK 我下载的是12.1版本的 下载成功自动安装后: 如果新的工程local.properties目录下会有NDK的目录路径 注意这个NDK安装好后其目录在SDK目录下的ndk-bundle目录下,与以往的不同。

u013217757的博客 2678

android.useDeprecatedNdk 不在被支持使用

WARNING:   The option ‘android.useDeprecatedNdk’ is deprecated. The current default is ‘false’. It has been removed from the current version of the Android Gradle plugin. NdkCompile is no longer supported Affected Modules: app 原因:android. useDeprecatedNdk

cimbala的博客 1万+

android studio3导入opencv4人脸识别例程安卓项目工程

参考基于android studio开发的 opencv关于android人脸识别的DEMO 前言 /build/core/add-application.mk:178: *** Android NDK: APP_STL gnustl_shared is no longer supported. Please switch to either c++_static or c++_shared....

firing00的博客 2702

Android Studio + NDK JNI调用openCV图像处理

本文介绍如何通过android studio通过jni调用openCV,不使用Opencv Manager,使用静态编译openCV的方式,生成单独的一个so文件。 可先看上篇文章http://blog.csdn.net/cheng20150809/article/details/51348420,AndroidStudio基本的JNI编程。 1、新建一个空的Activity工程,添加Add-

cheng20150809的博客 5898

Android Gradle 插件问题:The option ‘android.useDeprecatedNdk‘ is deprecated.

Android Gradle 插件问题:The option 'android.useDeprecatedNdk' is deprecated.

weixin_52173250的博客 946

Android Studio如何在项目中使用jni以及OpenCV库

Android Studio如何在项目中使用jni以及OpenCV库由于公司这一个项目是将之前运行在Linux上的代码移植到Android上,所以需要学习使用jni将原来的C++代码打包成so库,然后在Android调用,本人百度、Google了许多资料,终于搞定了,分享给各位需要使用jni的程序猿们,好了,废话不多说,开始搞起。在开始配置前,大家需要下载Android Studio(以下简称AS)

KevinLxy的博客 5644

Android studio 3.0 and Gradle3.0 JNI

一、最近更新Android studio 到3.0 版本,发现编写jni 时,报错了,错误如下: Error:Execution failed for task ':app:compileDebugNdk'. > Error: Flag android.useDeprecatedNdk is no longer supported and will be removed in the next

gd6321374的专栏 3071

高阶玩法——Dify生成的数据自动写入mysql数据库

采用自定义工具方式,利用 python编写一个服务sql_save_post,将接收到的内容写入指定数据库的表中,并为该服务撰写一个 OpenAPI 的 schema。配置工作流:我们以写入天气预报为例,在生成天气预报内容后,连接自定义工具“sql_save_post”,将所需的字段配置完成后,实现将生成的内容自动写入mysql数据库中。编写OpenAPI的schema:在dify平台的工具栏目,创建自定义工具,输入工具名称“sql_save_post”。工具:sql_save_post;

qq_44493378的博客 8539

MVSNet (pytorch版) 搭建环境 运行dtu数据集重建 实操教程(图文并茂、超详细)

MVSNet (pytorch版) 代码注释版 下载 (注释非常详细,代码结构有所调整,使用起来更方便) 深度学习三维重建 MVSNet-ECCV-2018 (源码、pytorch版、原文+注释、译文+批注)Meshlab查看三维点云时 ,使用技巧总结。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 2938

Error: Flag android.useDeprecatedNdk is no longer supported and will be removed in the next version

Error: Flag android.useDeprecatedNdk is no longer supported and will be removed in the next version of Android Studio. Please switch to a supported build system. Consider using CMake or ndk-build int...

guchuanhang的专栏 5898

基于BEV(鸟瞰图)的3D检测:PointPillars与CenterPoint

基于BEV(鸟瞰图)的3D检测:PointPillars与CenterPoint​ ,人工智能,计算机视觉,大模型,AI,本文围绕基于BEV的3D检测,解析了PointPillars与CenterPoint两种算法。PointPillars用点柱特征编码网络处理点云,通过2D卷积网络提取特征,检测头为解耦头;CenterPoint将三维物体表为点,分两阶段检测,先找中心点及属性,再细化预测。两者都可借特定骨干网生成BEV特征图且基于BEV检测,但检测头设计和物体表示方式不同。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 27万+

Android Studio引入ndk编译的so库, 通过jni给Java程序使用

工作要求将一个C++老项目的函数用ndk打包成库给安卓同事的java程序调用。自己之前从来没接触过安卓开发,问了老板为什么不让安卓开发来干,老板说安卓开发不懂c++,公司就我一个是懂c++的。。。项目开发年限超过十年,只在32位系统编译过,一些32位可以通过的代码到了64位就不行了,很多的库多少有些兼容问题项目开发环境全程断网,给开发带来诸多不便NDK:Native Development Kit,是 Android 的一个工具开发包。

Tracker647的博客 2043

基于YOLOv11的建筑图纸物体检测系统设计与实现

包含多种建筑平面图,标注了墙体、门窗等元素:CAD格式的建筑图纸数据集:专门针对建筑元素的标注数据集自定义数据集:使用LabelImg等工具自行标注的建筑图纸本文以FloorPlanDataset为基础,结合部分自定义标注数据构建混合数据集。wall (墙体)door (门)window (窗)stair (楼梯)furniture (家具)text (文字标注)dimension (尺寸标注)column (柱子)

YOLO 536

药物吸收仿真软件:Caco-2_(9).Caco-2模型在药物开发中的案例分析

通过以上五个案例,我们可以看到Caco-2模型在药物开发中的重要作用。它不仅能够帮助我们预测药物的肠道吸收情况,还能够用于优化药物配方、评估代谢稳定性、研究药物相互作用以及转运蛋白的影响。这些体外实验和仿真分析的结果为药物的进一步临床研究提供了重要的参考依据,有助于缩短药物开发周期,提高研发效率。

kkchenjj的博客 863

android studio jni 调用 第三方 非标准 so库

文章目录1、简介2、先编译出一个第三方非标准so库1)android studio 新创建一个项目2) main 新创建 jni 文件夹3) 新建 .cpp 文件和 .h 实现 求和功能4)、编写 CMakeLists.txt 用来编译 cpp 文件到so5)配置编译环境6)、编译第三方 非标准 库3、新项目 引用第三方 so 库1)新建 android studio 项目2)新建 java 类,封装想要调用的接口函数3)Main 文件夹新建 jniLibs 文件夹4)创建 对应的 jni java 类

Venus 的博客 5283

QMK固件OLED显示屏配置教程:从零开始实现个性化键盘显示(实操部分)

本教程详细介绍了如何从零开始配置QMK固件的OLED显示屏,实现个性化键盘显示。首先,文章解释了OLED显示屏的基本概念及其在键盘中的应用,并介绍了I2C和SPI两种通信方式。接着,教程逐步指导用户如何在QMK固件中启用OLED功能,包括在rules.mk中启用OLED、在halconf.h和mcuconf.h中配置I2C功能,以及在config.h中设置I2C和OLED参数。最后,教程展示了如何在keymap.c中编写代码,实现OLED显示内容,并提供了进阶定制功能,如显示当前层信息、按键状态和QMK L

Despacito0o的博客 578

Android Studio CMakeList编译JNI

1. 准备工作 下载NDK,CMake、LLDB工具 准备工作注意两个坑 下载NDK后可能会报缺少 mips64el-linux-android-4.9 文件,需要去官网重新下载一份android-ndk-r16b版本NDK,解压后 将里面的上述文件copy到你的NDK文件夹里,如下图: 下载Cmake记得选择3.6版本,目前博主AS3.0.1,下载3.10会报错,记得下面NDK也需要勾选,不...

guojiayuan002的博客 1021

Windows 11 WSL2环境下OpenClaw部署的兼容性问题分析与解决方案研究

本文研究了OpenClaw在Windows 11 WSL2环境下的部署方案。WSL2通过无缝集成Linux与Windows系统,为OpenClaw提供了良好的运行环境,支持GPU加速和跨平台开发。文章详细分析了硬件配置要求(推荐8核CPU/16GB内存/NVMe SSD)、系统选择(Windows 11 Pro+Ubuntu 22.04)以及部署步骤,包括WSL2启用、Linux发行版安装、Python/Node.js/Redis等依赖配置。通过优化.wslconfig文件参数(如内存分

博客 2279

【1】Python交叉编译到OpenHarmony标准系统运行(arm32位)

本文介绍如何Python语言如何在OpenHarmony标准系统运行,包括5.0r和4.1r以及4.0r,和未来版本的OpenHarmony版本上。 Python语言在OpenHarmony上使用,需要将Python解释器CPython移植到OpenHarmony标准系统。通过交叉编译的方式。

weixin_58069108的博客 927

android studio jni gradle,Android Studio-Gradle项目中添加JNI生成文件(.so文件)

刚开始接触安卓,脑袋有些大,最近在项目中,遇到一个问题,就是studio进行jni ndk编译时,找不到动态链接库,建议大家在android.mk文件中,添加-L指定一下库的路径即可解决! 对于从Eclipse迁移项目到Android Studio中添加.jar文件和.so文件无疑是一件很重要也是很头疼的问题!在最新版本中,默认是自动打包libs下面的所有.jar文件的,所以jar不用多讲了。加入...

weixin_31485197的博客 403

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

android studio jni gradle,详解AndroidStudio JNI +Gradle3.0以上JNI爬坑之旅

1.首先什么是jni呢?jni——(java native interface),他是java平台的特性,不是安卓系统提供的。他定义了一些jni函数,来让开发者可以通过调用这些函数来实现java代码调用c/c++代码。2.如何使用jni呢?我们先将写好的c/c++代码编译成对应平台的动态库(windows是.dll文件,linux是.so文件)。下面我们来举个栗子:使用androidstudio来...

weixin_42131439的博客 580

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android studio中正确引入so文件的方法

相信很多朋友在使用Android studio开发中,遇到过如何引入第三方so文件的问题,然而第三方官方仅仅给出了ADT环境下的集成方式。 Android studio中默认使用的是gradle编译方式,与ADT编辑方式不一样,那么so文件应当如何引入呢? 其实很简单。这里以集成JPUSH为例,看一下so文件如何引入到编译环境,最终到JNI直接可以调用该so文件。 首先,在我

WILLIAM-HUAN 个人技术博客 17万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

android studio里gradle3.0以上实现jni调用

gradle3.0以上进行jni调用的时候和之前的版本会略有不同 首先第一步: 首先新建一个工程, 我的工程目录如下:   我本地使用的gradle版本:   app的build.gradle内容如下所示: android { apply plugin: 'com.android.application' android { compileSdkVersion 2...

c1392851600的专栏 467
上一篇: 编写MTK6737平台的GPIO驱动例程(三)
下一篇: MTK6737平台匹配设备节点的方法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值