把NDK集成到Eclipse

Window NDK下载以及环境变量配置 前言 NDK是开发者必不可少的一部分,所以这里记录下NDK的下载安装以及环境变量配置 这里我是通过Android进行下载的 步骤一 NDK下载安装 1.安装NDK 路径载File-Setting中 2.这里下载完成之后有可能会出现 NDK Not Platform 情况,如果出现这种情况,在装一个NDK包即可 3.安装完成之后打开 File-Onther Settings-Default Project Structrue…检查下配置,如果入如下图一样,出现了NDK的版本号,那就说明安装好了,下面一起来 阅读详情

前言

       最经在看Android方法的基础知识,看到一篇文章(http://www.rbgrn.net/content/348-get-your-eclipse-integrated-ndk-on)介绍如何把Android的NDK集成到Eclipse,顺便就把它翻译过来。

       注:

技术名称保留不译,比如Cygwin
Eclipse(英文版)的界面文本不译,比如按钮(Specify Resources)。
括号内的内容,是我添加的注释。
 

 

翻译正文:

       在Android的游戏开发中,你迟早会发现有必要把部分代码跑得更快。用C写的Android代码比同样的Java版本,快上10~100倍。我可以证实这个事实,在我最新的3D游戏引擎中,我把部分组件用原生程序(即用C/C++写代码,编译成二进制的动态链接库文件)重写。

这样带来了极大的性能提升,但我们也不得不面对这么一个事实:Eclipse对Java的开发提供了极佳的支持的同时,对C的开发却极其糟糕。Eclipse不适合C的开发,对吗?错,现在向你展示如何在Eclipse中,建立一个快速的NDK开发环境。

       首先声明一点,Eclipse不仅仅适合于开发Java应用程序。Eclilpse为Java开发提供了极好的支持,它的设计初衷也是为了Java。但得益于它的设计架构,Eclipse能够为包括C语言在内的任何语言的开发提供支持。一个名为CDT的插件,使得在Eclipse里能对C/C++进行开发。尽管我说得有些过了头。接下来这些,是你所需要的:

Android NDK(Native Development Kit)http://developer.android.com/sdk/ndk/1.6_r1/index.html

Eclipse CDT(C Development Tooling) http://www.eclipse.org/cdt/

如果用的是windows操作系统,你需要安装Cygwin,并安装上重要的包(特别是GCC和Make)。

       接下来的步骤是:

       安装上述三个包。我把NDK安装到C:/Android_NDK。在后面的文章中,我都默认为该目录是NDK的安装目录。

       为了熟悉NDK,在C:/Android_NDK/apps目录中,你需要配置每个项目的“app”。就像NDK中的例子一样,它们能够正确编译运行,并要求严格的配置。

       测试NDK的办法:

       启动cygwin

       cd /cygdrive/c/Android_NDK

       make APP=hello-jni

       根据上述的步骤,你将能够正确编译。如果cygwin漏装了GCC、Make或者其它开发包,你有必要重新安装Cygwin,并且确保全部必要的开发包已经安装。如果你遇到什么特殊的错误,我建议把这些错误报告给NDK用户组。

       一旦NDK能够正常工作,你就能够添加和配置好你的NDK开发项目。参考NDK的example一样,你需要一个详细的build文件(Android.mk),该文件告诉NDK编译器编译什么文件。JNI代码文件通常放在应用程序项目的jni文件夹下。该目录下的Android.mk文件指引NDK编译器如何编译程序。

       在完成这些基本配置后,你会想去写C代码。NDK使用Java标准的JNI技术实现。大量的关于JNI的文档在这里都适用。怎样去编写JNI代码,已经超出了本文的范畴。

       接下来是有用的部分:

       如果开发过NDK程序,你很有可能习惯使用文本编辑器或者vim去编辑的你C/C++代码,然后使用make APP=myapp的命令来编译,接着点击更新在Eclipse中的项目,最后盼望着那已部署上的共享库是最新的。多么痛苦的一件事啊!其实,有一个更好的方法。

       目前,已经安装上了CDT,你就可以在Eclipse中编译你的C/C++文件。右击C/C++源文件,选择使用C/C++编辑器打开,就能够使用CDT编译器了。多友好!因为尚未编译C/C++源文件,你并不清楚代码正确与否。但这也使得你更友好地在一个界面下编辑代码。

       生成项目也是快速而灵活的。你曾经使用过Eclipse的生成器吗?它们是一些可配置的开关,用于执行你所配置的命令和刷新工程资源。以下是我的配置:

       右击你的项目,选择“properties”

       在左边的列表中选择“Builders”

       在右侧,点击“New…”按钮

       在列表框,选择“Program”作为配置类型;点击“OK”按钮,进入下一个配置对话框。

       命名name为“Native Builder”

       选择Location为“c:/cygwin/bin/bash.exe”

       “Working Directory”为“c:/cygwin/bin”

       “Arguments”为:

--login –c “cd /cygdrive/c/Android_NDK && make APP=myapp”

确保在login前有两个连接号,-c后面的引号。

       接着打开“refresh”的tab面板:

       选中“Refresh resources upon completion”

       选择“Specific resources”

       点击“Specify resources”按钮,选择你项目的lib目录

       选中“Recursively include sub-folders”

       接着打开“Build Options”的tab面板:

       选中“Allocate Console”

       选中“Launch in background”

       选中“Run the builder After a Clean”

       选中“Run the builder During manual builds”

       选中“Run the builder During auto builds”

       选中“Specify working set of relevant resources”

       点击“Specify Resources”按钮,选择你项目的JNI目录,并包含所有的文件。

       点击“OK”按钮。

       这里假设:cygwin安装在c:/cygwin;NDK安装在c:/Android_NDK;项目工程名称是“myapp”。根据你的安装配置,相应地替换这些参数。

       你刚刚做了什么呢?你使得,在JNI的目录下,每次修改任何文件,Eclipse都通过cygwin自动启动NDK编译你的工程,并在控制台输出编译信息。当它编译完成,将自动刷新工程输出目录(lib),并触发ADT生成一个新的APK安装包。这一切都极其简便。

       把NDK集成到Eclipse,实实在在地加速了我当前项目的开发进度。希望你能够在文本中受益。

 

 

后记:

本来把NDK集成到Eclipse的步骤是比较简单,本文的作者却比较“啰嗦”(美国很大一部分作者都有这种偏好),但看起来也更有意思了!
第一次干翻译这活,不轻松,经常需要反复推敲。本文不太难,不过开个好头,今后在写作、英语、阅读要多加强锻炼。

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/lizhongkan/archive/2010/01/30/5271606.aspx

Eclipse与Android NDK集成的全面指南 本文还有配套的精品资源,点击获取 简介:本教程详细介绍了在Eclipse开发环境中集成Android NDK的整个过程,适合进行混合式Android应用开发的开发者。内容涵盖了环境配置、Eclipse配置、项目创建、NDK集成、构建和调试以及注意事项,是学习如何在Eclipse中高效使用Android NDK的完整指南。 1. 环境安装与配置 1.1 开发环境的... 阅读详情

相关推荐

AIDE插件c++中文版免费版打包

包含:AIDE_3.2.1910.apk中文版、aide ndk.apk、ndk数据包。免手机root

AIDE_ndk_C++安装

AIDE和C++插件安装

anzhuoaaaanzhuo的博客 1万+

aide可用的ndk亲测可用

aide可用的ndk亲测可用

最新NDK下载(包含32位和64位)

32位的NDK: 链接:http://pan.baidu.com/s/1mg5wnMC 密码:08bo 64位的NDK: 链接:http://pan.baidu.com/s/1jGlhA0A 密码:xnag

drinkingcode 1万+

Rstudio安装org.Hs.eg.db

自己也是个小白,初次安装org.Hs.eg.db碰到好多问题,步骤总结如下: 第一,instal.packages()安装,不行则换 BiocManager::install() 第二,如BiocManager不成,说明不是最新版本,可按提示安装最新版 BiocManager::install(version = '3.13') #由于R版本较新,按照提示中的相关信息,安装最新版本的 第三,再次安装 BiocManager::install("org.Hs.eg.db") 第四,之后每个人.

ZH_DDong的博客 2万+

保姆级教程:在RK3568上搞定PR2100K+GC2385双摄(从DTS配置到HAL层补丁)

本文详细介绍了在RK3568平台上调试PR2100K+GC2385双摄系统的完整流程,从DTS配置到HAL层补丁。涵盖硬件连接、媒体控制器拓扑验证、Camera3配置、HAL层特殊补丁及性能优化等关键步骤,帮助开发者快速解决双摄调试中的常见问题,提升嵌入式视觉系统开发效率。

weixin_28724661的博客 195

Android NDK Win10安装及环境变量配置(图文详细教程)

之前因为工作原因需要用到Android NDK ,但是由于我是Unity开发,平时一般不会用这个,所以电脑上经常配置好环境。因此这里做一个简易的保姆级傻瓜教程,作为学习总结,以后有需要可以无脑一步步照做。

魔术师Dix的博客 1万+

南邮-软件设计实验(C++版)

南邮软件设计 A档 一、分数统计 课题内容:   设计一个分数统计程序。包括学生信息的输入输出以及排序。通过该课题全面熟悉数组、字符串、文件的使用,掌握程序设计的基本方法及友好界面的设计。 课题要求: (1)输入某班级学生的姓名、分数; (2)对(1)的分数进行降幂排列并输出; (3)具有输入输出界面。 示例代码: #include<bits/stdc++.h> using...

Dainelcw 1万+

在Eclipse中集成ndk

前言        最经在看Android方法的基础知识,看到一篇文章(http://www.rbgrn.net/content/348-get-your-eclipse-integrated-ndk-on)介绍如何把Android的NDK集成到Eclipse,顺便就把它翻译过来。        注: 技术名称保留不译,比如CygwinEclipse(英文版)的界面文本不译,比如按钮(S

wojiaowenzhang的专栏 491

经纬度转换为UTM坐标

UTM(通用横向墨卡托投影): 是一种以米为单位的坐标系统,用于地图和GPS导航。将地球划分为60个纵向的区域。每个区域宽6度,从赤道开始往南北两级方向划分。每个区域都有一个特定的字母。

weixin_45626706的博客 7275

全球最大光伏电池缺陷异常检测数据集PVELAD【发布】

下载地址 1:GitHub - binyisu/PVEL-AD 下载地址 2:http://aihebut.com/col.jsp?id=118 下载地址 3:NAVEDownload 竞赛测试系统:Photovoltaic cell anomaly detection | Kaggle 一、简介 PVEL-AD 数据集又叫做EL2021数据集是用于对光伏电池异常缺陷检测方法进行基准测试的数据集,重点是光伏电池工业检测。PVEL-AD包含 36,543 张具有各种内部缺陷和异构背...

苏打水的杯子的博客 2万+

Android Eclipse集成NDK

工欲善其事必先利其器 , 下面介绍下 Eclipse SDK NDK Cygwin CDT 集成开发环境的搭建。   1、 需要的软件:     Android NDK,cygwin 2、  Android NDK,直接解压,不用安装:     下载地址: http://developer.android.com/sdk/ndk/index.html ...

记录和分享程序人生的点点滴滴 5364

逆向CarPlay协议时,除了USB主从切换,你还需要注意这3个关键点

本文深入探讨逆向CarPlay协议时的3个关键点,包括MFi协议背景、多通道协同工作机制和协议分析工具的高级过滤技巧。特别解析了USB主从切换后的复杂交互过程,帮助安全研究员和逆向工程师更好地理解CarPlay协议的核心机制与潜在安全研究切入点。

weixin_29164497的博客 381

eclipse集成Android NDK说明

eclipse集成Android NDK说明 1         目录 Eclipse集成Android NDK说明... 1 2       为什么要用NDK?... 2 3       为什么要集成?... 2 4       怎样操作?... 2 4.1        预备条件... 2 4.1.1       Cygwin. 2 4.1.2       Ecl

Thomas_Von的博客 532

37.华为路由器:loopback(本地回环)接口的作用

本地环回接口(或地址),亦称回送地址(loopback address)。 此类接口是应用最为广泛的一种虚接口,几乎在每台路由器上都会使用。常见于如下用途: 1 作为一台路由器的管理地址 系统管理员完成网络规划之后,为了方便管理,会为每一台路由器创建一个loopback 接口,并在该接口上单独指定一个IP 地址作为管理地址 ,管理员会使用该地址对路由器远程登录(telnet ),该地址实际上起到了类似设备名称一类的功能。 但是通常每台路由器上存在众多接口和地址,为何不从当中随便挑选一个呢 ? 原因如下:由于

迷逝 3万+

【TCN回归预测】TCN时间卷积神经网络数据回归预测(多输入单输出)【含Matlab源码 2317期】

TCN时间卷积神经网络数据回归预测 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版)或下载付费资源,可赠送奶茶价版付费专栏指定代码1份; 822

Eclipse集成Android NDK详解

1        目录 Eclipse集成Android NDK说明... 1 2       为什么要用NDK?... 2 3       为什么要集成?... 2 4       怎样操作?... 2 4.1        预备条件... 2 4.1.1       Cygwin. 2 4.1.2       Eclipse. 2 4.1.3       Eclipse CDT...

SCORM 开发 352

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Eclipse集成Android_NDK

  Eclipse集成Android NDK说明 1         目录 Eclipse集成Android NDK说明... 1 2       为什么要用NDK?... 2 3       为什么要集成?... 2 4       怎样操作?... 2 4.1        预备条件... 2 4.1.1       Cygwin. 2 4.1.2       Eclipse. 2 4.1

涂作权的博客 1112

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: Android NDK概述
下一篇: 数学是成就卓越开发人员的必备技能
Linux先生
博客等级 码龄20年 97粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值