Android NDK 学习笔记

本文分享了作者在Android平台上实现socket通信的过程,包括NDK的安装、javah命令使用、c访问java类成员和方法等关键步骤。通过实践,作者积累了宝贵的经验,并在文章中详细记录下来。

转: http://blog.renren.com/GetEntry.do?id=718959269&owner=228440950

上个星期,导师看我们闲的慌,让我们实现Android平台下的socket通信,实现两端通信。采用NDK方法,java编写界面,c编写socket实体。从此开始了我们一个多星期的磨难。本来以为是一个很简单的程序,编写的时候才发现很麻烦,遇到的问题不断,正常问题有,诡异的问题也不少。不过的确增长了不少知识,现在将一些学习到的东西记录下来。

NDK的安装过程就不说了,网上都有。只是在一个文件中增加一句话就可以搞定,很简单。接下来的才是重点。

1.javah 命令

   这个命令是用于生成*.c文件的头文件,同时最重要的是,生成java中的本地方法在*.c文件中的函数名。若是你对这个函数写法不清楚的话,可以试试这个命令。使用过程如下:

     1.将用javac命令将定义本地方法的java文件编译,生成*.class文件。

     2.退后到工程目录下的src文件中。

     3.终端输入如下命令: javah -jni com.studentmanager.mars.JNI。其中com.studentmanager.mars是完整的包名,JNI是我定义本地方法的文件。注:可不要将继承Activity的那个文件用javac,这是不能编译通过的,可以将本地方法定义到另一个类中。

     4.将在src文件中生成的头文件移到jni文件中,然后在*.c文件中包含这个头文件就可以了。

     截图如下: 

2.javap

   这个命令是用于GetMethodID方法中,显示此java文件中函数的签名。具体意义在后名说明,它的用法如下:

    1.进入工程目录下面的bin目录。之所以进入这个目录是由于,javap这个命令对*.class文件起作用,而继承于Activity的java类的*.class文件就在bin目录中。

    2.在终端输入:javap -s -p com.studentmanager.mars.Client     其中-s是指获得签名,-p是指显示private函数, com.studentmanager.mars是完整包名,Client是你需要访问的文件名。运行截图如下:

3.c访问java中的类成员和方法

   这个在程序开发中非常重要,网上也有很多关于这个的帖子,一般代码如下:

   

   第一行代码的目的是获得一个jclass的对象,有两种获得方式。一种是如图所示的GetObjectClass方法,还有一种是FindClass方法。当使用GetObjectClass方法时,需要具有你所要访问java类的一个实例对象。在系统自动生成的两个函数中的jobject thiz也是一个java类的对象,它是你本地方法定义的那个类的对象。使用FindClass方法的格式如下:

jclass objectClass = (*env)->FindClass(env,"com/studentmanager/mars/MyThread");

其中com/studentmanager/mars是完整包名,MyThread是类的名字。

   第二行代码的意思是获得类对象中name成员函数的ID号,"Ljava/lang/String;"表示它的类型为String。

   第三行代码的意思是通过这个ID号获取name成员的值。

   第四行代码的意思是将jstring类型转换为char * 类型。

    注:使用FindClass方法时,由于com/studentmanager/mars/MyThread替代了类对象,故我们需要重新生成一个类的对象。生成代码如下:

    第一行中的GetMethodID方法和GetFieldID方法的含义类似,就是获得类中方法的ID号。"<init>"是一个特殊的方法,即构造方法。它的写法就是这样,不需要进行改变。若想调用其他的方法,可以在那个位置写入方法的名字即可。

    第二行中的NewObject方法即生成一个新的实例对象。

     若想调用类中的方法的话,在获得了方法的ID号之后,调用Call<type>Method方法,即可。整个代码如下:

数据集介绍:垃圾分类检测数据集 一、基础信息 数据集名称:垃圾分类检测数据集 图片数量: 训练集:2,817张图片 验证集:621张图片 测试集:317张图片 总计:3,755张图片 分类类别: - 金属:常见的金属垃圾材料。 - 纸板:纸板类垃圾,如包装盒等。 - 塑料:塑料类垃圾,如瓶子、容器等。 标注格式: YOLO格式,包含边界框和类别标签,适用于目标检测任务。 数据格式:图片来源于实际场景,格式为常见图像格式(如JPEG/PNG)。 二、适用场景 智能垃圾回收系统开发: 数据集支持目标检测任务,帮助构建能够自动识别和分类垃圾材料的AI模型,用于自动化废物分类和回收系统。 环境监测与废物管理: 集成至监控系统或机器人中,实时检测垃圾并分类,提升废物处理效率和环保水平。 学术研究与教育: 支持计算机视觉与环保领域的交叉研究,用于教学、实验和论文发表。 三、数据集优势 类别覆盖全面: 包含三种常见垃圾材料类别,覆盖日常生活中主要的可回收物类型,具有实际应用价值。 标注精准可靠: 采用YOLO标注格式,边界框定位精确,类别标签准确,便于模型直接训练和使用。 数据量适中合理: 训练集、验证集和测试集分布均衡,提供足够样本用于模型学习和评估。 任务适配性强: 标注兼容主流深度学习框架(如YOLO等),可直接用于目标检测任务,支持垃圾检测相关应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值