原文网址:http://blog.csdn.net/conowen/article/details/7521340 ******************************************************************************************** * author:conowen@大钟                                                                                …
1.JNI简介 JNI全称为Java Native Interface(Java本地调用).从Java1.1开始,JNI成为java平台的一部分,它允许Java代码和其他语言写的代码(如C&C++)进行交互.并非从Android发布才引入JNI的概念的. 2.JNI与NDK 简单来说,Android的NDK提供了一些交叉编译工具链和Android自带的库,这些Android的库可以让开发者在编写本地语言的程序时调用.而NDK提供的交叉编译工具链就对已经编写好的C&C++代码进行编译,生成库…
1. 在Android的Java层实现文件的读写操作是非常简单的,可以参看之前写的博文:http://blog.csdn.net/conowen/article/details/7296121 在JNI层实现文件的读写操作的话,就要使用到Linux的读写函数了. 2.打开文件 int open( const char *pathname,int flags, int mode); 返回值:为一个文件句柄(fd),供read.write等操作. 参数: pathname: 打开的文件所在路径字符串…
Android之NDK开发 一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言.但这并不等同于“第三方应用只能使用Java”.在Android SDK首次发布时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全可以通过JNI调用自己的C动态库,即在Android平台上,“Java+C”的编程方式是一直都可以实现的.…
转自:http://www.cnblogs.com/devinzhang/archive/2012/02/29/2373729.html 一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言.但这并不等同于“第三方应用只能使用Java”.在Android SDK首次发布时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完…
原文网址:http://www.cnblogs.com/devinzhang/archive/2012/02/29/2373729.html 一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言.但这并不等同于“第三方应用只能使用Java”.在Android SDK首次发布时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应…
http://www.cnblogs.com/devinzhang/archive/2012/02/29/2373729.html 一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于 Android SDK进行开发的第三方应用都必须使用Java语言.但这并不等同于“第三方应用只能使用Java”.在Android SDK首次发布 时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全…
Android Studio NDK 开发 记录在Android Studio中NDK简单开发的步骤 用到的Android Studio版本为3.5. 配置NDK 下载NDK 一般在SDK下已经有自带的ndk文件夹,如sdk目录下的ndk-bundle文件夹. 如果没有,可以在SDK Manager中下载 下载LLDB.NDK两项 下载完成后,可以在sdk目录下看到ndk的文件夹 配置环境变量 我的电脑-属性-高级系统设置-环境变量 新建一个ANDROID_NDK变量,配置上ndk文件夹的位置(…
Android下NDK开发环境搭建 1.     AndroidNDK安装与配置 1.1  NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP部分功能开发的工具,通过这个工具,我们可以把用C/C++代码编译成可以直接运行在Android平台上的本地代码,这些本地代码以动态链接库( *.so )的形式存在,也正因为这样,我们可以通过复用这些动态链接库从而复用本地代码. 那么,通过NDK这个开发工具包,那么我们是否可以将一个APK完全使用C/C…
相对于NDK来说SDK里面有更多API可以调用,有时候我们在做NDK开发的时候,需要在JNI直接Java中的方法和变量,比如callback,系统信息等.... 如何在JNI中调用Java方法呢?就需要先了解FindClass和GetMethodID了. FindClass和GetMethodID 在JNI中可以通过FindClass可以找到Java类,得到jclass,例如: jclass clz=(*env)->FindClass(env,"com/jjz/JniHandle"…
描述:http://talent.baidu.com/external/baidu/index.html#/jobDetail/2/1237247043 android studio实现Jni(C/C++)单步调试方法步骤-标准配置教程 NDK DEBUG方法 Android NDK开发Crash错误定位 详解C中volatile关键字 图像处理代码优化:例子 okHttp使用及其优势 Android 框架练成 教你打造高效的图片加载框架 Android Studio中JNI程序的单步调试和日志…
     在我写这篇文章的时候,Android Studio已经是2.3版本了,已经集成CMake 编译工具, 用户只需在 新建项目的时候,添加选项(Include C++ support),Android Studio就会自动 帮你部署好相应的NDK环境.但我还是想尝试使用 Android.mk 配置文件方式来实现NDK开发, 了解其配置的原理,然后再使用 CMake 来部署,这样能了解两者间的区别.后续的文章就会写 到用CMake来部署NDK环境.        假设你已经安装好了 Andr…
前言 本博客写于2017/08/11, 博主非专业搞安卓开发, 只是工作的需要倒腾了下Android NDK相关的开发, 博文中有什么不正确.不严格的地方欢迎指正哈    本文后续也许还会有删改, 就这样. 一.工具.开发环境 博主的操作系统是Windows 10 x64位,虽然感觉Windows 7更适合用来搞开发, 但是用着Win 10也是挺好使的(没必要在操作系统上有很大纠结,Win 10和Win 7都可以). 1.搭建并测试JAVA开发环境 首先要搭建Java开发环境,Java开发环境的…
需要的软件: android-ndk-r9-windows-x86_64.zip(我的系统是64位的,所以下载的是64的)下载地址:http://developer.android.com/tools/sdk/ndk/index.html#Downloads adt-bundle-windows-x86_64-20130917(这个ADT Bundle包含了C/C++开发环境CDT.Sequoyah插件)下载地址:http://developer.android.com/sdk/index.ht…
ndk 开发没什么神秘的ndk 说白了就是一个交叉编译的工具链,用它来生成各个CPU架构下的静态或动态链接库,linux 下就是 .a 和 .so 文件.原理就是 java 通过 JNI 和 C.C++ 进行交互, 主要用于有大量计算的CPU密集型任务,如游戏和图形图像渲染等.在安全方面核心代码也经常打成 .so 文件,一方面是各个平台复用,另一方面是增加逆向破解的难度.生成 .so 文件后打包到 apk 中的 lib 文件夹下就行了. 最原始的方法,native 代码写完后用 ndk 工具生成…
编辑2016年7月26日——增加了下载网址,修改了一些错误. 摸索了一周,走了很多弯路,磕磕绊绊,总算是弄好了NDK的开发环境,在这里总结一下吧. 一.Android NDK开发环境 首先下载安装JRE.JDK,不必多说.然后下载NDK包,建议下载r11版本后的,自带C/C++的编译器, 不需要使用外部编译器的麻烦了,而且同时支持32位和64位的ARM处理器.下载完NDK包后,解压缩即可,需要之后关联到Eclipse.然后下载ADT Bundle,即安卓开发工具套装,里面集成好的Eclipse的…
开发环境: Android studio 1.0.2 ndk android-ndk-r10d-windows-x86_64 ------------------------------------ #1. 创建工程.在MainActivity下添加native 方法 #2. 编译得到头文件, 在main/jni 目录下 #3. 实现头文件中的方法 #4. 在 local.properties 中添加本地ndk 所在的路径 #5. 在build.gradle 文件中添加ndk 节点 #6. 调用…
1.Android NDK简介 NDK全称为native development kit本地语言(C&C++)开发包.而对应的是经常接触的Android-SDK,(software development kit)软件开发包(只支持Java语言开发). 简单来说利用NDK,可以开发纯C&C++的代码,然后编译成库,让利用Android-SDK开发的Java程序调用.NDK开发的可以称之为底层开发或者jni(java native interface)层开发,SDK开发可以称为上层开发. 2…
在最新的Android Studio2.2的preview版中,增加全新的ndk支持,使用了新的gradle,以及DSL语言. 新的NDK需要使用新的Gradle插件和新的Android插件来支持! gradle-experimental plugin 修改项目(project)的buidle.gradle文件,使用全新的gradle插件: buildscript { repositories { jcenter() } dependencies { classpath 'com.android…
一.Android OpenSL ES 介绍 OpenSL ES (Open Sound Library for Embedded Systems)是无授权费.跨平台.针对嵌入式系统精心优化的硬件音频加速API.它为嵌入式移动多媒体设备上的本地应用程序开发者提供标准化, 高性能,低响应时间的音频功能实现方法,并实现软/硬件音频性能的直接跨平台部署,降低执行难度,促进高级音频市场的发展.简单来说OpenSL ES是一个嵌入式跨平台免费的音频处理库. Android的OpenSL ES库是在NDK的…
一.实现说明 OpenSL ES的录音要比播放简单一些,在创建好引擎后,再创建好录音接口基本就可以录音了.在这里我们做的是流式录音,所以需要用至少2个buffer来缓存录制好的PCM数据,这里我们可以动态创建一个二维数组,里面有2个buffer,然后每次录音取出一个,录制好后再写入文件就可以了,2个buffer依次来存储PCM数据,这样就可以连续录制流式音频数据了,二维数组里面自己维护了一个索引,来标识当前处于哪个buffer录制状态,暴露给外部的只是调用方法而已,细节对外也是隐藏的. 二.编码…
一.开篇 写博客还得写开篇介绍,可惜,这个不是我所擅长的.就按我自己的想法写吧. 话说camera模块,从上层到底层一共包含着这么几个部分: 1.apk------java语言 2.camera的java接口----java语言 3.camera的java接口的具体实现,即所谓的JNI-----(java—>C++) 4.camera客户端-----C++语言 5.camera服务器----C++语言 6.camera硬件抽象层,即所谓的HAL------C++语言 7.camera驱动 如上也…
一.开篇 写博客还得写开篇介绍,可惜,这个不是我所擅长的.就按我自己的想法写吧. 话说camera模块,从上层到底层一共包含着这么几个部分: 1.apk------java语言 2.camera的java接口----java语言 3.camera的java接口的具体实现,即所谓的JNI-----(java—>C++) 4.camera客户端-----C++语言 5.camera服务器----C++语言 6.camera硬件抽象层,即所谓的HAL------C++语言 7.camera驱动 如上也…
一.开篇 写博客还得写开篇介绍,可惜,这个不是我所擅长的.就按我自己的想法写吧. 话说camera模块,从上层到底层一共包含着这么几个部分: 1.apk------java语言 2.camera的java接口----java语言 3.camera的java接口的具体实现,即所谓的JNI-----(java—>C++) 4.camera客户端-----C++语言 5.camera服务器----C++语言 6.camera硬件抽象层,即所谓的HAL------C++语言 7.camera驱动 如上也…
必读: Android 12(S) 图像显示系统 - 开篇 接口定义 源码位置:/hardware/interfaces/graphics/composer/ 在源码目录下可以看到4个版本的HIDL Interface定义,最新版本是2.4,也是目前我的测试平台在用的,不同版本使用带有版本号的包名来区分,例如 :package android.hardware.graphics.composer@2.4各版本中均有相同的接口,并且具有继承关系,新版本继承旧版接口并扩展了新方法. /framewo…
在Java中有两类数据类型:primitive types,如,int, float, char:另一种为reference types,如,类,实例,数组. 注意:数组,不管是对象数组还是基本类型数组,都作为reference types存在,有专门的JNI方法取数组中每个元素. 1.void java的void与JNI的void是一致的. 2.基本数据类型 3.对象类型 相比基本类型,对象类型的传递要复杂得多.不能对Jstring进行直接操作. //如下使用方式是错误的,因为jstring不…
转至:http://blog.csdn.net/conowen/article/details/7524744 1.JNINativeMethod 结构体的官方定义 typedef struct { const char* name; const char* signature; void* fnPtr; } JNINativeMethod; 第一个变量name是Java中函数的名字. 第二个变量signature,用字符串是描述了Java中函数的参数和返回值 第三个变量fnPtr是函数指针,指…
环境搭建 1.安装ndk 2.安装cygwin (android是基于linux的Framework,运行的本地库是.SO,而不是.dll库,大部分都实在windows下开发,如果是linux就没这个必要) 3.安装cygwin时候,在安装包时候,要安装Devel下面的gcc-core,g++,make三个包 配置cygwin环境 配置,为ndk的安装目录加进path.验证是否成功:打开cygwin,输入ndk-build,看是否执行 实现一个java层调用c语言实现的两个整数相加功能的函数,本…
先使用android stuido创建一个app工程,创建工程的时候,.gradle目录结构下为2.8目录.(note:2.10目录为后续更新结果出现.) 依次修改上述红色方框标注部分内容: 1)修改gradle/wrapper/gradle-wrapper.properties目录内容:   2)修改工程目录下的build.gradle,主要是修改gradle插件这部分内容:     3)修改app/build_gradle内容: 修改前原始内容: apply plugin: 'com.and…
一.   下载安装Android studio 和 NDK 二.   在Android studio中配置NDK(和SDK配置一样) 三.   用Android studio建立一个工程,打开project,建立一个调用C的类,然后在mian文件夹下建立一个jni文件夹. 四.   打开cmd ,输入cd 工程文件夹路径,如cd C:Users\CFF\Desktop\MyApplication\app\src\main\java,然后按回车. 五.   输入javah –jni +调用C的类路…