首页 > 其他分享 >Android NDK开发介绍

Android NDK开发介绍

时间:2023-05-16 10:01:39浏览次数:39  
标签:NDK Java 代码 介绍 编译 TestJni Android


一、JNI基础介绍



JNI is the Java Native Interface. It defines a way for managed code (written in the Java programming language) to interact with native code (written in C/C++).
JNI(Java本地接口):定义一种方式,使得Java代码能与C代码或者Dynamic Shared Libraries(动态共享库)进行交互。
调用方式:




Android NDK开发介绍_Java


C代码通过编译生成一个.so动态共享库,供java代码调用。


 


二、NDK开发介绍


NDK 是 Google为Android提供做C/C++代码开发的工具包,包含GCC的编译器以及各个平台(arm,X86,MIPS)的相关头文件,交叉编译的一些平台相关文件等。可在google官网上下载。


1、Eclipse配置下载的NDK资源包位置


解压下载的NDK包,android-ndk-r9b-windows-x86.zip
Preferences——>Android——>NDK,配置ndk所在位置


2、开发使用Demo


new一个普通Android工程TestJni;


右键项目,Android Tools——>Add Native Support,输入想要生成动态库名字:TestJni;


此时,会多出一个jni文件夹,包括一个TestJni.c和Android.mk文件。
Android.mk 配置编译相关动作,内容如下:


LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := TestJni
LOCAL_SRC_FILES := TestJni.c
include $(BUILD_SHARED_LIBRARY) 


 


 

注:

BUILD_SHARED_LIBRARY:表示编译目标为动态共享库,即生成.so文件

LOCAL_MODULE:编译目标名

LOCAL_SRC_FILES:编译源文件

 

TestJni.c即本地C代码,本例中只加了一个Hello字串的返回,此方法名的定义,为了使得Java代码能够找到相应的native代码,其规范为:Java+包名+class+Method,否则找不到。
当然可以有另外一种方法映射的途径,可以实现java到C方法的映射,在此不详细介绍了。

 


 


    1. jstring Java_com_pingtech_testjni_TestJni_sayHello( JNIEnv* env,  
    2.         jobject thiz )  
    3. {  
    4. return (*env)->NewStringUTF(env, "Hello from JNI !");  
    5. }


    3、JNI java代码

    1. public class TestJni{  
    2. public static native String sayHello();  
    3. static{  
    4. "TestJni");  
    5.         }  
    6. }

    使用静态代码块,首先加载TestJni.so 动态共享库,sayHello为C中本地方法,前面加一个native修饰符即可。这个我们直接可以通过TestJni.sayHello();在Java代码中调用C代码了。

    4、编译运行


    Project build all,可检测本地代码错误,生成.so库(lib/armeabi下,这个对于arm平台,当然可以通过配置编译出其他平台的)。

    标签:NDK,Java,代码,介绍,编译,TestJni,Android
    From: https://blog.51cto.com/u_16112859/6282452

    相关文章

    • android应用的记住密码与快速登录
      通过资料得知,可以通过三种方式实现,其中,数据库个人认为比较好实现,添加个字段即可,但觉得不太正规,同时,还得对表结构进行修改,所以,舍弃这种方法。通过SharedPreferences实现记住密码以及自动登录的实现主要依赖于SharedPreferences类的使用,SharedPreferences是一个轻量级的存储类,用于存......
    • android应用的记住密码与快速登录
      通过资料得知,可以通过三种方式实现,其中,数据库个人认为比较好实现,添加个字段即可,但觉得不太正规,同时,还得对表结构进行修改,所以,舍弃这种方法。通过SharedPreferences实现记住密码以及自动登录的实现主要依赖于SharedPreferences类的使用,SharedPreferences是一个轻量级的存储类,用于存......
    • 主流原型设计工具介绍
      本次软件创新课的内容是介绍一下主流的原型设计工具。首先先介绍一下AxureRP它是一款功能强大的软件原型设计工具,主要用于创建高保真度的应用程序原型,并支持团队协作。其还提供了一些先进的功能和工具,帮助用户快速创建交互式元素、流程图和注释。 主要特点:高保真度原型......
    • Android虚拟机的D盘储存
      大家知道安卓的模拟器位置默认是放在C盘的,这样比较占空间,可以通过创建·符号链接的方式来“欺骗”AS,从而创建到D盘:以管理员身份打开命令提示符,输入以下命令:mklink/DC:\Users\xxx\.android\avdD:\AndroidStudio\androidC\avd其中C:\Users\xxx\.android\avd是默认的安装......
    • web3 产品介绍 etherscan 区块链浏览器 将抽象的数据和理论可视化,小白也能看懂区块链
      Etherscan是一个广泛使用的以太坊区块链浏览器和分析平台,它为用户提供了全面的区块链数据查询和交易分析功能。在本文中,我们将介绍Etherscan的主要特点和功能,以及如何使用它来浏览以太坊区块链。一、Etherscan的特点区块链浏览器:Etherscan提供了完整的以太坊区块链浏览器,用户......
    • 分数阶导数的基本概念与介绍
      重要参考华东师范大学潘建瑜教授第一讲分数阶微分方程维基百科分数微积分连接成功-知乎慢慢推导柯西重复积分公式维基百科Gamma函数以下是我的整理一、学习的思路我们熟知的是整数阶的微积分定义,分数阶微积分的定义一般就是由已知的定义推导而来的。所......
    • 1、nifi-1.9.2介绍、单机部署及简单验证
      文章目录ApacheNiFi系列文章一、Nifi是什么1、dataflow要面临的一些挑战2、Features3、NIFI核心概念4、NiFi单机架构5、NiFi集群架构6、NIFI的性能1)、IO2)、CPU3)、RAM7、NIFI关键特性1)、流管理2)、易用性3)、灵活的缩放模型二、部署1、运行环境2、下载3、单机部署与启动1)、Windows用......
    • 12、HDFS Trash垃圾桶回收介绍与示例
      文章目录Hadoop系列文章目录一、介绍二、HDFSTrash功能开启1、关闭HDFS集群2、修改core-site.xml文件3、同步集群配置文件4、启动HDFS集群三、HDFSTrash功能验证1、删除文件并验证2、不进回收站的删除3、从Trash中恢复文件4、清空Trash本文主要介绍HDFSTrash垃圾桶回收。前提......
    • 4、clickhouse的Log系列表引擎、外部集成表引擎和其他特殊的表引擎介绍及使用
      文章目录ClickHouse系列文章一、Log系列表引擎1、应用场景2、Log系列表引擎的特点1)、共性特点2)、区别3、TinyLog表引擎使用4、StripLog表引擎使用5、Log表引擎使用二、外部集成表引擎1、HDFS使用方式2、MySQL使用方式3、JDBC使用方式4、Kafka使用方式三、其他特殊的表引擎1、Memor......
    • 15、MapReduce介绍及wordcount
      文章目录Hadoop系列文章目录一、mapreduce编程模型1、MapReduce介绍2、MapReduce编程规范3、序列化4、hadoop数据类型5、示例二、wordcount实现1、pom.xml2、Mapper3、Reducer4、Driver5、完整的代码(WordCount)6、Driver推荐写法7、运行结果1)、运行日志2)、运行结果三、运行环境介绍......