Eclipse之NDK配置

Android NDK 环境搭建,大牛最佳总结 最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的14套腾讯、字节跳动、阿里、百度等2020面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。ics/618156601)对大家有一个方向参考。 阅读详情
一、关于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,其实是执行Cygwin,然后传递ndk-build作为参数。在NDKr7开始,Google的Windows版的NDK提供了一个ndk-build.cmd的脚本,这样,就可以直接利用这个脚本编译,而不需要使用Cygwin了。只需要为Eclipse Android工程添加一个Builders,就能让Eclipse自动编译NDK。


本文是讲述NDK-r7下的实现实例。
下面是使用NDK-r7在windows下配置自动编译的builders的过程(实际上对于Linux,只需要修改ndk-build.cmd为ndk-build就可以了。)。
(1)先下载安装NDK-r7。
下载地址: http://developer.android.com/sdk/ndk/index.html
下载后解压缩就可以用了。
(2)打开Eclipse,新建一个Android工程(我的取名为TestNdk),在工程目录TestNdk下新建jni文件夹,该文件夹就用来保存NDK需要编译的文件代码等。
(3)新建并配置一个Builder:
  (a)Project->Properties->Builders->New,新建一个Builder。 
  (b)在弹出的【Choose configuration type】对话框,选择【Program】,点击【OK】: 
  (c)在弹出的【Edit Configuration】对话框中,配置选项卡【Main】。
       在“Name“中输入新builders的名称(我取名为Ndk_Builder)。
       在“Location”中输入nkd-build.cmd的路径。
      (我的是D:\AndroidDev\android-ndk-r7\ndk-build.cmd,根据各自的ndk路径设置,也可以点击“Browser File System…”来选取这个路径)。
       在“Working Diretcoty”中输入${workspace_loc:/TestNdk}(也可以点击“Browse Workspace”来选取TestNdk目录)。
 
  (d)【Edit Configuration】对话框中,配置选项卡【Refresh】。
      勾选“Refresh resources upon completion”,
      勾选“The entire workspace”,
      勾选“Recuresively include sub-folders”。
 
  (e)【Edit Configuration】对话框中,配置选项卡【Build options】。
      勾选“After a “Clean””,
      勾选“During manual builds”,
      勾选“During auto builds”,
      勾选“Specify working set of relevant resources”。
 
      点击“Specify Resources…”
      勾选TestNdk工程的“jni“目录,点击”finish“。 
点击“OK“,完成配置。
OK,到这里Eclipse就能够自动调用NDK编译jin目录下的C/C++代码了。
(4)在TestNdk工程中新建一个JniClient.class(为了调用C/C++代码) ,其内容如下:
[java]  view plain copy
  1. package com.ndk.test;  
  2.   
  3.   
  4. public class JniClient {  
  5.   
  6.   
  7.     static public native String AddStr(String strA, String strB);  
  8.     static public native int AddInt(int a, int b);  
  9. }  

(5)用cmd命令定位到JniClient.class 所在目录,输入“javac JniClient.java“后回车,生成JniClinet.class文件(如果是用的Eclipse建的工程,在TestNdk\bin\classes\com\ndk\test目录下就已经有JniClinet.class文件了)。
(6)将JniClinet.class拷贝到TestNdk\bin\classes\com\ndk\test目录,将cmd命令定位到TestNdk\bin\classes目录,输入”javah com.ndk.test.JniClient“后回车,在TestNdk\bin\classes目录下就生成了C++头文件com_ndk_test_JniClient.h。com_ndk_test_JniClient.h的文件内容如下:
[cpp]  view plain copy
  1. /* DO NOT EDIT THIS FILE - it is machine generated */  
  2. #include <jni.h>  
  3. /* Header for class com_ndk_test_JniClient */  
  4.   
  5.   
  6. #ifndef _Included_com_ndk_test_JniClient  
  7. #define _Included_com_ndk_test_JniClient  
  8. #ifdef __cplusplus  
  9. extern "C" {  
  10. #endif  
  11. /* 
  12.  * Class:     com_ndk_test_JniClient 
  13.  * Method:    AddStr 
  14.  * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; 
  15.  */  
  16. JNIEXPORT jstring JNICALL Java_com_ndk_test_JniClient_AddStr  
  17.   (JNIEnv *, jclass, jstring, jstring);  
  18.   
  19.   
  20. /* 
  21.  * Class:     com_ndk_test_JniClient 
  22.  * Method:    AddInt 
  23.  * Signature: (II)I 
  24.  */  
  25. JNIEXPORT jint JNICALL Java_com_ndk_test_JniClient_AddInt  
  26.   (JNIEnv *, jclass, jint, jint);  
  27.   
  28.   
  29. #ifdef __cplusplus  
  30. }  
  31. #endif  
  32. #endif<span style="font-family:'Comic Sans MS';"><span style="font-size: 18px;">  
  33. </span></span>  



(7)在jni目录下新建一个Android.mk文件,其内容如下(详细的语法以后再另外解释):
[html]  view plain copy
  1. LOCAL_PATH := $(call my-dir)  
  2. include $(CLEAR_VARS)  
  3. LOCAL_MODULE := TestNdk  
  4. LOCAL_SRC_FILES := com_ndk_test_JniClient.c  
  5. include $(BUILD_SHARED_LIBRARY)  


(8)将com_ndk_test_JniClient.h拷贝到TestNdk工程的jni目录下, 然后新建一个com_ndk_test_JniClient.c文件完成头文件中函数的实现,其内容如下(本来Java_com_ndk_test_JniClient_AddStr是想完成字符串相加的功能的,但数据转换有点问题,想先写完本文档,后续再研究jni数据类型的问题,所以只简单的返回一个字符串。):
[cpp]  view plain copy
  1. #include "com_ndk_test_JniClient.h"  
  2. #include <stdlib.h>  
  3. #include <stdio.h>  
  4.   
  5.   
  6. #ifdef __cplusplus     
  7. extern "C"    
  8. {     
  9. #endif    
  10. /* 
  11.  * Class:     com_ndk_test_JniClient 
  12.  * Method:    AddStr 
  13.  * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; 
  14.  */  
  15. JNIEXPORT jstring JNICALL Java_com_ndk_test_JniClient_AddStr  
  16.   (JNIEnv *env, jclass arg, jstring instringA, jstring instringB)  
  17. {  
  18.     jstring str = (*env)->NewStringUTF(env, "HelloWorld from JNI !");  
  19.     return str;         
  20. }  
  21.   
  22.   
  23. /* 
  24. * Class:     com_ndk_test_JniClient 
  25. * Method:    AddInt 
  26. * Signature: (II)I 
  27. */  
  28. JNIEXPORT jint JNICALL Java_com_ndk_test_JniClient_AddInt  
  29.   (JNIEnv *env, jclass arg, jint a, jint b)  
  30. {  
  31.     return a + b;  
  32. }  
  33.   
  34.   
  35. #ifdef __cplusplus     
  36. }     
  37. #endif<span style="font-family:'Comic Sans MS';font-size:18px;">  
  38. </span>  



编辑com_ndk_test_JniClient.c并保存后,可以看到TestNkd工程下的obj/local/armeabi目录下将自动生成libTestNdk.so库。


(9)在TestNdkActivity.java中完成对JniClient.java中函数的调用:
[java]  view plain copy
  1. package com.ndk.test;  
  2.   
  3.   
  4. import android.app.Activity;  
  5. import android.os.Bundle;  
  6. import android.widget.TextView;  
  7.   
  8.   
  9. public class TestNdkActivity extends Activity {  
  10.     static {  
  11.         System.loadLibrary("TestNdk");  
  12.     }  
  13.   
  14.   
  15.     /** Called when the activity is first created. */  
  16.     @Override  
  17.     public void onCreate(Bundle savedInstanceState) {  
  18.         super.onCreate(savedInstanceState);  
  19. //        setContentView(R.layout.main);  
  20.           
  21.         String str = JniClient.AddStr("prefix", "suffix");  
  22.           
  23.           
  24.         int iSum = JniClient.AddInt(5, 2);          
  25.         String strSum = "5 + 7 = " + iSum;  
  26.           
  27.         TextView tv1 = new TextView(this);  
  28.         tv1.setText(str);  
  29.         setContentView(tv1);  
  30.     }  
  31. }  


(10)运行TestNdk工程,在模拟器中可以看到界面输出来自com_ndk_test_JniClient.c 文件中的“HelloWorld from JNI ! “。


OK,NDK实例到此完成。后续就可以深入的学习NDK/JNI了,比如C/C++与Java的数据类型转换,Android.mk文件的编写格式等。
VSCode终端打不开?3分钟搞定Windows下Terminal配置(附最新JSON设置方法) 本文针对Windows系统下VSCode终端无法启动的常见问题,提供了详细的诊断与解决方案。核心在于更新已弃用的旧配置,采用最新的JSON设置方法,通过定义`terminal.integrated.profiles.windows`和指定`terminal.integrated.defaultProfile.windows`,快速修复并优化终端配置,实现三分钟内恢复正常使用。 阅读详情

相关推荐

STM32H743 ADC校准失败排查:HAL_ADCEx_Calibration_Start()的正确调用时机

本文深入剖析了STM32H743 ADC校准失败的核心原因,即错误地在ADC使能状态下调用HAL_ADCEx_Calibration_Start()函数,导致读数漂移。文章详细解释了校准必须在ADC禁用状态下进行的硬件原理,列举了典型错误场景,并提供了上电初始化与周期性重校准的正确代码实践,帮助开发者彻底解决ADC精度问题。

ik678901的博客 1177

eclipse中jni调试本地C++代码步骤

1. 准备ndk_r4, sdk 2.2, eclipse, ant 2. 我对hello-jni的代码做了点修改,参考附件代码 3. shell进入ndk/samples/ 运行android update project --path hello-jni 进入ndk/samples/hello-jni 运行ndk-build 运行ant debug 启动android模拟器(可以

fhy_2008的专栏 5611

实测|龙虾机器人(OpenClaw)Windows系统部署全攻略(含避坑指南)

先简单科普下:龙虾机器人本质是一款开源AI代理框架,核心优势是“能行动、可本地、高灵活”——它不内置大模型,需要对接第三方AI接口(如GPT、Claude、阿里云百炼等),但能将AI的指令转化为实际的系统操作,相当于给AI配了一个“能动手的身体”,这也是它和普通对话大模型的核心区别。今天就结合自己的实测经历,从环境准备、分步部署、初始化配置,到常见问题排查,写一篇保姆级攻略,不管是新手还是有一定技术基础的同学,都能跟着一步步完成部署,少走弯路~解决方案:检查聊天软件插件是否安装成功,权限是否配置完整;

wohaiweifaju的博客 1万+

09.Android之NDK-r7基础与实例

一、关于NDK: NDK全称:Native Development Kit。 1、NDK是一系列工具的集合。 NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。 NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要

jjunjoe的专栏 3654

RealSense D455的标定并运行VINS-FUSION

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

qq_40186909的博客 2万+

Keil C51里用printf打印数据,为啥总出乱码?手把手教你%bd、%hd、%ld的正确用法

本文深入解析Keil C51中printf打印数据出现乱码的根本原因,并提供格式符%bd、%hd、%ld的正确用法指南。通过详细的调试技巧和实战案例,帮助开发者解决串口输出问题,提升单片机开发效率。

weixin_26854829的博客 281

Eclipse开发NDK

1. 概念了解: 交叉编译: 在一个平台下,编译另外一个平台能够执行二进制的代码 windows下编译 成android 平台可以运行的汇编 工具: ndk cdt: Eclipse开发c/c++插件 , 如果eclipse没有安装需要安装,查看是否安装该插件 ##NDK目录结构 * docs:帮助文档: HOW TO:相当于index * ...

dreams_deng的博客 2726

通讯软件019——分分钟学会Prosys OPC UA Server配置

本文介绍如何配置Prosys OPC UA Simulation Server,通过本文可以对OPC UA的基本概念有所了解,掌握OPC UA的本质。

zhouwl72的博客 4302

从零开始使用Eclipse搭建NDK项目

事前准备: 下载Android-ndk-r10e-windows-x86_64.exe   官网地址:http://developer.android.com/ndk/downloads/index.html. 百度网盘:http://pan.baidu.com/s/1jHmYkzc 下载完成后把文件移动到工作目录,注意路径中不要带有中文和空格.  双击exe文件会执行解压,但是

过期的码农 670

语音算法面试复习系列3——语音识别基础 + CTC 详解

摘要:本文系统讲解了语音识别(ASR)的核心算法CTC。主要内容包括:1) ASR的核心挑战是输入音频帧与输出文字序列的对齐问题;2) CTC通过引入blank标记和动态规划算法,无需对齐标注即可训练;3) 详细解析CTC前向算法实现路径概率求和,以及贪心和Beam Search解码方法;4) 指出CTC的条件独立性假设导致无法建模输出依赖关系;5) 对比CTC与传统方法和Attention/Transducer的优缺点,分析实际应用中的subsampling技术。文章包含数学推导、代码实现和面试常见问题,

m0_60605453的博客 305

地平线J6的基础简介

地平线J6M芯片:面向中阶辅助驾驶市场的高性价比芯片

weixin_43084908的博客 4462

Eclipse中ndk配置

eclipse中ndk的配置

飞翔的小鸟 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

eclipse配置NDK环境

eclipse配置NDK环境 由于公司还有还多eclipse上的工程,并且都在维护,不得以还在使用eclipse进行开发,一直来没有把NDK和eclipse结合好,今天抽空做完了这个事情,特此记录,希望对某些童鞋有点帮助。 一、下载NDK并配置环境变量。 推荐下载r10及以上版本的ndk,r9及以下的版本是不支持编译64位处理器的.so库的,请大家注意一下。不会配置环境变量的童鞋

superbigcupid的专栏 4759

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Eclipse NDK 配置

一、关于NDK: NDK全称:Native Development Kit。  1、NDK是一系列工具的集合。  NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。  NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要

记忆沉思 1395

jre9下载 jdk9

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

Eclipse下NDK配置的问题

因为要做图像处理的Android应用程序,需要用到Opencv,结果发现还需要NDK的配置,好在andorid-ndk-r7之后都不需要安装Cygwin真是太好了。下面我就说说在我配置时遇到的问题解决办法,有一些参照百度的内容,但是并非那些方法都适用我。 首先是NDK的下载: 我用的是第三个链接:https://developer.android.google.cn/ndk/downl

cobbwho的博客 6938

在Eclipse下配置NDK

按自己配置的经验整理出详细步骤如下: 1)  下载NDK,解压出来,直接可用。(可以不添加环境变量) 2)   在Eclipse中配置NDK路径:Window->Preference->Android->NDK 3)   新建Android工程,新建含本地方法的类[A],方法声明为native 4)   在工程目录下新建jni文件夹 5)   控制台进入类A所在目录,使用命令:javac

SteadySpace的专栏 979

关于在Eclipse中配置NDK环境。

首先需要安装NDK. 下载Cygwin  setup.exe。最好一路默认安装下来,选择下载的地址为:http://mirrors.163.com,相对来说,163的更新还是比较块的。 更新文件只选择Devel为install. 安装完成后,通过运行cygcheck -c cygwin来检查是否安装成功. gcc --version显示Gcc的运行状况。 g++ --version, ma

synge33的专栏 2万+

Linux下Android NDK环境配置以及配合eclipse使用NDK

<!-- p {margin-bottom:0.21cm} pre.western {font-family:"DejaVu Sans Mono",monospace} pre.cjk {font-family:"DejaVu Sans",monospace} pre.ctl {font-family:"DejaVu Sans Mono",monospace} -->

zhouyuanjing的专栏 7071

eclipse里配置Android ndk环境,用eclipse编译.so文件

做Android NDK开发时,c代码需要用ndk-build来进行编译,而java代码则需要用Android sdk编译。 编译c代码有两种方法: 一、写好c代码后,然后用cygwin搭建ndk-build环境,用ndk-build来编译出相关的.so文件(libs目录)之后,       再用eclipse里去编译java程序,从而使用.so文件。该方法在上一篇搭建NDK环境有介绍。

yanzhibo的专栏IlgawME)Y*Ml 2万+

Eclipse下的 NDK 环境配置

Eclipse下的 NDK 环境配置JNI与NDK的开发准备JNI原生开发流程(Eclipse)基本流程详细流程补充说明NDK集成开发流程(Eclipse)基本流程详细流程补充说明重要配置 JNI与NDK的开发准备 JNI原生开发流程(Eclipse) 基本流程 在Java类中定义native方法 生成包含对应JNI函数声明的头文件 实现生成的JNI函数 借助NDK编译生成动态链接库文件(.so...

weixin_42814000的博客 522

eclipse 配置ndk,sdk和svn

在这里记录一下吧,之前配置这些东西的,然后很久没用,给忘了。 1.eclipse     首先安装一个jdk(http://www.oracle.com/technetwork/java/javase/downloads/index.html)版本随便选一个咯。不过当前的win系统要选对,我就是64的系统选了一个32的,会报错显示13的错误。然后配置一下环境变量,这个很简单。     下载一

zs10hz的专栏 787

eclipse NDK配置

Eclipse NDK 配置   一、关于NDK: NDK全称:Native DevelopmentKit。  1、NDK是一系列工具的集合。  NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。  NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需

Just Do IT 858

NDK环境配置 之Eclipse

在上一篇中介绍了NDK,接下来介绍一下NDK环境的搭建。结合我自己的使用情况,这里会介绍三种NDK环境的搭建,一种是在Eclipse下使用NDK工具编译so库;另外一种是在Android Studio中使用NDK工具编译so库;还有一种是在Linux环境下,通过命令行来生成so库。          1.首先先来介绍在Eclipse环境下,配置NDK编译环境。

chewbee的专栏 1046
上一篇: Android之远程图片获取与本地缓存
下一篇: Android之如何避免系统回收
cicilover
博客等级 码龄18年 47粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值