NDK

NDK开发,没有你想象的那么难

人盡茶涼 提交于 2020-03-01 05:50:49
NDK:Native Development Kit原生开发工具 NDK能干什么:NDK使得在android中,java可以调用C函数库。 为什么要用NDK:我们都知道,java是半解释型语言,很容易被反汇编后拿到源代码文件,在开发一些重要协议时,我们为了安全起见,使用C语言来编写这些重要的部分,来增大系统的安全性。还有,在一些接近硬件环境下,相信大家都清楚C与java的优劣。顺带提一下: NDK并不能显著提升应用效率 。why?我们都觉得C语言比起java来说效率要高出很多,一方面,随着jdk的不断更新,java的效率也随之提高;另一方面,即便使用C语言编码提高了应用效率,但是在java与C相互调用时平白又增大了开销。 对于这些问题,这里就不多说了,希望详细了解的,请各位自行搜索。 NDK开发,第一步,当然是搭建环境 首先,去 http://developer.android.com/tools/sdk/ndk/index.html 下载你对应平台的开发工具 接着,我们需要实现linux环境 下载cygwin http://www.cygwin.com/ (对于64位的用户,可以直接下载我已经下载好的,百度的链接应该比在线安装快一些,正在上传到我的网盘,稍后将地址放在回复里面) 选择在线下载的朋友,建议选择下图的地址,(是国内的) 选择好下载源以后就是选择下载目录了

NDK学习笔记(二)使用JNI同原生代码通信

一个人想着一个人 提交于 2020-02-29 21:06:53
通常要使用 JNI 技术来实现 Java 应用程序和原生代码的通信。 任何使用JNI的操作都需要两次或者三次函数调用,因此要实现大量的原生方法并让它们同Java类保持同步很容易编程一件非常艰辛的工作。 而利用一些开源的方案则可以帮助我们基于现有的原生代码接口自动生成 JNI 的代码。 学习这项技术,首先需要搞清楚下面这些关键概念: 原生代码如何被Java代码调用到。 原生方法的声明。 从共享库加载原生模块。 使用 C/C++ 来实现原生方法。 原生方法的声明 在Java代码中使用native关键字可以声明原生方法,例如: public native String stringFromJNI(); 注意只是声明而已,“()”这对括弧后面直接就是分号了。 加载共享库 static { System.loadLibrary("hello-jni");//libhello-jni.so } 之所以要在静态代码块中调用 System.loadLibrary ,就是为了Java类首次加载和初始化时就能让原生代码的实现被载入。 在原生代码中实现声明的方法 原生代码是C/C++的,因此要有一个头文件明确要实现那些方法,JDK为我们提供了javah(头文件生成器)来根据已经编译好的class生成头文件,例如: javah –classpath bin/classes com.example

ubuntu下编译ffmpeg的过程

最后都变了- 提交于 2020-02-28 01:02:53
后续一段时间准备音视频相关知识的学习,所以先编译ffmpeg做练习用. 以最新版本的android api 29, ndk21, ffmpeg4.2,编译ffmpeg库文件. 1,环境配置, 1)安装yasm,如果没有安装会报nasm not found的错误. 下载 http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz 解压后,进入目录:cd yasm-1.3.0 执行配置 ./configure 编译 :make 安装 make install (这一步使用root权限) 2,ndk的配置, 1)下载 https://developer.android.google.cn/ndk/downloads/ 选择 linux版本的ndk 2)解压后,配置ndk环境 vim ~/.bashrc # 在文件末尾添加 export NDKROOT=/home/**/ndk/android-ndk-r21 exprot PATH=$NDKROOT:$PATH # 保存退出,更新一下环境变量 source ~/.bashrc 或者配置 ~/.profile文件,功能是类似的. .bashrc和.profile这两种配置环境参数的区别,大概时profile是以login方式进入bash环境运行的,意思是要用户登录才行;

NDK SO 库开发与使用中的 ABI 构架选择

喜欢而已 提交于 2020-02-28 00:34:08
Bugtags V1.2.7 引入了 NDK SO 库,在集成的时候,遇到不同的 SO 库打包到 APK 时,安装在某些机器上,出现 java.lang.UnsatisfiedLinkError 加载失败。 为此,深究了一下原理,和给出了解决方案。 原理 Android 系统本质是一个经过改造的 Linux 系统。最早,Android 系统只支持 ARMv5 的 CPU 构架,随着 Android 系统的发展,又加入了 ARMv7 (2010), x86 (2011), MIPS (2012), ARMv8, MIPS64 和 x86_64 (2014)。 每一种 CPU 构架,都定义了一种 ABI(Application Binary Interface),ABI 决定了二进制文件如何与系统进行交互。 一般情况下,你不需要关注这些。当你的 APP 中用到了些包含 SO 库第三方库,或者自己使用 NDK 来实现了某些功能,你就需要认真阅读接下来的教程。 NDK SO 支持不同的 CPU 构架 在使用 NDK 开发包含 c/c++ 代码的 SO 库的时候,你可以选择输出支持如下 ABI CPU 构架: armeabi armeabi­v7a arm64­v8a x86 x86_64 mips mips64 Bugtags 的 NDK 库支持如上所有的 CPU 构架:

转载NDK各版本地址下载

北城余情 提交于 2020-02-27 05:40:55
翻不了墙的话,可以用迅雷下载 最新版本r18 https://dl.google.com/android/repository/android-ndk-r18b-windows-x86.zip https://dl.google.com/android/repository/android-ndk-r18b-windows-x86_64.zip https://dl.google.com/android/repository/android-ndk-r18b-darwin-x86_64.zip https://dl.google.com/android/repository/android-ndk-r18b-linux-x86_64.zip 历史版本: https://dl.google.com/android/repository/android-ndk-r17c-windows-x86.zip https://dl.google.com/android/repository/android-ndk-r17c-windows-x86_64.zip https://dl.google.com/android/repository/android-ndk-r17c-darwin-x86_64.zip https://dl.google.com/android/repository

Android NDK带来什么???

落爺英雄遲暮 提交于 2020-02-22 00:01:47
转自: http://blog.csdn.net/hhao137/archive/2009/06/28/4304664.aspx 1、前言 6月26日,Google Android发布了NDK,引起了很多发人员的兴趣。NDK全称:Native Development Kit。下载地址为: http://developer.android.com/sdk/ndk/1.5_r1/index.html 。 2、误解 新出生的事物,除了惊喜外,也会给我们带来一定的迷惑、误解。 2.1、误解一:NDK发布之前,Android不支持进行C开发 在Google中搜索“NDK”,很多“Android终于可以使用C++开发”之类的标题,这是一种对Android平台编程方式的误解。其实,Android平台从诞生起,就已经支持C、C++开发。众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言。但这并不等同于“第三方应用只能使用Java”。在Android SDK首次发布时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全可以通过JNI调用自己的C动态库,即在Android平台上,“Java+C”的编程方式是一直都可以实现的。 当然这种误解的产生是有根源的:在Android SDK文档里

Android Studio NDK编程初探

◇◆丶佛笑我妖孽 提交于 2020-02-18 17:16:57
继上一篇学习了如何使用NDK编译FFMPEG后,接下来就是要学习如何在Android Studio中使用了。 经过参考和一系列的摸索,记录下具体步骤。 创建C++ Support的Android Studio工程 创建C++ Support的Android Studio工程,记得勾选,其他默认下一步就好 默认创建的项目会自动创建一个native-lib.cpp的文件,这个文件后面会编译成对应的so文件。在MainActivity中,系统默认添加了如下native代码: 1 public native String (); 打开native-lib.cpp文件,可以看到里面含有一个native方法。方法的命名格式 Java_包名_类名_方法名 中间的点分号改为下划线。 1234567891011 #include <string>extern "C"JNIEXPORT jstringJNICALLJava_com_example_simonzheng_ndktest_MainActivity_stringFromJNI( JNIEnv *env, jobject ) { std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c_str());} 编译运行默认的项目程序

TI通信开发套件NDK

…衆ロ難τιáo~ 提交于 2020-02-18 10:29:57
NDK开发套件的高效率设计 为了加速其高档DSP的网络化进程,TI公司结合其C6000系列芯片推出了TCP/IP NDK (Network Developer’s Kit)开发套件。 NDK主要的组件包括:(1)支持TCP/TP协议栈程序库。其中主要包含的库有:支持TCP/IP网络工具的库,支持TCP/IP协议栈与DSP/BIOS平台的库,网络控制以及线程调度的库(包括协议栈的初始化以及网络相关任务的调度)(2)示范程序。其中主要包括DHCP/Telnet客户端,HTTP/数据服务器示范等。(3)支持文档包括用户手册、程序员手册和平台适应手册。 NDK采用紧凑的设计方法,实现了用较少的资源耗费来支持TCP/IP。从实用效果看,NDK仅用200~250K程序空间和95K数据空间即可支持常规的TCP/IP服务,包括应用层的telnet、DHCP、HTTP等。为了最大限度地减少资源消耗,TI为其NDK采用了许多特殊的技巧,重要的有:(1)UDP socket和RAW socket不使用发送或接收缓冲区;(2)TCP socket使用发送缓冲区,接收缓冲区依配置文件而定;(3)低层驱动程序与协议栈之间通过指针传递数据,不对包进行复制拷贝;4、设置专门的线程清除存储器中的碎片和检查存储器泄露。因此,NDK很适合目前嵌入式系统的硬件环境,是实现DSP联网通信的重要支撑工具。

追索权 Eclipse + NDK error: stray '\\24' in program

為{幸葍}努か 提交于 2020-02-17 23:21:58
[size=16px][b][color=#FF0000]追索权 Eclipse + NDK error: stray '\24' in program[/color][b][/b][/b][/size] 最近的研究JNI采纳Eclipse+NDKR7B建好开发环境 依照网上教的步骤build 什么都配好了写了个最简单的样例,clean以后就出现该异常非常是头疼。异常信息: "Compile thumb : TestNdk <= com_example_testndk_JniClient.c jni/com_example_testndk_JniClient.c:1: error: stray '\24' in program jni/com_example_testndk_JniClient.c:1: error: stray '#' in program jni/com_example_testndk_JniClient.c:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'e' jni/com_example_testndk_JniClient.c:1: error: stray '\210' in program jni/com_example_testndk_JniClient.c:1:6

No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android

£可爱£侵袭症+ 提交于 2020-02-17 16:33:43
参考文章:https://blog.csdn.net/qq_37299249/article/details/90290468 重定向目录来解决: 进入 toolchains 目录下 创建软连接:将mips64el-linux-android指向aarch64-linux-android-4.9 注意其中 aarch64-linux-android-4.9是 当前已有目录。 在linux/mac下执行 ln -sf aarch64-linux-android-4.9 mips64el-linux-android 1 **在windows cmd 执行: mklink /j mips64el-linux-android aarch64-linux-android-4.9 来源: CSDN 作者: jia-huan 链接: https://blog.csdn.net/cjh_android/article/details/104358550