[Android]NDK开发环境配置与JNI开发

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

本文的目标是实现NDK开发环境的配置以及学习JNI开发流程。

1.环境配置

本文的开发环境为win10 64位+Eclipse+Android ADT+NDK+CDT。

2.安装:

这里只介绍NDK和CDT的安装。

2.1从链接:http://dl.google.com/android/repository/android-ndk-r11c-windows-x86_64.zip下载NDK开发包,然后解压到本地路径,并拷贝本路径(比如我的是:D:\android-sdk\android-ndk-r11c-windows-x86_64\android-ndk-r11c)。

2.2配置系统的环境变量,操作路径为:高级系统设置–>环境变量–>找到PATH–>新建即可,如下图所示:
这里写图片描述

2.3为Eclipse添加NDK路径,操作路径为:Windows–>Preference–>NDK,如下图所示:
这里写图片描述

2.4为Eclipse安装CDT插件添加c/c++环境支持,安装连接:cdt - http://download.eclipse.org/tools/cdt/releases/8.8.1。操作路径为:help–>Install New Software,如下图所示:
这里写图片描述

3.完成了第二步,接下来进行代码编写

3.1新建一个安卓项目,并在项目的根目录下新建jni文件夹,如下图所示:
这里写图片描述

3.2在string.pub.jni.test包下新建TestJni.java类,添加如下代码:

package string.pub.jni.test;

public class TestJni {
        public native boolean init();
        public native int add(int x , int y);
        public native void destory();
        }

3.3将上一步创建的类文件拷贝到bin目录下,然后从命令行界面cd到..\AJniDemo\bin目录下运行javac TestJni.java,完成后可以看到在bin目录下生成的TestJni.class文件了。之后在..\bin目录下按照包名的顺序新建文件夹,路径为..\bin\string\pub\jni\test,将TestJni.class拷贝到..\bin\string\pub\jni\test目录下,在命令行界面执行javah -jni string.pub.jni.test.TestJni可以看到在..\bin目录下生成了string_pub_jni_test_TestJni.h这个头文件。将生成的头文件拷贝到项目的jni目录下,如下图所示:
这里写图片描述

3.4上一步生成了所需要的头文件,这一步开始实现c++层的代码了。按照上一步新建图中的文件,然后右键项目–>Android Tools–>Add Native Support。所需要的代码如下:

//Android.mk
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := TestJNI
LOCAL_SRC_FILES := string_pub_jni_test_TestJni.cpp
LOCAL_SRC_FILES += CAdd.cpp

include $(BUILD_SHARED_LIBRARY)
//Application.mk
APP_PROJECT_PATH := ${call my-dir}
APP_BUILD_SCRIPT=$(APP_PROJECT_PATH)/Android.mk
APP_MODULES := TestJNI

APP_ABI := armeabi armeabi-v7a x86
//CAdd.cpp
#include "CAdd.h"
CAdd::CAdd(){
}
CAdd::~CAdd(){
}
int CAdd::add(int x, int y){
return x+y;
}
//CAdd.h
#ifndef JNI_TEST_ADD
#define JNI_TEST_ADD
class CAdd{
public:
CAdd();
~CAdd();
int add(int x, int y);
};
#endif
//string_pub_jni_test_TestJni.cpp
#include <stdlib.h>
#include <stdio.h>
#include "CAdd.h"
#include "jni.h"

CAdd *pCAdd = NULL;
extern "C" {
JNIEXPORT jboolean JNICALL Java_string_pub_jni_test_TestJni_init
  (JNIEnv *env, jobject obj){
if(pCAdd==NULL){
pCAdd = new CAdd ;
}
return pCAdd!=NULL;
}

JNIEXPORT jint JNICALL Java_string_pub_jni_test_TestJni_add
  (JNIEnv *env, jobject obj, jint x, jint y){
jint res = -1;
if(pCAdd==NULL){
    pCAdd = new CAdd ;
res = pCAdd->add(x,y);
}else{
    res = pCAdd->add(x,y);
}
return res;
}

JNIEXPORT void JNICALL Java_string_pub_jni_test_TestJni_destory
  (JNIEnv * env, jobject obj){
if(pCAdd!=NULL){
delete pCAdd;
pCAdd=NULL;
}
}
}

3.5命令行界面下,在项目根目录下执行:ndk-build,成功之后刷新项目,就可以看到在Libs下面生成了.so文件。如下图所示:
这里写图片描述

4.调用JNI方法:

4.1将3中生成的.so文件拷贝到别的项目的libs文件夹下,然后新建下图所示的包和类:
这里写图片描述
4.2在TestJni.java中添加如下代码:

package string.pub.jni.test;

public class TestJni {
        public native boolean init();
        public native int add(int x , int y);
        public native void destory();
        }

4.3在其他地方调用JNI方法,如下所示:

import string.pub.jni.test.TestJni;

public class MainActivity extends Activity {

    static{
        System.loadLibrary("TestJNI");
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TestJni test=new TestJni();
        int ii=test.add(22, 2);
        Toast.makeText(getApplicationContext(), ""+ii, Toast.LENGTH_SHORT).show();
    }

以上,就是一个简单的JNI开发实例。

Termux+NDK实战:在安卓手机上从零搭建C开发环境(附常见问题解决) 本文详细介绍了如何在安卓手机上使用Termux和Android NDK从零搭建C开发环境,特别针对ARM架构优化配置流程。通过Termux的进阶设置、NDK工具链的ARM适配、项目结构与编译系统的优化,以及ARM架构特有的开发技巧,帮助开发者在移动设备上高效进行C语言开发。文章还提供了常见问题的解决方案和性能优化建议,适合希望在移动端进行C开发的极客和开发者。 阅读详情

相关推荐

Termux+NDK实战:在安卓手机上从零搭建C开发环境(2024最新版)

本文详细介绍了如何在安卓手机上使用Termux和Android NDK从零搭建C开发环境(2024最新版)。涵盖环境准备、NDK版本选择、ARM架构兼容性配置、完整项目开发流程及性能优化技巧,特别针对移动端开发的独特挑战提供实用解决方案。

juice的博客 710

Win10 配置NDK安装2023.7.19版本

NDK的安装配置

a_beatiful_knife的博客 1839

android-ndk-r11c-windows-x86_64.zip

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

Jni开发时,dll文件放置的路径处理方式

刚到新公司,就接到一个棘手的任务。想了很多办法,最后想使用Java COM桥来解决。JACOB是一个较成熟的开源项目,可以很方便的调用COM组件。搞过JNI的都知道,本地库要放到系统path中,这样,Java进程在运行中才能找到本地库并动态加载。我们可以通过环境变量System.getProperty("java.library.path")来查看当前JVM搜索本地库的路径。这时,就会遇到一个

thunder4393的专栏 8967

Dify整合FireCrawl与百度搜索实战:手把手教你打造全能研究助手

本文手把手教你基于Dify平台,整合FireCrawl网页爬虫与百度搜索能力,构建一个能同时处理本地文档与实时网络信息的全能研究助手。通过部署核心环境、配置模型、接入两大工具并设计自动化工作流,实现从问题提出到深度分析报告生成的一站式解决方案,极大提升信息调研与整合效率。

weixin_29062963的博客 500

以TMS320F28069为例,如何使用CCS建立DSP工程文件

以TMS320F28069为例,本文主要介绍了使用CCS建立DSP工程的流程

Honglong 2556

Android NDK开发,使用ndk-build编译

注意:加载生成的动态库指定的文件名(System.loadLibrary("Java2c");)和生成.so时指定的名字(buil.gradle中的ndk{moduleName "Java2c" }),还有Android.mk中LOCAL_MODULE :=Java2c三者是否一致;Java2JNIJava2c还有Android.mk中LOCAL_MODULE :=Java2c三者不一致,就会出现UnsatisfiedLinkError异常;

WX丶SpongeBob的博客 2208

HyperLynx VX2.5 实战:5分钟搞定LPDDR4X内存的批量仿真与报告分析

本文详细介绍了如何使用HyperLynx VX2.5进行LPDDR4X内存的批量仿真与报告分析,通过智能网络分组和并行计算技术,5分钟内即可完成全流程验证。文章涵盖工程准备、批量仿真配置、报告解析及典型问题解决方案,帮助工程师高效提升PCB仿真效率,确保移动设备内存接口的稳定性与性能。

weixin_42683394的博客 401

android开发之NDK配置开发

输入命令javah -jni com.example.mr5.jnidemo.JniUtil --------包名+类名。3、将CMake的安装路径添加到PATH环境变量,或将其添加到项目的local.properties文件中,如下所示。5、在local.properties的文件添加NDK的路径和SDK的路径。8、在build.gradle文件中ndk的模块。

qq_42282862的博客 5301

Smali语言基础语法

定义、声明、调用 Smali数据类型 定义:与Java相同,Smali中也有一套数据类型体系,且该体系实质上是同Java一一对照的。 示例1:Smali——Java数据类型对照表 PS:如上图所示,Smali语言中的数据类型的关键词基本上为Java中同名数据类型的首字母大写,需要着重记忆的例外为:1.long类型的关键词为大写J;2.boolean类型的关键词为大写Z;3.数组的关键词为左半边中括号[;4.object类型(各种类)的关键词为大写L加上该类的全类名路径,路径中的层级用/分割。

aketoshknight的博客 1万+

Altium Designer(AD24/25)导入DXF或DWG结构文件的方法

DXF(Drawing Exchange Format)和DWG(Drawing)是两种常见的CAD(计算机辅助设计)文件格式,常用于结构和硬件之间的沟通。本文介绍Altium Designer(AD24/25)导入DXF或DWG结构文件的方法。

fydar的博客 1449

实战演练,通过快马ai项目掌握android studio中ndk与jni开发环境配置

今天想和大家分享一个非常实用的Android开发技巧——如何在Android Studio中配置NDK和CMake环境,并通过JNI实现Java与C++的交互。它内置了完整的开发环境,不需要自己配置复杂的NDK和CMake,特别适合想快速上手NDK开发的朋友。通过这个实战项目,我不仅学会了NDK环境的配置,还掌握了JNI开发的基本流程。为了简化开发,可以先在Java层定义好native方法,然后用Android Studio的自动生成功能创建对应的JNI函数声明。这里要特别注意内存管理,避免出现内存泄漏。

SilverfoxOwl19的博客 29

TI单芯片毫米波雷达1642demo代码走读(一)

今天我们来实际看下代码。 首先使用CCS软件导入demo工程,工程有两个,一个是ARM的工程,工程名是mmw_mss_16xx;另一个是DSP的工程,工程名为mmw_dss_16xx。我们将这两个工程的主函数打开,分别位于mss_main.c和dss_main.c文件中。 先看mss的主函数,代码如下。我为每行代码都加了中文注释和自己的理解。 int main (void) { Task_Params taskPara...

1万+

android ndk怎样加载o文件_JNI初探之NDK 开发环境配置

安装 CMake、LLDB与NDK 开发工具包CMake 简介CMake 是一款比make更强大的编译自动配置工具,它可以根据不同平台、不同的编译器,并通过CMakeLists.txt文件中简单的语句来描述所有平台的编译过程,生成相应的Makefile文件或project文件。CMake被引入于AndroidStudio2.2,其目的是替代原有的JNI/DNK开发方法,使AS在进行JNI/NDK时...

weixin_39599830的博客 216

算法 | A*算法实现最优路径规划

启发式探索是利用问题拥有的启发信息来引导搜索,达到减少探索范围、降低问题复杂度的目的。A*寻路算法是启发式探索的一个典型实践,在寻路搜索的过程中,给每个节点绑定了一个估计值(即启发式),在对节点的遍历过程中采取估计值优先原则,估计值更优的节点会被优先遍历。...

不断学习,不断进步,提高自己 6630

【Unity小游戏】整整一个周末写一款《皇室战争 玩法》 的 即时战斗类 游戏Demo。两万多字游戏制作过程+解析

Unity游戏制作,本篇文章介绍了复刻皇室战争玩法的一个自制小游戏,共有该游戏的两万字教程加制作过程,欢迎品尝! 世界上没有绝对的公平,如果我们起点就比别人第一步,那就更需要比别人努力了。

努力前行,总会成为自己心中的那道光 12万+

安卓 NDK 初学者指南第二版(一)

Android NDK 通过利用这些移动设备的最大速度,将高性能和可移植代码注入你的移动应用中。Android NDK 允许你为密集型任务编写快速代码,并将现有代码移植到 Android 和非 Android 平台。另外,如果你有一个包含多行 C 代码的应用程序,使用 NDK 可以显著减少项目开发过程。这是多媒体和游戏中最有效的操作系统之一。这本初学者指南将向你展示如何创建由 C/C++支持的应用程序,并将它们与 Java 集成。通过使用这个实用的分步指南,并逐步使用教程、技巧和窍门来练习你的新技能,你将学

龙哥盟 1106

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Android Studio利用Gradle配置NDK-JNI开发环境

文章转载至:点击跳转原文1 你需要做的 更新你的Android studio到2.2或更高版本 下载Android NDK version 11r或更高 更新Android SDK Tools到最新版 2 创建测试项目 选择New Project然后一路Next之后Finish即可 配置项目使用gradle wrapper,如下图选择Use Default Gradle wrapper (recom

小小本科生成长之路 3296

IEM模型,地表粗糙度模拟

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

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

android调用so封装jni,GitHub - Michelle0716/AndroidJniDemo1: 安卓对c进行so文件打包,并以jni的形式进行调用...

AndroidJniDemo1安卓对c进行so文件打包,并以jni的形式进行调用项目中的部分app : 编译so文件jniDemo: 添加运行so文件开发环境:android studio 3.0.1(As3.0以上创建项目,选择支持c/c++,项目会自动生成需要的配置,不需要在编写cMakeList文件,创建后,直接运行,即可调用cpp里面c文件的内容)配置ndk谷歌官方下载 ht...

weixin_42358791的博客 222

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android Studio下NDK—JNI初涉

之前在开源中国上面发布的,今天把它挪过来 http://my.oschina.net/u/565690/blog/519438         由于后期的需求研究了一下在Android Studio下面的NDK开发流程,以前使用Eclipse的时候也搭建过这方面的东西,当时是在Window的环境下,使用的Cygwin来模拟Linux下的编译环境,步骤可能比较繁琐,这里就不介绍了,这里主要是给

小斑马的专栏 873

android jni环境搭建,Android NDK开发环境的配置(包括Eclipse和Gradle)

最近因为一个项目要在Android上使用OpenCV,所以补了一下Android NDK开发的知识,网上关于在Eclipse里进行NDK开发的文档比较多,但是很难找到在Android Studio或者IntelliJ里使用Gradle进行NDK开发的教程,这篇文章将会对两种情况都进行介绍。这里我只是记录了一下基本的配置过程,并举了一个简单的小例子,并没有对其中的一些细节和原理进行介绍,毕竟我也是刚...

weixin_31509859的博客 526

【RK3576 安卓 JNI/NDK 系列 02】保姆级环境搭建,从 0 到跑通第一个 JNI 程序

锁死了所有工具的版本,全是 RK3576 兼容性最优解,新手直接抄作业,避免 90% 的兼容坑 一步不跳地搭好了 JDK、Android Studio、SDK、NDK 全套环境,配置好了 RK3576 开发板的 adb 调试 从零新建了第一个 JNI 项目,跑通了 Java 调用 C++ 的完整流程,搞懂了 JNI 函数的命名规则、so 库的编译加载逻辑

爱片闲串,爱钓鱼,爱中医,爱分享 760

JNI 开发基础篇:Android开发中os文件的探索

os文件到底是什么?

Wedfrend的博客 1095

Android Studio 配置JNI和NDK开发环境

1.配置javah2.配置ndk 3.普通工程的javah4.ndk

mhpmii的专栏 578
上一篇: [opencv]识别人脸和眼睛
下一篇: [Ubuntu]How to install Google Chrome in Ubuntu
android_ruben
博客等级 码龄11年 106粉丝 166原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值