Android studio 2.0集成NDK

Android Studio 2.0 NDK 开发教程(一) 重要提醒: 对于现阶段的AS NDK而言,读者往往因为各项参数配置的不合理而出错,这是读者最关心的。本文的各项参数对应关系如下: (1)Android Studio 版本:2.0; (2)compileSdkVersion = 23; (3)buildToolsVersion = "23.0.3"; (4)gradle-experimental版本:com.android.t 阅读详情
前言

现在的ndk开发已经越来越便捷,打开老电脑的AS2.0,再一次对ndk-build的编译方式有了新的认识,以前对jni、libs、jniLibs这些目录理解有点凌乱。

开发环境:

  • windows 7
  • android-ndk-r14b
  • android studio 2.0
步骤
一.local.properties添加ndk路径
ndk.dir=D\:\\download\\android-ndk-r14b

未添加则会报出下面的提示

二.gradle.properties文件,添加
android.useDeprecatedNdk=true //低版本插件

未添加则会报出下面的提示

Error:(27, 1) A problem occurred evaluating project ‘:app’.
Error: NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin. For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental. Set “android.useDeprecatedNdk=true” in gradle.properties to continue using the current NDK integration.

三.创建jni目录

新目录 src/main/jni

四.ndk-build编译
  • 自动编译 (不需要手动执行ndk-build命令)
  • 手动编译 (需要手动执行ndk-build命令)

自动编译

android studio根据ndk option自动生成Android.mk文件

在build.gradle文件中

1.指定jni目录,jni.srcDirs 是源码的位置

   sourceSets {
        main {
            println("---> jni默认目录 $jni")
            jni.srcDirs = ['src/main/jni']
            //编译 jni目录 根据defaultConfig的ndk配置自动生成mk文件  中间文件在app\build\intermediates\ndk
        }
    }

2.配置ndk option

  defaultConfig {
        ndk {
            //lib的名称,对应Android.mk文件的LOCAL_MODULE
            moduleName "JniTest"
            //cpu的类型
            abiFilters "armeabi", "armeabi-v7a", "x86", "mips", "arm64-v8a", "x86_64", "mips64"
        }
    }

运行程序,生成中间文件(app\build\intermediates\ndk),这种方式编译的的so链接库会自动打包到apk的app/libs目录

手动编译
手动书写Android.mk文件,使用ndk-build命令编译

1.在build.gradle文件中,禁止自动编译ndk

   sourceSets {
        main {
            println("---> jni默认目录 $jni")//一旦 添加了 ndk 就会自动编译ndk  默认src/main/jni  
            jni.srcDirs = []//disable automatic ndk-build call 禁止自动编译 src/main/jni目录  
            println("---> jni新目录 $jni")
        }
    }

2.在jni目录下,添加Android.mk和Application.mk文件
Android.mk用于设置库文件的名称,源码路径,Application.mk文件配置编译版本

Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := test  #库名称
LOCAL_LDFLAGS := -Wl,--build-id
LOCAL_SRC_FILES :=main.cpp 

LOCAL_C_INCLUDES += /app/src/main/jni
LOCAL_C_INCLUDES += /app/src/debug/jni

include $(BUILD_SHARED_LIBRARY)

Application.mk

#APP_PLATFORM (minimum is android-21 for 64bit support) 需要ndk11及以上版本才能编译64位
#APP_ABI := armeabi  armeabi-v7a mips  x86 arm64-v8a x86_64 mips64
#APP_PLATFORM := android-21 #编译版本
APP_ABI := all  #编译支持的abi 对应gradle的ndk option的abiFilters

3.在项目根目录下 执行命令 ndkroot/ndk−build−Capp\src\main\jni {ndk_root}是ndk路径,如ndk是D:\download\android-ndk-r14b,则命令为

D:\download\android-ndk-r14b\ndk-build -C  app\src\main\jni

ndk-build输出的中间文件在app\src\main\libs

手动编译有利于了解GNU make的编译过程,但是需要注意将jniLibs的目录改为src/main/libs,so库才会被打包进apk中,原因是因为jniLibs.srcDir默认是src/main/jniLibs目录,然而这里并没有src/main/jniLibs目录,只有src/main/libs。。当然也可以创建src/main/jniLibs目录,拷贝so文件进去。否者运行程序将找不到so库

 jniLibs.srcDirs = ["src/main/libs"]//依赖libs目录

半手动编译
对手动编译优化,使用gradle的task 执行ndk-build
在build.gradle文件中新建task

//自带mk文件   task自动编译
task buildNative(type: Exec) {
    def ndkDir = android.ndkDirectory
    println("---> ndk dir: ${ndkDir}")
    println("---> jni file dir: ${file('src/main/jni').absolutePath}")
    commandLine "$ndkDir/ndk-build.cmd",//等同于打开cmd  输入命令ndk-build.cmd -C src/main/jni
            '-C', file('src/main/jni').absolutePath, // 根据jni的Android.mk生成so,在src/libs下
            '-j', Runtime.runtime.availableProcessors(),//-j参数,并行执行构建命令
            'all',
            'NDK_DEBUG=1'
}
tasks.withType(JavaCompile) {
    //项目编译的时候就执行buildNative任务 
    compileTask -> compileTask.dependsOn 'buildNative'
}

备注 ndk-build的常用命令

ndk-build                   编译
ndk-build -C <project路径>   指定工程的目录
ndk-build clean          清掉二进制文件
ndk-build NDK_DEBUG=1     编译为可调试版的二进制文件
ndk-build NDK_DEBUG=0     编译为release版
ndk-build NDK_LOG=1          打印出内部的NDK日志信息(用于调试NDK自己)
ndk-build NDK_APP_APPLICATION_MK=<文件路径>      用这里指定的路径寻找Application.mk文件

现在的android studio早已经弃用这种自我折腾的方式了,才会有 android.useDeprecatedNdk=true这种奇葩配置。新的android studio集成ndk相对容易点了

安卓手机离线运行Llama 3.2 1B实战指南 大语言模型(LLM)端侧部署是边缘智能的核心能力之一,其本质是将模型推理从云端迁移至终端设备,在保障隐私与低延迟的前提下实现自主决策。技术原理上需突破模型轻量化、硬件协同调度与系统级集成三大关卡,关键依赖量化压缩、Executorch运行时及Android NDK深度适配。该方案显著提升数据安全性与响应实时性,广泛适用于离线AI助手、本地知识库、嵌入式智能终端等场景。本文聚焦Llama 3.2 1B在安卓平台的可落地实践,完整覆盖Torchchat工具链驱动下的模型下载、INT4量化导出(.pte格式)、J 阅读详情

相关推荐

Android Studio 3.2.0+OpenCV 3.4.0 实现Android平台的人脸检测Demo

最近在尝试将ORB_SLAM2移植到Android平台运行,所以先通过移植OpenCV到Android来熟悉As的操作和相关配置流程。 这次人脸识别的模型我们使用OpenCV官方提供的Demo模型,下载地址在官网,模型存放目录如下: OpenCV-android-sdk\samples\face-detection\res\raw\lbpcascade_frontalface.xml 开始...

qq_36122936的博客 1173

Android Studio之NDK开发

Android Studio之NDK开发 一、 前言 NDK全称是Native Development Kit,是Android提供的一个开发工具包,能够快速将开发的C,C++的动态库,协议软件包,以及优秀的软件工具,用so和应用打包成APK,自由地在Android上运行。而NDK开发工具,就是将C/C++程序,编译成为Android环境可运行的程序,再者,通过NDK实现Android中实现JNI编程。那么JNI又是啥呢?JNI的全称是Java Native Interface,即Java的本地接口,JNI

yinshenk的博客 1万+

保姆级教程:在Android Studio里用Chaquopy 14.0.2调用Python,顺便装好OpenCV和NumPy

本文提供了一份详细的Android Studio教程,指导开发者使用Chaquopy 14.0.2在Android应用中调用Python,并集成OpenCV和NumPy。从环境配置到常见问题解决,再到实战调用Python脚本进行图像处理,本教程覆盖了全流程,帮助开发者高效实现复杂功能。

weixin_30654583的博客 392

Android Studio 进行NDK开发,实现JNI,以及编写C++与Java交互(Java调用本地函数)并编译出本地so动态库

NDK集成了交叉编译器(交叉编译器需要UNIX或LINUX系统环境),并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。就会生成两个文件这几个so文件,如下图一,然后就能正常获取到C++文件(也就是cpp文件)中的数据了,还可以把so动态库提供给第三方使用,具体方式详见。在android的JNI中,要先将相应的C/C++打包成so库,然后导入到lib文件夹中供java调用。(5)安卓中的so文件是什么?

UrasakiNakajima的博客 8429

VisualGDB 6.0 R2: Revolutionizing Cross-Platform Development in Visual Studio

VisualGDB 6.0 R2为跨平台开发带来革命性变革,深度集成于Visual Studio,简化嵌入式、Linux和Android开发流程。支持200+设备自动配置工具链,提供智能错误诊断、远程开发及高级CMake集成,显著提升开发效率。其统一的调试接口和性能分析工具,使多平台开发更加高效便捷。

weixin_29021291的博客 418

告别LibVLC内存泄漏!保姆级教程:在Android Studio 2023上编译支持H265 RTSP的ijkplayer 0.8.8

本文提供了一份详细的教程,指导开发者如何在Android Studio 2023环境下编译支持H265 RTSP的ijkplayer 0.8.8版本,解决LibVLC常见的内存泄漏问题。教程涵盖环境配置、源码获取、编译流程、项目集成以及性能优化,帮助开发者构建稳定高效的视频播放解决方案。

weixin_34046298的博客 282

在Android Studio下进行NDK开发

JNI的全称就是Java Native Interface,其实它就是一种协议。一说协议,那它就是对某种东西的一个规范和约束,说的好听一点就是标准化。意思是如果你想用我这个东西,那你必须要遵守我这边的规范。有了JNI这个协议,Java和C/C++代码才能相互调用。NDK全称是Native Development Kit,它就是一个本地开发的“工具包”。Java开发要使用JDK,Android开发要使用SDK,那我们在Android中要进行native开发,也要用到它对应的工具包,即NDK。

leihu007的专栏 2288

android studio创建NDK项目流程

1.android studio新建NDK项目 ①.创建新的项目,然后选择最下面的Native C++ ②.然后一路next,最后点finish ③.下面项目就是显示一个字符串,字符串是native底层返回的 ④.运行结果如下: ⑤.build.gradle中cmake相关编译内容,其实真正native层编译还是在cmake中进行的 ⑥.刚运行的编译so包产物位置 2.CMake编译 ①.编译so包 ②.cmake相关编译so包讲解 ​​​注意真...

龚礼鹏的博客 4314

Android-Studio下的JNI开发:NDK的配置,kotlin数组长度

● 在菜单栏找到"File"-“Settings”,打开设置界面; ● 找到"Appearance & Behavior"-“System Settings”-"Android SDK"选项,然后切换到"SDK Tool"选项卡; ● 然后找到NDK打钩; ● 点击"Apply"按钮,然后在弹出窗口中点击"OK",即可自动下载; ● 等待自动下载安装完成,点击"Finish"按钮完成安装。 如下图所示: Android Studio默认安装ND

sa3221sa的博客 3682

十一、学生信息管理系统(PyQt5+MySQL+PyMySQL模块实现)

学生信息管理系统(PyQt5+MySQL+PyMySQL模块实现)

ungoing的博客 8991

【车载开发系列】ParaSoft单元测试环境配置(一)

bdf是数据文件的一种类型,表示一种数据库文件。在ParaSoft当中,可以使用bdf文件来快速创建一个测试项目。

千月星跡 2148

android ndk 12下载地址,Android SDK、NDK、Android Studio官方下载地址(截止到2016年12月)...

2016.12Android Studio 2.2.3WindowsIncludes Android SDKhttps://dl.google.com/dl/android/studio/install/2.2.3.0/android-studio-bundle-145.3537739-windows.exeNo Android SDKhttps://dl.google.com/dl/androi...

weixin_28947723的博客 948

GPU运维工程师入门指南 (第九篇): 高性能网络 - InfiniBand与RDMA技术

本文介绍了支撑AI分布式训练的高性能网络技术InfiniBand和RDMA。传统TCP/IP网络因内核开销和内存拷贝成为性能瓶颈,而InfiniBand提供高带宽、低延迟的专用网络,RDMA则通过内核旁路和零拷贝技术实现节点间内存直接访问,显著提升通信效率。特别介绍了GPUDirect RDMA技术,使GPU显存可直接通信。文章还列举了运维人员在部署这些技术时需要考虑的硬件、驱动、配置和监控等关键点。这些技术共同构成了支撑大规模AI集群的"数据高速公路",为后续讨论存储性能瓶颈奠定了基础

weixin_42587823的博客 1100

Android studio之配置NDK开发环境

android studio已经更新到了2.0版本,其中有许多令人振奋的消息,github中已经见不到eclipse开源的工程了,所以使用android studio是大势所趋了。 本文主要介绍如何在android studio中配置NDK开发环境 下载安装NDK 1)打开Android SDK配置页面 2)下载安装android NDK 3)配置NDK环境 我们可以发

一片枫叶的专栏 1398

【spark源码修改】hive3.1.3 spark3.5.4编译,需要修改源码,最终编译成功

【spark源码修改】hive3.1.3 spark3.5.4编译,需要修改源码,最终编译成功,附带问题分析详细过程

spark_dev的博客 1912

GprMax正演模拟:为什么你的反射波‘消失’了?可能是直达波在捣鬼(附Python后处理脚本)

本文深入探讨了GprMax正演模拟中反射波信号被直达波淹没的现象,并提供了Python后处理脚本的实战指南。通过时域置零、自适应增益控制、频域滤波等多种技术,有效增强反射波信号,帮助用户解决探地雷达模拟中的常见问题。文章还包含详细的代码示例和效果评估方法,适合GPR数据处理的研究人员和工程师参考。

weixin_29305313的博客 234

Android Studio 中集成 OpenCV (Java 和 NDK 均可,不使用Manager)

软件版本 非常重要!!! 已经测试 Android Studio 3.6.3 和 Android Studio 4.0.1,都可使用 已经测试 OpenCV 3.4.9、3.4.10、4.2.0 和 4.3.0,只有 3.4.9 可以使用 操作步骤 这是参考链接 Android openCV integration without openCV manager,等有时间我会把步骤进行摘抄。 ...

Augmented Reality & Computer Graphics 1436

KNX实战—ETS5_智能开关从零到一的配置全流程

本文详细介绍了使用ETS5软件配置KNX智能开关的完整流程。从创建项目、构建建筑结构,到导入产品数据库、添加并配置开关模块与智能面板,再到设置延时开关、闪烁报警等进阶功能,并深入解析了群组地址的配置与链接方法。最后指导完成项目校验与程序下载,帮助用户实现从零到一的智能灯光基础控制功能配置。

joy55的博客 543

android ndk 开发

android studio 进行ndk开发

ziqiang1的专栏 554

电商客服效率翻倍!手把手教你用影刀RPA+AI搭建智能回复系统(附实战配置)

本文详细介绍了如何利用影刀RPA+AI技术搭建电商智能客服系统,实现24小时在线回复,大幅提升客服效率。通过零代码配置、Excel词库管理和AI语义理解,系统能处理80%常规咨询,响应速度稳定在3秒内,特别适合中小电商降低成本并提升服务质量。

weixin_42520661的博客 550

【HALCON工业视觉应用探索】08. C#+Halcon视觉引导机器人抓取:从入门到工业级实战(附完整代码+部署指南)

摘要:本文聚焦C#+Halcon在视觉引导机器人抓取领域的落地应用,从新手友好的“二十分钟基础引导系统”切入,逐步深入工业级场景(汽车变速箱壳体抓取)。内容涵盖核心概念(手眼标定原理、坐标转换、机器人通信协议)、完整技术流程(图像采集→目标定位→标定转换→机器人执行→结果反馈)、工业级代码实现(多目标识别、智能抓取策略、实时状态监控),以及现场部署关键技巧(硬件选型、通信配置、精度优化)。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1266

【Unity游戏开发】Android中如何集成Unity3D项目

涉及到的IDE Android studio 4.0.2版本 UnityHub 2.4.3版本 Unity 2019.4.14版本 环境配置 Android Studio环境配置 这个相信Android开发应该熟悉的不能再熟悉了,网上教程也有很多,在这里面就不赘述了,如果有什么问题可以私信我(建议大家还是通过自己上网查询解决) UnityHub 先说一下Unity Hub在这里面的作用吧 Unity Hub 它是Unity官方提供的工具,作用的话就是帮助我们管理Unity,以及项目啊,还有一些其他的配

m0_56144365的博客 2657

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

andorid studio 配置NDK环境

https://blog.csdn.net/u010359031/article/details/51332872 工具:android studio 2.0 ,ndk-r10e 步骤: 1,创建好项目 2,写jni调用的类和方法: 3,写头文件(不嫌麻烦自行百度cmd命令生成)。这里介绍个“一键”生成头文件的方法,如果eclipse配置过就知道了。 打开setting设置界面 选中 绿色的+号...

chengde6896383的专栏 323

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

终极指南:攻克Intel RealSense Android Wrapper构建难题,从环境配置到调试全流程解析

Intel® RealSense™ SDK 2.0是一款跨平台开源库与工具集,支持多操作系统和开发环境开发。虽然官方已在Windows和Linux平台验证了SDK2.0的稳定性,但通过Android包装器,开发者同样能为Android系统构建原生(C/C++)和Java应用,实现深度摄像头功能集成。本指南将系统解决Android Wrapper构建过程中的环境配置、依赖管理和调试优化等核心难题,助

gitblog_00665的博客 352

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

如何快速集成Zeusee-Face-Anti-spoofing?移动端活体检测开发指南

Zeusee-Face-Anti-spoofing是一款开源配合型人脸活体检测项目,专为移动端人脸识别应用开发设计,能有效防范照片、录像等欺骗攻击,提升人脸识别安全性。 ## 📌 核心功能与应用场景 在移动端人脸识别应用中,活体检测是保障安全的关键环节。Zeusee-Face-Anti-spoofing采用配合型检测方式,通过引导用户完成简单的低头、摇头等动作,即可显著降低欺骗风险,适用于金

gitblog_00279的博客 893

手机离线跑通大模型:llama.cpp Android 部署与调优指南

地铁没信号、会议室断网,你照样能在手机上和大模型对话。llama.cpp 是一个 C/C++ 大模型推理引擎,把模型完整跑在本地,无需联网。本文带你走通 Android 上的三条部署路线,重点把第一次离线推理跑通,并给出调参与排错思路。 路线一览:先选路 → Termux 快速上手 → NDK 性能路线 → App 绑定 → 调优与排错。 ## 选路:三种部署路线对比 | 路线 | 适合谁

gitblog_00809的博客 1034
上一篇: ADB连不上模拟器
下一篇: 2017总结
kernel_
博客等级 码龄12年 8粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值