首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android之NDK开发初体验

概念 在阅读文章之前我们首先了解几个概念 JNI JNI是Java语言提供的Java和C/C++相互沟通的机制,Java可以通过JNI调用本地的C/C++代码,本地的C/C++的代码也可以调用java...JNI 是本地编程接口,Java和C/C++互相通过的接口。Java通过C/C++使用本地的代码的一个关键性原因在于C/C++代码的高效性。 NDK NDK是一系列工具的集合。...它集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。...对于我们Android开发者来说,我们的app需要能在大多数手机上运行。所以要么我们所有arm类型都兼容,要么只兼容armeabi。...这个程序创建为 x86_64-pc-linux-gnu Android studio环境配置 ?

1.3K40

一文搞懂Android和嵌入式Linux开发差异点

前言 因业务需要,过去一年从熟悉的Android开发开始涉及嵌入式Linux开发,编程语言也从Java/Kotlin变成难上手的C++,这里面其实有很多差异点,特此整理本文来详细对比这两者开发的异同,便于对嵌入式...嵌入式Linux开发: Eclipse、Visual Studio Code等通用IDE:这些IDE支持C/C++和其他语言,可以用于嵌入式Linux应用开发。...Android NDK(Native Development Kit):这是一个工具集,用于编译和链接使用C/C++编写的Android应用的本地部分。...Android SDK/NDK:Android SDK提供了一套用于开发Android应用程序的API和组件,而Android NDK提供了一套用于处理本地C/C++代码依赖关系的工具。...写在最后 本文从架构、主要差异、编程语言、IDE/编译工具、包管理、可运行文件和性能分析工具进行了详细对比,如果是有Android开发经验的要迁移到嵌入式Linux需要学习的内容确实还不少,但研发思路是大同小异的

1.8K21
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android Studio2.2下NDK开发初试

    很久没更博了,这次来记录一下如何在Android Studio2.2中进行NDK开发吧,NDK开发嘛,就是将C/C++的代码编译成so类库,供java调用(当然c调用java也是可以的),还记得以前没有...IDE的时候,需要在linux环境编译,非常麻烦,光是看完教程就不想弄了,但不得不说Android Studio是Android开发的神器,它将一切都弄的如此简单。...开始之前,我们需要在SDK Manager中安装NDK开发组件,即LLDB和NDK,如下图 ?...-8 APP_CFLAGS += -DSTDC_HEADERS 下一步,需要在app的build.gradle中说明ndk-build的mk文件在哪里,在android范围内添加 externalNativeBuild...接着,Android Studio可以帮助我们构建hello-jni.c文件,在错误的地方,alt+enter后,就会发现多了一个hello-jni.c文件,里面需要引用的文件和声明的函数头,as都帮我们做好了

    97750

    Android NDK 开发 | CMake 使用手册 - 初见篇

    CMake 这块知识是比较独立的,不止是 Android NDK 项目,一般的 C++ 项目也可以通过 CMake 进行构建。...为了更具有一般性,将在 Linux 环境中,通过 C++ 项目来介绍 CMake 的相关知识,当然这一切也可以用于 Android NDK 项目中。...其实 IDE 中点击运行按钮,在控制台打印结果,期间就在做这些事。这就是通过 CMake 构建 C++ 项目最简单的案例。 ---- 2....回首 Android NDK 中的 CMakeLists Android NDK 中的 CMakeLists 和 C++ 项目中的并没有任何区别,都是用来构建项目的。...但当使用那个 so 时,放入 arm64-v8a下, 会出现一个如下问题: 原因很简单,因为架构问题,通过 cmake 在 linux 中构建的 so 文件,是 X86_64 架构的,在 Linux

    1.2K20

    良心解析 | 搭建NDK环境历程及问题记录 暨 Android Studio 2.3.3 to 3.3 填坑之路(Update坑 + AVD坑 + NDK坑)

    在学校这显然也挺折腾的 废话不多说,解释一下标题,好多坑对吧,其实本文所有坑的起因,就是我寒假要开始了解NDK开发了,NDK开发之前我们需要搭一个环境, 在搭环境的时候,需要更新各种...具体目录: 0.NDK环境的搭建 1.解决问题:运行程序时候,IDE一直停留在 "Waiting for target device to come online" 2.升级Android...toolchains folder for ABI with prefix: mipsel64el-linux-android 正文 ---- 0.NDK环境的搭建 NDK环境的搭建其实很简单...毫无疑问,打开一个旧项目,编译时各种报错: 发现它完全不买账对吧,AS2.3.3的产物根本就不想理你AS3.3的IDE,app的build.gradle文件都跟刚刚成功运行的Helloworld...这里官网是需要访问外国网站的,所以其实它适合的情况是你AS原来的NDK包是你自己去网上找来下载的,由此缺失时,可以用这种方法。

    1.2K31

    常用工具镜像网站又更新了#1

    2016年11月份搭建了一个常用工具的镜像网站,因为众所周知的原因,很多软件工具需要自备才可以下载,但是有的软件工具非常大,下载,时间长的像噩梦,所以就搭建了这么一个网站,可以更快速的下载工具软件学习,...Android NDK Android NDK最新版本为android-ndk-r14-beta1,这是一个beta版本,大家需要尝鲜新功能的话,可以下载使用了。...-beta1-darwin-x86_64.zip http://mirrors.flysnow.org/android/ndk/android-ndk-r14-beta1-linux-x86_64.zip...,现在改成tools开头了,估计和新支持CMake有关,想把Android SDK做成一个工具集合,而不是单纯的Android SDK。.../2.2.3.0/android-studio-ide-145.3537739-linux.zip http://mirrors.flysnow.org/android/studio/2.2.3.0/android-studio-ide

    1.3K40

    Android中关于Nativa编译(NDK、JNI)的一些问题

    SDK的C++接口由JNI实现,使用SDK的C++接口的游戏在集成时,SDK直接向游戏游戏提供源码编译,因此需要使用NDK完成编译。在编译和环境配置过程中经常会遇到一些问题,在此总结一下。...##NDK 环境配置: 选择 window -> preferences -> Android -> NDK,按照下图配置 ?...备注:在最新的adt版本(adt-bundle-windows-x86-20140702)中没有集成ndk,游戏在Android选项中可能无法看到上述配置。...解决方法如下: 下载eclipse关于ndk的插件com.android.ide.eclipse.ndk_23.0.2.1259578.jar 将下载好的com.android.ide.eclipse.ndk...当需要工程支持native编译的时候,只需要选择工程->右键->properties->Android Tools -> Add Native Support(如下图)即可。: ?

    82180

    【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

    : 需要下载最新版本的 SDK, 即 android-21 5.0 版本的 SDK; -- Android NDK : 文档中指出 编译使用的 NDK 必须是 r9 版本的, 所以建议也使用这个版本;...android-ndk-r10d-darwin-x86_64.bin 442691567 cb101e1e62d56ea75b215f6bc6c27fae Linux 32-bit (x86) android-ndk-r10d-linux-x86.../android-ndk-r10d-linux-x86.bin 命令, 安装 ndk; (6) 设置交叉编译指令集 查看手机 cpu 指令集 : 这个值需要在配置环境变量时使用; -- 查看命令 :.../develop/android-sdk-linux export ANDROID_NDK=/home/octopus/develop/android-ndk-r9c export PATH=$PATH...环境准备 需要的环境 (必须满足) : SDK, eclipse, ADT, JDK 必须都是最新版本的, 低一个版本都会导入出错; -- SDK : 调试该源码需要最新版本的 SDK, 即需要安装最新版本的

    4.9K40

    Android NDK Hello

    这时就要用到NDK编程了,既用C/C++代码实现访问系统文件,并将其生成本地库,供android中的java代码调用,这样就可以在java代码中通过调用C/C++编写的库的接口来实现对系统文件的访问。...Android NDK 入门 入门的最好办法就是学习Android自带的例子, 这里就通过学习Android的NDK自带的demo程序 —— hello-jni 一、 开发环境搭建 NDK开发需要在linux...下进行,因为把C/C++编写的代码生成能在ARM上运行的.so文件,需要用到交叉编译环境,而交叉编译需要在linux系统下才能完成。...这里讲一个方法,利用javah这个工具生成相应的.h文件,然后根据这个.h文件编写相应的C/C++代码。...Java_com_example_hellojni_HelloJni_stringFromJNI() 函数只是简单的返回了一个内容为 "Hello from JNI !"

    92720

    Android NDK 开发中快速定位 Crash 问题

    在 Android NDK 开发中,排查问题遇到的最熟悉的关键字非 backtrace 莫属,Linux 系统中进程 crash 后通过 backtrace 输出堆栈信息,开发者就是基于这些堆栈信息来定位代码问题...当然定位 Native 层代码问题最优的方式还是通过 IDE(AS、VS)或者 GDB 进行 debug 断点调试,本文利用一个非常简单的 case 说明 Native 层定位 crash 的一般流程。...我们也可以借助于 ASAN (注意 Android 版本)进行定位,具体可以参考文章:用 Asan 提前解决 NDK 疑难 crash 写两行代码,先制造一个简单的 crash 场景。...-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64-linux-android-addr2line.exe 执行 crash 代码得到的 crash...D:\NDK>D:\NDK\android-ndk-r16\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64

    1.4K30

    【Android NDK 开发】NDK 交叉编译 ( Ubuntu 中交叉编译动态库 | Android Studio 中配置使用第三方动态库 )

    静态库 : 编译链接时 , 将整个库文件打包到可执行文件中 , 造成可执行文件较大 , 但运行时不需要库文件 ; Android 与 Linux 静态库 后缀为 “.a” ; 3 ....静态库与动态库对比 : ① 静态库时间效率高 : 执行时没有动态链接的操作 , 所有的代码都在可执行文件内部 , 时间消耗少 ; ② 动态库空间效率高 : 动态库如果被多个程序调用 , 只要有一个动态库在内存中即可...动态库中的方法 extern "C" { //注意在 C++ 中调用 C 语言方法 , 需要做兼容设置 extern int add(int a, int b); } ② 调用动态库中的函数...native-lib.cpp) # 到预设的目录查找 log 库 , 将找到的路径赋值给 log-lib # 这个路径是 NDK 的 ndk-bundle\platforms\android-29...\arch-arm\usr\lib\liblog.so # 不同的 Android 版本号 和 CPU 架构 需要到对应的目录中查找 , 此处是 29 版本 32 位 ARM 架构的日志库 find_library

    2.9K20

    已解决 No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android 报错

    in the NDK toolchains folder for ABI with prefix: mips64el-linux-android 我猜测这个错误是因为Android3.0或者更高的开发环境的版本更新导致不匹配当前的开发环境导致的报错...NDK(Native Development Kit)是Android的一个开发工具包,为开发者提供了一系列的工具和库,用于开发基于C和C++的Android应用。...它集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,使得开发者只需要简单修改编译的mk文件就可以创建出适合不同设备和操作系统的库文件。...使用NDK,开发者可以更方便地利用C和C++编写高性能、高复杂度的代码,然后再将其集成到Android应用中。...这为开发者提供了一个替代Java开发的可能性,尤其是在需要大量计算性能或者需要使用已有的C/C++代码的情况下。 此外,NDK还提供了一个稳定、功能有限的API头文件声明。

    42910

    Android流媒体开发之路二:NDK开发Android端RTMP直播推流程序

    NDK开发Android端RTMP直播推流程序 经过一番折腾,成功把RTMP直播推流代码,通过NDK交叉编译的方式,移植到了Android下,从而实现了Android端采集摄像头和麦克缝数据,然后进行...开发思路 首先,为什么要用NDK来做,因为自己之前就已经实现过RTMP推流、RTMP播放、RTSP转码等等各种c++实现的流媒体项目,有很成熟的代码模块。...代码即可,本身就是平台无关的,NDK也是linux环境开发,socket网络通信都是相通的。...本质上,Android也是linux嘛,所以跟其他嵌入式arm-linux的交叉编译方式,本质上是差不多的,当然,前提是系统内布置好交叉编译环境。...不过这里还是有两种编译方式:第一种就是类似其他arm-linux环境,配置好交叉编译工具链环境,然后直接按照普通的linux编译方式进行编译;第二种是编写Android.mk文件,然后用NDK里提供的ndk-build

    2.2K60

    Android JNI学习(二)——实战JNI之“hello world”

    这个示例代码提供了一个简单的C++函数stringFromJNI(),此函数可以返回字符串“Hello from C++” 在 External Build Files 文件夹中:可以找到CMake或...与build.gradle文件指示Gradle构建应用一样,CMake和ndk-build需要一个构建脚本来了解如何构原生库。...${log-lib} ) (四) 向Gradle 关联到原生库 要将Gradle关联到原生库,需要提供一个指向CMake或ndk-build 脚本文件的路径。...Studio 实现 1、从IDE 左侧打开Project 窗格 并选择 Android 视图 2、右键点击想要关联到原生库的模块(咱们这里是app 模块),并从菜单中选择 Link C++ Project...gradle-experimental是Android Studio的一个实验性的项目,是基于gradle的一个插件,主要用来自动化NDK的配置实现,无需自己编写Android.mk和Android.mk

    2.6K42

    ndk代码支持断点调试

    背景 android的ndk代码编写一直被认为是很痛苦的一件事情,除了android程序员对c++的陌生外,还有一个主要原因是无法断点调试。无法断点调试很难发现和排查问题,大大影响开发效率。...然后就可以看到这样的一个对话框 ? 但是我试着操作了一下,发现没有找到 link c++ project with gradle的选项。...如果没有配置过ndk地址,需要在local.properties中配置ndk地址。...此时我们可以直接在android studio中编辑c++代码,支持自动补全,方法跳转。以及ide所有的其它常见操作,如格式化代码,重构变量名,查看引用等 ? ?...# 总结 将ndk代码迁移到android studio中,让c++代码支持断点调试,自动补全,能大大提高我们的开发效率。需要在android中用到ndk编程的同学都可以试试。

    3.9K61
    领券