NDK开发流程

javaJDK 只是一个网站,………………………… 立即下载

Android NDK环境搭建



在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是否已经安装成功

随便新建一个Android工程,添加Add Native Support

此时新建的工程就多了一个jni目录

IDE有可能会报一个错误:

[2014-06-23 17:08:36 - Unable to launch cygpath. Is Cygwin on the path?] java.io.IOException: Cannot run program "cygpath": CreateProcess error=2, ϵͳÕҲ»µ½ָ¶

工程右键,选择以下选项

设置环境变量NDKROOT,Value就是你解压出来的NDK目录

在这里配置的:${NDKROOT}/ndk-build.com就是以下脚本文件

这时再去Clean工程就不会报错了

下面就来编写JNI的C++文件,但是没有代码提示,是由于没有导入头文件的原因

导入头文件方法,选择“Project Properties”

点击“Add"

此时再按"alt + /"就有代码提示

接下来就是编写代码

在NDKTest.cpp文件

#include <string.h>#include <jni.h>jstring Java_com_dzt_ndktest_MainActivity_stringJNI(JNIEnv* env,jobject thiz){	return env->NewStringUTF("Hello JNI 我的第一个JNI");}

Android.mk文件是自动生成的,可以不用修改

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE:= NDKTestLOCAL_SRC_FILES := NDKTest.cppinclude $(BUILD_SHARED_LIBRARY)

Activity类调用代码

package com.dzt.ndktest;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends Activity {	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);		TextView tv = (TextView) findViewById(R.id.tv);		tv.setText(stringJNI());	}	public native String stringJNI();	static {		System.loadLibrary("NDKTest");	}}

build 工程

 成功通过

再运行程序,很不幸,报错了

如果是c++文件需要加上extern "C",从C语言导出

修改代码如下

#include <string.h>#include <jni.h>extern "C" {jstring Java_com_dzt_ndktest_MainActivity_stringFromJNI(JNIEnv* env,		jobject thiz) {	return env->NewStringUTF("Hello JNI");}}

成功通过

源代码下载: http://download.youkuaiyun.com/detail/deng0zhaotai/7540771

更多的例子可以到以下目录获取,这是NDK自带的例子。

在Android上要想开发出高效率的软件,还是需要用到C/C++语言,要想在Java上开发C/C++语言就需要在IDE上安装NDK;在Android的官网上SDK开发环境已经包含了ADT插件,最新的Android开发IDE可以到官网下载: http://developer.android.com/sdk/index.html
Android NDK开发流程 android NDK流程开发 移动开发 立即下载

相关推荐

jni官方文档

jni官方文档,学习java\ndk\android,值得拥有!

NDK开发流程简介

NDK JNI

shiruiyiruo的博客 422

腾讯ACE反作弊系统:内核驱动与AI行为分析如何守护游戏公平

在游戏安全领域,反作弊技术是保障公平竞技环境的核心防线。其基本原理是通过监控系统关键行为,识别并阻断非法的第三方程序干预。从技术实现看,现代反作弊方案普遍采用分层防御架构,结合用户态模块进行应用层检测,并依赖内核态驱动实现底层深度监控,以此构建纵深防御体系。这种技术的核心价值在于,它能有效对抗从简单内存修改到高级驱动级作弊等多种威胁,维护游戏经济系统和玩家体验的完整性。随着作弊手段的演进,行为分析与AI赋能变得至关重要,系统通过机器学习模型分析进程行为序列的异常模式,即使面对未知特征的外挂变种也能进行有效识

weixin_33978578的博客 744

JNI—NDK开发流程(ndk-build与CMake)

注意,例子使用的各版本信息如下: AS 3.3 Gradle Tool:3.3.0 Gradle Version:4.10.1 1. 概述 最近在阅读Android 源码的过程中发现大量的Native方法,在没有系统掌握JNI与NDK知识的情况下寸步难行,所以有必要系统地了解相关知识。 在学习之前,我常常有有如下几个疑问: NDK的开发流程? C/C++ 与 Java如何相关通信的? 如何阅...

PPLLiang的博客 3448

自动驾驶轨迹规划算法——Apollo Lattice Planner

Apollo Lattice Planner是百度Apollo自动驾驶系统中的一种基于采样的实时轨迹规划算法。其核心思想是在离散化的状态空间中,对终端状态进行采样,并通过多项式曲线连接当前状态与候选终端状态,形成候选轨迹集,最后基于代价函数选择最优轨迹。该算法将车辆可达状态按纵向距离、横向偏移和速度等维度规则离散化,形成"格点"状态空间。 Lattice Planner通过三个主要步骤实现轨迹规划:1)终端状态采样,在规划时域内枚举多种驾驶意图;2)轨迹生成,使用五次多项式连接起点与各终

swaggytiger的博客 1624

中科蓝讯蓝牙耳机SDK实战:从目录解析到消息处理框架

本文深入解析中科蓝讯蓝牙耳机SDK的目录结构与消息处理框架,提供从硬件驱动到蓝牙功能定制的实战指南。重点剖析SDK核心模块如消息队列机制、按键事件处理及电量报告优化,并分享二次开发中的调试技巧与避坑经验,助力开发者高效完成TWS耳机功能定制。

weixin_30335575的博客 388

NDK的开发流程

​ 这个时候NDK会创建一个和jni目录平级的目录libs,libs下面存放的就是so库的目录。需要注意的是,ndk-build命令会默认指定jni目录为本地源码的目录,如果源码存放的目录名不是jni,那么ndk-bulid则无法成功编译。​ 在上面的步骤中,需要将NDK编译的so库放置到jniLibs目录下,这个是AndroidStudio所识别的默认目录,如果想使用其他目录,可以安装如下方式修改App的build.gradle文件,其中jniLibs.srcDir选项指定了新的存放so库的目录。

qq_33971387的博客 298

别再为授权费头疼了!手把手教你免授权搞定西门子、马扎克等12种主流数控机床的数据采集

本文提供了一套免授权采集西门子、马扎克等12种主流数控机床数据的实战指南,帮助中小型机加工车间节省80%以上的采集成本。通过TCP/UDP协议逆向工程和跨平台数据整合,实现经济、灵活且可持续的数据采集方案,涵盖设备兼容性处理、数据频率优化等关键问题。

weixin_26873711的博客 708

Android NDK基本开发流程

Android NDK(Native Development Kit)开发流程允许开发者使用C/C++代码来开发Android应用的部分功能,通常用于性能敏感的场景,如游戏、图像处理等。

缘来的精彩的博客 954

5G-A无源物联网:深度解析“不插电“智能的底层技术原理

北京移动推出5G-A无源物联网技术,实现电动车标签"零功耗"运行。该技术通过射频能量收集(利用5G-A基站高功率信号转换为电能)和反向散射通信(调制反射信号传输数据)两大核心技术,使设备无需电池即可工作。5G-A相比4G在信号能量密度、通信速率和定位精度等方面显著提升,结合通感一体等创新技术,为无源物联网提供商用基础。该方案已在北京小区试点应用,实现电动车精准定位管理,标签寿命可达5年以上。专家预测,这项技术将大幅降低物联网部署成本,推动"万物智联"时代的到来。

通信行业老兵、物联网从业者,做一个有趣的普通人。 2013

戴尔笔记本装Ubuntu 20.04,别急着分区!先搞定这个BIOS设置(Intel RST避坑指南)

本文详细介绍了在戴尔笔记本上安装Ubuntu 20.04时遇到的Intel RST技术兼容性问题及解决方案。通过安全切换至AHCI模式,避免安装过程中找不到硬盘的常见问题,并提供双系统分区策略和安装后的优化建议,确保Ubuntu与Windows 10双系统稳定运行。

weixin_31315567的博客 272

JNI开发与NDK开发的基本流程

上一篇文章主要讲解有关JNI和NDK开发过程中需要理解的基本的知识,想要了解的,请移步https://blog.youkuaiyun.com/qq_36451275/article/details/95347000 开发: 一、JNI原生开发流程(Eclipse) (1)基本流程 1.在java类中定义native方法 2.生成包含对应JNI函数声明的头文件 ...

qq_36451275的博客 341

决策树简介/PPT

最近给我们组新生讲了决策树的相关知识,以下是所做的PPT,参考了网络资源。

垃圾就应该待在垃圾桶里的博客 3796

JNI/NDK开发流程简介

NDK开发一、环境配置1、NDk下载 打开管理器,勾选NDK,Android Studio会自动下载ndk。 下载完成后,可以如下方式查看目录: 2、NDK环境变量配置在PATH系统变量下添加:ndk的目录即可 在cmd中输入:ndk-build,如果出现如下界面,表示成功安装。 二、开发文件配置1、android.useDeprecatedNdk=true,在2、添加ndk,在app级别

u011072613的专栏 529

UFS 3.1协议分析(第五章) -- UFS协议栈

ContentsUFS顶层架构应用层UFS命令集UFS 设备管理器UFS任务管理器传输层互连层 UFS顶层架构     UFS基于SCSI SAM架构模型定义了一个完整的协议栈,从上到下依次为应用层、传输层、数据链路层、物理层。UFS使用MIPI联盟的UniPro作为数据链路层和MIPI的M-PHY作为物理层,两者合起来称之为互连层(UFS InterConnect Layer) 应用层     应用层包括UFS命令集、设备管

Frank_sample的专栏 7369

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

android studio ndk 语法,AndroidStudio下NDK开发流程

以前做过eclipse下的NDK的开发,随着google推出了android studio,现在android开发越来越遗弃eclipse,所以就想对android studio下NDK开发有所了解。NdkDemo是一个简单的通过native调用C返回一串字符的demo,主要是想通过这个小demo了解AS下的NDK开发(实践中检验可行性)。1.配置NDK环境、新建项目(1). 通过Android...

weixin_39968852的博客 158

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

JNI与NDK的开发流程

 一、JNI开发流程 1、在java中声明native方法(编写java程序) 2、通过javac编译java源文件得到class文件 3、通过javah命令针对class文件生成JNI头文件 4、实现JNI方法(编写相应的c/c++文件) 5、采用gcc等编译工具编译c/c++文件生成so库 6、将so库放到相应位置,System.loadLibary(

benpao00的博客 405

深度学习工具包 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")

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Eclipse NDK开发基本流程

Eclipse进行NDK开发的基本流程是:创建Android工程--->完成java函数的编写,添加jni的接口函数(native函数)的添加--->添加jni文件夹,添加Android.mk文件和源文件--->在源文件中实现接口函数--->用ndk-build把源文件编译成lib库--->启动Android模拟器,安装运行工程。举例:1、打开Eclipse,...

weixin_34217773的博客 286

NDK10_NDK开发流程、JNI线程

NDK开发汇总 一 NDK开发流程 使用so库和头文件开发 gradle指定开发平台,在defaultConfig目录里面 ndk { abiFilters “armeabi”,“x86” } 引入第三方库,在app.gralde中的android目录下 sourceSets.main { jniLibs.srcDirs = [‘libs’] jni.srcDirs = [] } C++中找不到...

baopengjian的专栏 291

Android NDK开发之旅(1): Eclipse中NDK环境搭建与JNI开发流程

看着本篇文章的标题,或许你会问现在AndroidStudio版本都更新到3.0了,从2.2开始就可以直接使用Cmake来构建NDK项目,根本没有必要再去研究NDK在Eclipse中的开发。嗯,在我使用过AndroidStudio构建NDK项目后,我也是这种想法,通过cmake编译C/C++代码来构建NDK开发框架确实是非常智能、步骤也很简单,完全可以秒杀Eclipse。但是,对于从来没有开发NDK项目的人来说,直接上AS开发可能一是无法明白这其中的原理,比如Android项目是如何构建C/C++开发环境的、

老蒋也疯狂 4403

我的NDK之旅-- (2) 第一个NDK程序(基本开发流程)

前言 完成C基本语法的学习之后,就进入了NDK的正式开发,在Android Studio2.2及以上时android支持了Android Studio + CMake来开发 NDK,我们将用这两个工具进行NDK开发。 可以科学上网的可以参照 android官方NDK开发文档 相关概念认知 交叉编译 在一个平台上去编译另一个平台上可以执行的本地代码 在NDK中指针对cpu平...

ajqiaoke的博客 499

ndk:概述/项目结构/开发流程

一、概述 ndk,native develope kit,是安卓提供的一套jvm调用本地C++接口的一套机制,支持在windows以及linux下面进行开发编译。 二、NDK提供了什么 ndk给C++提供了一系列C++调用jvm的接口(jni) 交叉编译工具链 输出供安卓jvm使用的.so或者.a文件 三、NDK的项目结构 Andriod.mk:描述需要纳入编译的文件,以及一系列编译参数 Application.mk:描述编译参数 ...

the7daydead的专栏 3555

NDK开发流程介绍

NDK开发流程 (一)Java调用C方法 1、安装ndk 在Android Studio的project structure目录,有个Android NDK location设置。未下载ndk的可以点击下方的download下载。 2、配置path路径 在环境变量path中配置ndk的路径。 3、项目中关联ndk 在项目的local.properties中添加ndk路径: n...

hacjy 519
上一篇: 利用 LeakCanary 来检查 Android 内存泄漏
下一篇: WAV文件格式解析
java_for
博客等级 码龄12年 6粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值