NDK

Android的NDK开发步骤

纵然是瞬间 提交于 2019-12-31 01:35:51
一个超级快配置NDK的办法:( NDK DEMO ) 第一步: 到Android官网下载Android的开发工具ADT(Android Development Tool的缩写),该工具集成了最新的ADT和NDK插件以及Eclipse,还有一个最新版本SDK。解压之后就可以用了。 ADT插件:管理Android SDK和相关的开发工具的 NDK插件:用于开发Android NDK的插件,ADT版本在20以上,就能安装NDK插件,另外NDK集成了CDT插件。也可以在线更新ADT、NDK插件 第二步: 到Android官网下载最新的NDK,注:NDK版本在r7以上之后就集成了Cygwin,而且还是十分精简版。比起下载Cygwin要方便多啦!下载链接见:http://developer.android.com/ tools /sdk/ndk/index.html 第三步: 打开Eclipse,点Window->Preferences->Android->NDK,设置NDK路径,例如E:/android-ndk-r9c 第四步: 新建一个Android工程,在工程上右键点击Android Tools->Add Native Support...,然后给我们的.so文件取个名字,例如:my-ndk 这时候工程就会多一个jni的文件夹,jni下有Android.mk和my-ndk.cpp文件

Type \'JNIEnv\' could not be resolved
等信息解决的方法

删除回忆录丶 提交于 2019-12-31 01:35:33
曾经做Android的项目要用到NDK就必需要 下载 NDK,下载安装Cygwin(模拟Linux环境用的),下载CDT(Eclipse C/C++开发插件),还要配置编译器,环境变量... 麻烦到不想说了,Shamoo在网上查了一下资料,发现了一个超级快配置NDK的办法。 Step1:到Android官网下载Android的开发工具ADT(Android Development Tool的缩写),该工具集成了最新的ADT和NDK插件以及Eclipse,另一个最新版本号SDK。解压之后就能够用了,很爽! ADT插件:管理Android SDK和相关的开发工具的 NDK插件:用于开发Android NDK的插件。ADT版本号在20以上。就能安装NDK插件,另外NDK集成了CDT插件 也能够在线更新ADT、NDK插件。只是速度超级慢...所以果断在网上下载集成开发工具ADT。下载链接见:http://developer.android.com/sdk/index.html Step2:到Android官网下载最新的NDK,注:NDK版本号在r7以上之后就集成了Cygwin,并且还是十分精简版。比起下载Cygwin要方便多啦。下载链接见:http://developer.android.com/tools/sdk/ndk/index.html 下载完毕之后。解压搞定! Step3

Android NDK环境搭建

大兔子大兔子 提交于 2019-12-31 01:34:46
在Android上要想开发出高效率的软件,还是须要用到C/C++语言,要想在Java上开发C/C++语言就须要在IDE上安装NDK;在Android的官网上SDK开发环境已经包括了ADT插件。最新的Android开发IDE能够到官网下载: http://developer.android.com/sdk/index.html 因为近期Android官网和google在国内常常进不去,我就把下载的放到网盘,有须要的能够去下载: http://pan.baidu.com/s/1hq3iBGw 准备的文件 在新版本号的ADT上安装NDK环境非常方便。我的ADT版本号是V22.0.5,版本号号在打开ADT载入时会显示出来 在官网上: http://developer.android.com/tools/sdk/ndk/index.html 下载最新的NDK。NDK版本号在r7以上之后就集成了Cygwin。不须要单独去安装Cygwin 1、Eclipse配置 SDK配置 NDK配置,路径就是解压出来的NDK根文件夹 下面就来測试下NDK是否已经成功安装 随便新建一个Androidproject,加入Add Native Support 此时新建的project就多了一个jni文件夹 IDE有可能会报一个错误: [2014-06-23 17:08:36 - Unable to launch

Eclipse NDK 配置,无需安装Cygwin

吃可爱长大的小学妹 提交于 2019-12-31 01:34:37
Eclipse NDK 配置,不用安装Cygwin 文章转自 http://www.cnblogs.com/chenjiajin/archive/2012/04/12/2444188.html 一、关于NDK: NDK全称:Native Development Kit。 1、NDK是一系列工具的集合。 NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。 NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。 NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。 2、NDK提供了一份稳定、功能有限的API头文件声明。 Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。 二、NDK实例的实现: 对于Windows环境下NDK的开发,如果使用的NDK是r7之前的版本,必须要安装Cygwin才能使用NDK,所以为Eclipse需要配置的builder

构建NDK交叉编译链

风流意气都作罢 提交于 2019-12-26 23:58:04
有时我们需要单独编译个c文件,生成一个ELF在Android上面跑,NDK提供了一个 make-standalone-toolchain.sh 脚本,用于生成一套特定平台的交叉编译工具链 使用方法如下: kiiim@ubuntu :~/aosp/android-ndk-r10d$ ./build/tools/make-standalone-toolchain.sh --arch=arm --platform=android-21 --install-dir=~/ndk_arm_android21 --toolchain=arm-linux-androideabi-4.9 --system=linux-x86_64 Copying prebuilt binaries... Copying sysroot headers and libraries... Copying c++ runtime headers and libraries... Copying files to: ~/ndk_arm_android21 Cleaning up... Done. 简记一下参数设置: –arch 选择目标平台,除了arm还有下面几种: Toolchain Value mips64 compiler --arch=mips64 mips GCC 4.8 compiler --arch=mips

Android JNI和NDK关系

ぐ巨炮叔叔 提交于 2019-12-26 14:12:05
1、什么JNI Java Native Interface(JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI 是本地编程接口,它使得在 Java 虚拟机(VM) 内部运行的 Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行交互操作。 上面过程分为2个部分: 第一、用C语言生成一个库文件。 第二、在java中调用这个库文件的函数。 2、NDK NDK全称:Native Development Kit。 NDK是一系列工具的集合。 * NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。 * NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。 * NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。 个人理解,NDK就是能够方便快捷开发.so文件的工具。 JNI的过程比较复杂,生成.so需要大量操作,而NDK就是简化了这个过程。 3、java中调用.so文件代码 其中,在java中加载库文件的代码如下: System.loadLibrary(*.so的档案名); 例如

android studio使用

不羁的心 提交于 2019-12-25 03:16:28
android studio 问题 NDK Resolution Outcome: Project settings: Gradle model version=5.4.1, NDK version is UNKNOWN 这个是因为升级到3.5以后,原来的ndk被删除了,在File -> Project Structure -> SDK Location重新安装就好(建议安装,大约750M),会解决很多问题; 来源: CSDN 作者: weixin_43416751 链接: https://blog.csdn.net/weixin_43416751/article/details/103684173

Android studio 快速进行NDK开发,通过JNI技术实现java与c/c++的互相调用

◇◆丶佛笑我妖孽 提交于 2019-12-23 10:21:51
一、简单介绍NDK和JNI NDK的全称是Android Native Development Kit, 它提供了一系列的工具,帮助开发者快速开发C/C++的动态库,生成so库,供java层调用。 JNI的全称是Java Native Interface,是java语言提供java与c/c++通信的一种机制,使得java与c/c++能够互相调用。 二、Android studio配置NDK路径 随便新建一个android项目,File》Project Structure 下载安装完成NDK后,local.properties文件可以看到SDK和NDK路径,如下图: 接着,gradle.properties文件增加一行: 三、增加生成.h头文件和ndk编译的快捷方式 1、创建生成.h头文件的快捷键,File》Settings》Tools》External Tools: 快捷键名称javah -jni,选中java文件,点击此快捷键就会生成对应的.h文件。 Program是JDK的javah.exe具体路径,$JDKPath$\bin\javah.exe。 Arguments是javah 编译后.h文件的保存位置,-classpath . -jni -d $ModuleFileDir$/src/main/jni/ $FileClass$。 Working

正确编译ijkplayer

醉酒当歌 提交于 2019-12-17 23:03:01
原文首发于微信公众号:躬行之(jzman-blog),欢迎关注交流! 最近项目中可能需要视频播放,而且后期还可能要支持播放 rtsp 协议的视频,权衡了一下还是通过编译 B 站开源的 ijkplayer 吧,ijkplayer 是一个基于 ffmpeg 的轻量级的可在 Android 和 Ios 上使用的跨平台播放器,可以通过编译来实现更多格式的支持,可以说只要是 ffmpeg 支持的格式 ijkplayer 就支持。 刚开始使用 Cygwin 进行编译,但总是在生成 so 文件的时候出错,当然中间还有很多要踩的坑,于是决定使用 Ubuntu 环境编译 ijkplayer,在 Ubuntu 环境下编译时基本没有什么问题,编译过程如下: 准备 配置环境变量 安装必须组件 正式编译 运行ijkplayer 准备 安装 VMware 虚拟机并安装 Ubuntu 系统,安装完 VMware 之后创建虚拟机,选择典型安装模式,如下图所示: 然后点击下一步,选择已经下载的系统镜像,如下图所示: 正确选择后会显示出镜像信息,如我选用的是 Ubuntu 64 位 18.04 ,然后继续下一步,如下图所示: 填写用户名、密码等信息,点击下一步,如下图所示: 填写虚拟机名称以及虚拟机要安装的位置,点击下一步: 设置虚拟机磁盘大小,为了不降低磁盘性能选择将磁盘存储为单个文件,然后点击下一步,如下图所示:

NDK开发中问题

夙愿已清 提交于 2019-12-11 10:32:09
1.前期ndk开发主要是在开源项目中复用项目的makefile等,就需要修改指定CC或C++编译链;具体情况还依赖于工程的config文件; 对于简单项目,则可以直接编写Android.mk;例如引入的GTest与GMock; 重新创建Android.mk,利用ndk-build生成.a文件,一同引入新ndk工程即可; 另外吐槽下Gmock;对于mock函数还需要继承类,比linux上的mock难用多了; 另外Gtest 也不支持静态对象的判断,对于函数内赋值,不能指望全局对象,只能判断输出参数或者返回值 JNI调用 C++ 回调java,不同线程间根据Jvm重新获取env不必再多解释 g_JavaVM->GetEnv((void **)&envnow g_JavaVM->AttachCurrentThread(&envnow 在保存class 对象时; g_DMClass = env->findclass("/com/example/controller") 即使g_DMClass 是全局对象也不行;也会遇到stable local ref ; 需要 jclass tmp = env->findclass("/com/example/controller"); g_DMClass = (jclass)env->NewGlobalRef(tmp);