说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Android JNI实例代码(一)

HTML文档下载 WORD文档下载 PDF文档下载
Android JNI实例代码(一)

作者:Android开发网


  前几天Android123有关Android JNI开发系列教程中有关的源代码,可以在本文中查找:

一、 在JNI中执行Java方法

class AndroidJniDemo {
 private native void executeMethod();
 private void show() {
  System.out.println("Java cwj print"); //执行了show方法后打印java层的输出
 }
 public static void main(String args[]) {  //这里我们在J2SE中测试,Android开发者可以放到Activity中的onCreate调用
  AndroidJniDemo ajd = new AndroidJniDemo();
  ajd.executeMethod(); 
 }
 static {
  System.loadLibrary("AndroidJniDemo");
 }
}

下面是JNI代码:

JNIEXPORT void JNICALL
Java_AndroidJniDemo_executeMethod(JNIEnv *env, jobject obj)
{
 jclass clazz = (*env)->GetObjectClass(env, obj); //通过类的对象
 jmethodID mid = (*env)->GetMethodID(env, clazz, "show", "()V"); //查找java中的show方法的ID,最后的签名符号为void类型
 if (mid == NULL) {
  return;   //如果方法ID没有找到
 }

 printf("JNI cwj print"); //从JNI中打印输出

 (*env)->CallVoidMethod(env, obj, mid); //执行show方法
}

二、获取/设置类的域或者说属性字段

 (1 String类型的属性读写

class AndroidJniDemo2 {
 private String sTmp;
 private native void readwriteField();
 public static void main(String args[]) {
  AndroidJniDemo2 ajd2 = new AndroidJniDemo2();
  ajd2.sTmp = "cwj";
  ajd2.readwriteField();
  System.out.println("Java cwj print ="+ajd2.sTmp);  //java层打印结果
 
 }
 static {
  System.loadLibrary("AndroidJniDemo2");
 }
}

下面是JNI层代码:
 
JNIEXPORT void JNICALL
Java_AndroidJniDemo2_readwriteField(JNIEnv *env, jobject obj)
{
 jfieldID fid;
 jstring jstr;
 const char *szTemp;
 
 jclass clazz = (*env)->GetObjectClass(env, obj); 
  
 fid = (*env)->GetFieldID(env, clazz, "sTmp", "Ljava/lang/String;"); // 注意sTmp是Java中声明的,String类型在java.lang.String包中,签名符号的格式注意
 if (fid == NULL) {
  return;
 }
 
 jstr = (*env)->GetObjectField(env, obj, fid);  //Java的String类型,要用GetObjectField函数获取,这里Android123提示大家没有GetStringField这样的函数在JNI中,或者说在C语言中
 szTemp = (*env)->GetStringUTFChars(env, jstr, NULL); //因为还需要赋值,在C中我们转换为utf8的类型。
 if (szTemp == NULL) {
  return;
 }

 printf("JNI cwj print=%s", szTemp); //先打印Java层传进来的值

 (*env)->ReleaseStringUTFChars(env, jstr, szTemp); //szTemp打印完不用了要及时释放掉
 
 jstr = (*env)->NewStringUTF(env, "android123"); //返新的字段值,供Java层打印
 if (jstr == NULL) {
  return; 
 }
 (*env)->SetObjectField(env, obj, fid, jstr); //设置新的属性值。
}

  (2 int或double类似的类型的属性读写,本例同时属性值是一个静态的定义,注意下面加粗的static关键字

class AndroidJniDemo3 {
 private static int sAge;
 private native void readwriteField();
 public static void main(String args[]) {
  AndroidJniDemo3 ajd3 = new AndroidJniDemo3();
  AndroidJniDemo3.sAge = 23;
  ajd3.readwriteField(); //执行jni层
  System.out.println("Java cwj print="+sAge); //java层打印新的值,应该为120
 }
 static {
  System.loadLibrary("AndroidJniDemo3");
 }
}

JNIEXPORT void JNICALL
Java_AndroidJniDemo3_readwriteField(JNIEnv *env, jobject obj)
{
 jfieldID fid;
 jint nTemp;

 jclass clazz = (*env)->GetObjectClass(env, obj);

 fid = (*env)->GetStaticFieldID(env, clazz, "sAge", "I"); //因为是整形,这里签名符号为I,注意使用的函数中包含Static代表是一个静态的属性
 if (fid == NULL) {
  return;
 }

 nTemp = (*env)->GetStaticIntField(env, clazz, fid);
 printf("JNI cwj print=%d", nTemp); //这里应该显示23
 (*env)->SetStaticIntField(env, clazz, fid, 120); //设置新的值为120,注意包含了Static,java层中定义的sAge是静态的。
}

 今天Android开发网给出了较完整的JNI下执行Java的源代码第一部分,有关第二部分可以查看 Android JNI实例代码(二)

JQuery mobile介绍 JQuery Mobile 页面结构 什么是云计算的通俗理解 什么是Hadoop以及与云计算的关系 创建一个Windows Phone 7推箱子益智游戏 好用的在线编辑器百度UEditor ASP.NET如何从URL或route数据中得到controller类型和action信息 Discuz X论坛数据表结构:论坛主题数据表pre_forum_thread Discuz X论坛数据表结构:论坛帖子数据表pre_forum_post jQuery UI 消息框(message box)的使用 kmp算法中的求Next()函数的算法 ASP.NET MVC3 如何将DataTable绑定到Html.DropDownList PHP调用COM组件 农行网上银行支付接口:无法读取商户端配置文件 农行网上银行支付接口:商户代理卖方挂单成交功能测试 Windows Phone 7 实现简单的GPS定位器 C#如何删除string中的Html标记 ImageStone图像处理C++类库 jQuery Mobile 开发入门手册--概述 jQuery Mobile 开发入门手册--技术理论 jQuery Mobile 开发入门手册--组件 SMTP/POP3收发邮件的C#类库SmtPop.Net 用C#编写的Telnet开源类库 Visual Studio C#创建Windows服务(Windows Service) C#取得Windows服务列表 C#编程自动安装Windows服务 C#安装/删除 .NET Windows服务 C#启动、停止、重启Windows服务 jQuery实现Ajax提交form表单的简单方法 字符串String与枚举Enum之间的转换[C#] Javascript统计DOM元素里文字的行数 内存大小是否会影响到网络速度? 谁来救我 ,SOS,求用C语言写的编译器 修改数据出错,不知为何? 等级考试的问题 请问能不能在不同用户登陆的情况来决定服务A是否启动。 关于还原精灵转储后win98不能启动的问题,请指教!~ 今天,我终于听到项目经理的一句内心话,让我们作为程序员感到一阵阵的寒心 请教一下 dll调试问题 怎样得到OnLButtonDown的point在整个屏幕上的坐标啊?谢谢 递归调用FindFirstFile、FindNextFile、FindClose的问题 页面调度有关的课程设计 关于client端与server端的连接问题 请问能不能在不同用户登陆的情况来决定服务A是否启动。 Textbox如何禁止它记忆以前曾经输入过的值? 我的XP的CPU经常占用90%以上,高手指点. 安装完win2000,又安装了天网防火墙,再安装SQL server 2000,快完成时启动服务警告“无法定位程序输入点” 急招深圳周边(含深圳).Net程序员 ??qustion Laney(6吨大肥猫) 快来啊^@^ 有关struts的<html:text>标签的问题!!!!!!!!!!!!!!!!!!!!!!! 为了考试挑灯夜读,遇到一个菜问题请大家帮忙! 哪位高手帮帮我!时间紧急! 关于还原精灵转储后win98不能启动的问题,请指教!~ 有几张漂亮图片,看看你的计算机是怎么累死的 求C++算法代码。 怎么实现在IE中将查找到的关键字用红色标记指示出来? 求C++算法代码。 请问哪里可以下载Numega DevPartenr Studio 测试工具 ㊣㊣ 什么也不多说了,帮忙给解决这个问题吧, 先多谢了!! ㊣㊣ 有个小小问题 寻找监测某端口的数据流量软件 都市幽灵·里面一定有宝藏 非常奇怪:为什么超链接无效? 显示异常 下个星期开始到新公司了,请大家给点经验,好吗 急!jsp+mysql,急寻blob输出方法!!! 修改记录问题 StringGrid的自画 导出 救命呀,关于XP的激活问题. 语句 请问有什么好的串口调试工具,可以模拟串口发送数据的??????? 简单问题高分相送 MessageBox.Show 方法需要什么样的名空间 使用ghost硬盘刻录硬盘怎么区分源盘和目标盘,请大虾详细说说,在线等 概念性问题(没办法,太笨了,见笑了) vf8支持动态SQL吗? 请问:如何单独安装BDE? 因为你无权连接数据库服务器?? 大家看看一个非常专业的商贸企业管理软件,要源码好商量! 高一数学题目..不会 ..求解1.已知U=R,A{X∈R|1<X<4} B={X∈R|X≤-1 或 X≥3},求CuA和CuB2.已知全集U={0,2,a的平方+2a+3} A={0,2} CuA={1,2},求a的值3.已知集合A={X∈R| 1≤X≤5} B={X∈R| a≤X≤2a+1} 且A≥B,求a的 少昊、颛顼、帝喾、.尧、舜他们还有官名吗 感觉很简单,但是我就是不知如何下手 时光荏苒,怎么念 为什么希腊是现代科学精神的起源? 与象共舞 大象跳舞给人的感觉是什么 品读经典,完成下面的填空.1.《水浒》中的主要人物有:行者______,花和尚______,黑旋风______. 黄帝、颛顼、帝喾、尧、舜庙宇在什么地方 大学对于我们的意义,请谈谈你的看法吧! 世界的统一性问题中,何谓一元论?何谓二元论?如题,要确切.重点是一元论与二元论. The most chershed Thing in life is friendship The most precious thing Between us怎么翻译没什么难度吧! 对大学社团的看法 论述世界统一性原理是唯物一元论的前提和基础 Sincere forever,the friendship forevtr,the dearones forever,love forever ls 明珠散落的意思解释对了就好了~ 世界的统一性在于它的什么 小明先向东走了5米,又向西走了3米,一共向东走了多少米?如果规定向东的方向为正方向 对大学教学的看法?还有理想的大学教学是怎样的?大学教与学的灵魂? 高一数学题 谢谢了诶~1.如果loga2>logb2>0,那么( )A.1 电视上哪个频道讲有关天文的知识 6题..文科学霸请进……为什么c不对 高一数学诶……泪流满面求指导做前三道就好了 我承认我问题很多==请给详细解释 谢谢 关于天文的知识不少于8条字数不少于260字每条不一样 大概的相近词是什么 《大道之行也》全篇课文的断句 问下问数学题目说出来吧,我在此先谢谢了1e 东阳.为什么叫东阳 Mr Smith often helps the poor people.He is a man with a kind h_____________Mr Smith often helps the poor people.He is a man with a kind h_____________ 一人向东走20米,又向西走了30米,实际走了多少米?他此时的位置应在哪里? 浙江的东阳市有叫东阳商场的吗?想去那里进货. “三皇五帝”中为何把炎帝划分在“三皇”里,而黄帝划分在“五帝”里在中国通史远古时期传说中,黄帝和炎帝同为有典氏的儿子,都是很杰出很有名望的部落酋长,为什么“三皇五帝”里把黄 一位同学在一条由东向西的跑道上先向东走了20米又向西走了30米能否确定他现在的位置与原来位置相距多少米 晶莹剔透、水生喧腾,明珠散落的意思 三皇的“天皇”、“地皇”、“泰皇”,和“伏羲”、“神农”、“黄帝”.是一样的么?如题 一位同学在一条由东向西的跑道上,先向东走了20米又向西走了30米能否确定他现在的位置与原来位置相距多少米 耳朵用英语怎么写耳朵,眼睛,鼻子,手,嘴巴,头,脸怎么写 三皇中的“黄帝”与五帝中的“黄帝”是否一样? 某人向东走5米,又向西走5米,那么此人实际走了多少米?他的位置是在?请帮助帮助回答,谢谢!这道题我不知道该怎么写,请来帮助我把! 珍珠泉似明珠散落 ,—————— ( 对对子 )急 某天文观察者观看到下列现象,依据天体的相对位置判断,不可信的是.白天看到日食,同一天晚上看到月食为啥不对,日落后既看到火星又看到木星为啥对?跟剧天体的相对位置判断 某人向东走了20米,又向西走了30米,实际走了多少米?这是一个关于有理数的数学问题主要是要弄清实际说的是路程还是距离 有文科学霸麽 关于天文星象的基础问题:是根据什么判断一个星次里边有二十八宿中的哪几个呢?比如说正月,如果在正月的时候观星,是在黄昏的时候太阳落山的西方出现的星宿属于娵訾吗?是我没有表达清 已知X十y=5⃣️Xy=2⃣️求(x-y)^2.x^4+y^4的值 Lambert1.[男子名] [英格兰人姓氏] 兰伯特.来源于日耳曼语人名,含义是“土地,领土+光明的,著名的”(land,territory+bright,famous) 2.[英格兰人姓氏] 兰伯特.职业名称,牧羊人,来源于古英语,含义是“羔 Taking your measurements won't help when it comes to picking your size 若丨x-3丨+丨y-2丨=0,试求2x+y的值 Lambert1.[男子名] [英格兰人姓氏] 兰伯特.来源于日耳曼语人名,含义是“土地,领土+光明的,著名的”(land,territory+bright,famous) 2.[英格兰人姓氏] 兰伯特.职业名称,牧羊人,来源于古英语,含义是“羔 英语翻译when it comes to 一般在什么时候用的 若丨x丨=3,丨y丨=5,且丨x-y丨=-(x-y).求丨x-3丨+(y-5)²的值 Fedor可以做英文名字用吗?是英文姓还是男子名? 黄帝姓公孙,根据司马迁史记记载,为何其孙,孙之孙颛顼和帝喾都姓高,即高阳和高辛. 已知丨x-2丨+丨y+2丨=0,求 x,y的值要用上初中因为所以的符号,具体点 什么像一颗颗明珠造句 请从语法角度分析.The date marks the end of...the date marks the end of one of the periods of roughly 400 years into which the Mayan calender is divided. Your Personal Day of Death is... Tuesday, April 9, 2075 Seconds left to live...2,120,323,716 Delay Your Date of Death How Migraines Impact Quality of Life Gastroesophageal Reflux Disease: What You Should Know A Lack of Sleep or ADHD? 都是什么 有人说:“现实是此岸,理想是彼岸,中间隔着湍急的河流,行动则是架在河上的桥梁.”这个句子充满了哲理.请你也试着将《在山的那边》全诗的内容浓缩提炼,仿照这个句子写一句能概括全诗 能帮我翻译一下这个句子吗?at the end of an income year ending on the date of death Your Personal Day of Death is... Friday, August 8, 2081什么意思?Delay Your Date of Death The Phases of Migraines What to Expect When Getting an MRI Polycystic Ovary Syndrome: What You Should Know 这都啥意思? 暴雨离檐,犹如明珠散落,一地流水向低而去. 伊朗死囚受绞刑后未死 司法部长称没必数据显示日韩航路日本乘客骤减 创历史美影院拟设“手机短信专用区”防手机光英14岁少年被控5次性侵 3宗案件发普京指责俄地方政府官员失职导致严重民美秘密窃听法公民惹怒法总统 法紧急召纽约华埠便衣警察扮匪调查抢劫案吓坏金叙总统称叙会议日期未定 联合国特使将奥巴马健保网面临感恩节大限 逾期恐将韩国人战殁者遗属要求靖国神社取消合祀美国财政僵局刚解 共和党就医改法案再法调查显示大量法国工程师赴中国等国家“叙利亚之友”反对巴沙尔在叙未来政府俄南部爆炸案致6人亡 女凶手原计划袭法国调查显示大量法国工程师赴中国等国中国土豪钟爱韩国皮草 炒高韩国皮草价数据显示日韩航路日本乘客骤减 创历史新华国际时评:中美航天应少猜忌、多合浙江义乌一处道路中间竖竹梯顶替电线杆美国否认与沙特阿拉伯关系紧张 坚称关2047年:全球高温临界点?晚安丨在疼爱你的人面前,你永远都只是亏大了!遇上做法简单,吃多不胖的甜品解放军列装\"鱼-8\"反潜导弹 打下周操作听我一句劝“互联网+”引领面粉行业转型升级阿娇进军游戏圈 代言《超凡三国》十足这个国家惹怒俄国灾祸临头:中国潜在对1217互联网驾校“五一巨额红包”引福特F750美国卖60万,运到中国竟“大宗商品”疯狂涨势受扼杀,投机潮“伊朗石油产量又翻新高 “借鸡下蛋”悄《非诚勿扰》男嘉宾凭借一套抄底技巧抱10年资深老股民告诉你为什么不赚钱日本潜艇跟踪我军18天真相 竟被一装空警200预警机首飞秘密画面曝光 机任桂辛等国家女足队员获“里约奥运会纪李铁:河南建业是中超强队 球队已做好贾秀全:我们希望通过学习不让幸福擦肩这篇文章充分体现《美队3》铁杆粉丝的色彩丰富多样的火星地貌美元走强,油价“怒火燃烧” 一路“V
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘