android ndk 入门

Android-NDK开发入门 SHARED。 阅读详情

首先,在eclipse里面创建一个androidproject,设定包名(com.test)。

然后创建一个java文件,例如命名为testMine,在其中声明native的方法,如下:

package com.test;

 

public class testMine {

    public staticnative long calculate(int n);

}

然后编译该项目。

在命令窗口中,进入该项目所在文件夹, 执行命令

javah -classpath bin/classes -jni -d jni  com.test.testMine

注意, classpath要指向classes文件所在。这样,就在jni文件夹中生成了一个头文件com_test_testMine.h, 这个是自动生成的文件,内容如下。如果需要新版本的该文件,可以通过javah命令再次生成。

/* DO NOT EDIT THISFILE - it is machine generated */

#include <jni.h>

/* Header for classcom_test_testMine */

 

#ifndef_Included_com_test_testMine

#define_Included_com_test_testMine

#ifdef __cplusplus

extern "C" {

#endif

/*

 * Class:    com_test_testMine

 * Method:   calculate

 * Signature: (I)J

 */

JNIEXPORT jlongJNICALL Java_com_test_testMine_calculate

  (JNIEnv *, jclass, jint);

 

#ifdef __cplusplus

}

#endif

#endif

接下来要做的就是实现Java_com_test_testMine_calculate方法。

 

建立对应这个header的文件com_test_testMine.c

#include"com_test_testMine.h"

 

jlong JNICALLJava_com_test_testMine_calculate(JNIEnv * jnienv, jclass clas,

                                jint n) {

                return n + 1;

}

然后在该目录下创建一个Android make 文件,Android.mk

LOCAL_PATH := $(callmy-dir)

include $(CLEAR_VARS)

LOCAL_MODULE :=testMine

LOCAL_SRC_FILES :=com_test_testMine.c

include$(BUILD_SHARED_LIBRARY)

一般情况下基本格式默认,除了LOCAL_MODULE和LOCAL_SRC_FILES要根据命名进行更改。

 

 

接下来就该对它进行编译了,如果还没有下载NDK的必须要下载, <ndk>指向该目录所在地。

进入到该项目的根目录,即jni文件的上层目录,然后执行

<ndk>/ndk-build

这样就把testMine生成so文件,同时它还给安装到project/libs下了

Compile thumb  : testMine <= com_test_testMine.c

SharedLibrary  : libtestMine.so

Install        : libtestMine.so =>libs/armeabi/libtestMine.so

 

 

修改一开始生成的testMine.java文件,增加loadLibrary调用,从而在一开始就载入该library。

package com.test;

 

public class testMine{

    static {

       System.loadLibrary("testMine");

    }

    public static native long calculate(int n);

}

这下就可以调用该calculate 方法了, 一个简单的例子是另外创建一个Activity进行调用,如下例中showResult.java

package com.test;

 

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.widget.Toast;

 

public classshowResult extends Activity {

 

    @Override

    protected void onCreate(BundlesavedInstanceState) {

        // TODO Auto-generated method stub

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        long result = testMine.calculate(100);

        Toast.makeText(getApplicationContext(),"result="+result, Toast.LENGTH_LONG).show();

    }

}

当然需要对该项目的AndroidManifest.xml进行更新,加入该Activity的信息

<?xmlversion="1.0" encoding="utf-8"?>

<manifestxmlns:android="http://schemas.android.com/apk/res/android"

    package="com.test"

    android:versionCode="1"

    android:versionName="1.0" >

 

    <uses-sdkandroid:minSdkVersion="10" />

 

    <application

       android:icon="@drawable/ic_launcher"

       android:label="@string/app_name" >

           <activity

           android:label="@string/app_name"

           android:name=".showResult" >

            <intent-filter >

                <actionandroid:name="android.intent.action.MAIN" />

 

                <categoryandroid:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>

 

</manifest>

 

编译运行,然后就可以看到一个提示框显示结果101.

一个简单的android ndk实例就此告成。


Android NDK开发入门指南 通过使用Android NDK,我们可以轻松地在Android应用程序中嵌入C/C++代码,并利用底层语言的强大功能和现有库的优势。在函数中,我们执行了简单的整数相加操作,并将结果转换为一个字符串。现在,我们可以创建一个新的Android项目,并配置它以使用NDK。文件指定了C++编译的一些配置,以及构建生成的库的名称和依赖项。现在,我们可以在Java代码中调用我们的C++函数了。现在,我们可以在Java代码中使用我们的C++函数了。加载我们编译生成的C++库。现在,我们可以开始编写我们的C++代码。 阅读详情

相关推荐

安卓NDK配置入门指南

安卓NDK(Native Development Kit)是一个工具集,允许开发者使用C和C++代码,与Android平台上的Java层代码进行交互。它主要用于实现性能关键部分的代码优化,或者方便地重用现有的C/C++库。NDK提供了一套工具和API,使得开发者能够将Java虚拟机调用转换为本地代码调用。它将C和C++源代码编译成共享库,然后Java层可以加载并调用这些库中的函数。NDK的引入,降低了安卓应用与硬件层交互的门槛,使得复杂的算法实现更高效。

weixin_33628677的博客 1168

Hello NDK:Android Studio + NDK开发安卓入门

注:本文仅讲述操作步骤,至于用到的工具、插件或者不懂的名词请自行百度。 同时因为很多人在开始使用时会遇到一些列的BUG在这里给大家提供另一篇博客,里面列出可能出现的异常以及解决方案: http://blog.youkuaiyun.com/asmcvc/article/details/24457677 博主用到的工具: 1.Android Studio 2.3.1 (2017-04-01更新的) 2...

天才小汪汪 850

绿联NAS使用docker部署immich【pro系统】

随后去绿联你想要存放immich的地方创建一个文件夹,便于区分,如图,我创建了一个immich的文件夹。1.进入文件夹后面是有斜杠的(tips:只需要敲击前面几个字母,按tab键自动补全)cd:进入路径,1.可以是当前的下一层相对路径 2.也可以是完整的全路径。前言:好像没有绿联的教程,刚好自己也有需求,就顺便记录了。如果你的挂载实战情况比较复杂,接下来是喂到胃里的知识点。】下载文件(群晖的,别慌,能用),两份,红框的就是。首先,没什么好说的,去immich官网【点击1.终端,2.新增,3.确定。

weixin_45343644的博客 1778

Android NDK Android Studio NDK初入门

Android 工具 Android Studio 配置NDK 开发环境 先上一张思维导图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190506160736920.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly93YXRjaGVyL...

初心一点的专栏 279

Java8对接三方流式接口,并实时输出(GPT)

【代码】Java8对接三方流式接口,并实时输出(GPT)

m0_58617940的博客 1726

ISO15118-20协议测试实战:用Efficient XML库验证26条命令编解码(附完整代码)

本文分享了ISO15118-20协议测试实战经验,重点探讨了使用Efficient XML库对26条命令进行EXI编解码验证的过程。通过搭建测试环境、编写自动化程序并与官方工具链进行交叉比对,文章深入分析了4条命令编码结果不一致的原因,并提供了完整的排查思路与C代码示例,旨在帮助开发者确保电动汽车充电通信的协议一致性。

weixin_29284657的博客 108

Android NDK开发入门实例

Android NDK开发入门实例         写这个,目的就是记录一下我自己的NDK是怎么入门的。便于以后查看,而不会忘了又用搜索引擎一顿乱搜。然后希望能够帮助刚学的人入门。先转一段别人说的话: “NDK全称:Native Development Kit。 1、NDK

一个Coding猪的故事 6万+

矢量量化的基本原理:高效数据压缩与信息检索的关键矢量量化(Vector Quantization,简称VQ)是一种数据压缩和信

此外,在矢量量化过程中,可能会引入一定的信息损失,对一些精细特征的表示可能存在一定的误差。它通过将高维数据映射到低维码本空间中,并将相似的数据映射到相同的码本向量中,实现对数据的高效表示和存储。最重要的是,矢量量化可以用于数据的检索和分析,提供了高效的数据查询和处理手段。通过使用码本索引,我们可以高效地存储和检索大量的数据。在图像处理中,矢量量化可以用于图像压缩,将复杂的图像数据转化为较少的码字,实现图像的存储和传输。矢量量化通过将连续的高维数据分割并映射到有限的码本集合中,实现数据的离散表示和压缩。

m0_70886513的博客 1372

2025年的Android NDK 快速开发入门

十年前写过一篇介绍NDK开发的文章,今天看来已经发生了很多变化,NDK开发变得更加容易了。下面就写一篇当下NDK开发快速入门。**原生开发套件 (NDK) **是一套工具,使开发者能够在 Android 应用中使用 C 和 C++ 代码,并提供众多平台库。官方默认使用CMake作为构建工具。

懒人的技术笔记 1717

gdb对dwarf调试信息的解析和使用

gdb的对dwarf的调试信息的解析到使用的过程分析

JS072110的专栏 9567

避坑指南:SAP成本中心分割结构配置常见错误及解决(含KA06/KL01前置步骤)

本文深入解析了SAP成本中心会计中分割结构配置的关键步骤与常见错误。重点强调了配置前必须通过KA06创建次级成本要素(类别42)和通过KL01创建活动类型这两个核心前置步骤,并详细剖析了在OKES中定义分割规则及版本时的高频报错原因与解决方案,帮助顾问和运维人员有效规避配置陷阱,确保成本分摊的准确性。

pear55的博客 865

《 android NDK 》C语言入门总结

前言: 2019 手机直播卖货火了起来,手机扫描文件,人脸识别等好多技术也越来越火。方便人们的技术以后会涉及生活的更多地方。因此,这种技术以后是种趋势,会需要很多研发人才。作为安卓开发者,选择音视频开发方向或者NDK是个不错的选择。而这个方向学习 c/c++ 是必须的,这里我们先学习c语言。 c语言入门 1.C语言的编译过程: 预处理 预处理阶段主要处理include和define等。它把#include包含进来的.h 文件插入到#include所在的位置,把源程序中使用到的用#defi...

KKnick1的博客 476

高数 | 【极限与等价无穷小】两个重要极限 & 经典错误 & 什么情况下求极限可以直接带入

一. 第一个重要极限 二. 第二个重要极限 三. 导数定义式 全文见【高等数学】两个重要的极限 - 知乎

"You are worthy! You can do it!" 6万+

Android NDK入门

NDK

hellozrw的博客 364

【云原生技术】helm中Chart.yaml、values.yaml、_helpers.tpl 各自的写法与作用

Chart.yaml、values.yaml、_helpers.tpl 各自的写法与作用 在一个标准的 Helm Chart 中,通常会包含以下关键文件: - **Chart.yaml** - **values.yaml** - **templates/`_helpers.tpl`** - 以及若干模板文件(`deployment.yaml`、`service.yaml` 等) 下面分别介绍这几个文件的作用、常见字段及其含义。

weixin_46453070的博客 751

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android之NDK开发入门

注意:本文操作环境为mac,Android Studio版本3.5 前言 NDK全称Native Development Kit,是Android的一个工具开发包,能够快速开发C,C++的动态库,并自动将so和应用打包成APK。而NDK的使用场景就是通过NDK在Android中使用JNI,那么JNI又是啥呢?JNI全称是Java Native Interface,即Java的本地接口,JNI可以使得Java与C,C++语言进行交互。这么一来,通过NDK和JNI,就可以很方便的在Android的开发环境中.

jsyjst的博客 8034

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android Studio NDK 入门demo

针对刚入门NDK的同学简化一下入门程序的编写,哈哈 一、新建NdkTest项目。 二、直接在目录下新建native方法工具类,方便调用。 三、MainActivity中调用Native方法更新UI。 public class MainActivity extends AppCompatActivity { @Override protect

嘻哈包袱铺 专栏 491

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android NDK开发入门实战示例(史上最强NDK入门项目实战)

转载于其它社区的文档,很强悍的Android NDK开发入门实例,想要了解和入门NDK的朋友,这肯定是您的首选资料!

Ray 250

ubuntu下 Android NDK入门

为何要用到NDK? 概括来说主要分为以下几种情况: 1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。 2. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的。 3. 便于移植,用C/C++写得库可以方便在其他的嵌入式平台上再次使用。 下面就介绍下Android NDK的入门学习过程: 入门的最

反思与改变 825

Android: NDK编程入门笔记

为何要用到NDK? 概括来说主要分为以下几种情况: 1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。 2. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的。 3. 便于移植,用C/C++写得库可以方便在其他的嵌入式平台上再次使用。 下面就介绍下Android NDK的入门学习过程: 入门的最

haoba1987的专栏 754
上一篇: 提高android应用效率的一些知识点
下一篇: Android JNI中对String的处理
Fj
Fj
博客等级 码龄25年 8粉丝 22原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值