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

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实例代码(二)

用VB6.0实现打字效果 用VB编写DirectX7.0游戏(上) 用VB创建Excel报表 用VB读取和控制Windows的中文输入法 用VB将命令行软件Windows化 用VB进行移位操作 用VB开发CAI软件的小经验 用VB开发分布式应用 用VB切换三个特殊键 用VB生成EXE文件后,如何在后面加上参数?这个参数怎样传给VB 用VB实现动态显示操作进度程序 用VB实现双向循环链表 用VB实现用户登录密码的修改 用VB与MS-Draw开发通用作图软件 用VB制作TopMost类型窗口 用VB制作Windows风格安装盘 用Visual Basic 6创建基于MTS的商务组件 用Visual Basic实现Windows的重启动 VB用Windows管理技术做你的应用程序 VB用程序给标识字段(ID)赋值的一种简单实现方法 VB用自己的&#39;PROGRAM&#39;测试自己的电脑 有 BitMap 之Menu -VB资料 运行其他程序,并等待执行完毕 -VB资料 再谈VB程序的加密 在 VB 程序中如何设定 Mouse 光标的位置? 在ActiveX DLL工程中慎用App对象-VB资料 在ActiveX控件工程中设置DataField属性-VB资料 在VB中异步执行程序 在VB编程中有效地组织和利用资源 在VB应用程序中巧用DLL 在VB应用程序中使用INI文件的一点体会 请推荐一些有关.net平台的优秀书籍 加密字符串的问题 win2000下无法正常使用localhost来浏览asp页? ★★★如何将一个数字转换成英文写法?急急急!!!★★★ 关于FTP站点下载得问题。。。 STL中有没有左高树?或者菲薄那契堆? 目前,主流的B/S结构的数据库前端开发工具是什么?哪个最有前途? 给我个喜欢VC放JAVA的理由先! 如何解决两个tabpage互换时,tabpage上的控件因检索大量数据而闪烁。 有关dll在设备驱动中的问题。急,在线等待。多谢多谢!! 一个字符串常量"aaa=",一个字符串指针char *m_buffer="bbb",怎样相加得到"aaa=bbb".谢谢! 54beginner java文本框的问题 谁有Dream控件的原码(200分酬谢) 在php+mysql中能不能把数据库文件放到别的目录下! 急 求援!有谁在看<<c++大学教程(第二版)>>电子工业出版社,一道题难住了. 这是为什么???? delphi程序最小化后如何常驻内存执行(在屏幕右下角)? 用sql语句怎样创建自动编号的字段 关于外键???有人说在数据库应用中不应该使用外键,请大家说明自己的观点!! DataEnvironment如何设置相对路径的数据库 在VC中如何利用VFP的GRID控件 问高手,加密过的asp代码,用什么工具可以解码,为什么我这个工具不能用 url.openStream,从主机读取资源的疑问???? 关于外键???有人说在数据库应用中不应该使用外键,请大家说明自己的观点!! 急救,请问 TClientDataSet 的 RefreshRecord如何使用,它起的是什么作用? 窗体的大小不能改变,应怎样设置? 调查:大家说说,自己这辈子打心眼里最对不起的一个人是谁???? 关于WIN2000双启动的问题 请问怎样才能取得指针所在行的行号? 给我足够学习java的理由先! 如何屏蔽ctrl+alt+delete??? 错误的ASP:0107堆栈溢出,处理中的数据超过允许的极限!? 菜鸟的 弱问题 50分送上 相信很多人和我一样对下面的问题都非常感兴趣。。。 可否做出 有没有高手知道如何修改?用户dbo的login name为空,要改为sa如何做? 关于调色板的问题,多谢 谁知道哪有vs.C#编程百例一书中的百例download!多谢了! 要写就写爽,再来一首词 关于ado.net数据的问题 我想在输入密码时不要显示***,直接显示数据,该如何设置? 单文档多视:为何切换后视和客户区不一样大?最大化也不响应? 请问哪儿有 stl&gp 下载? 各位老大救救我 TMenu和TTreeView的紧密协作实现安全权限的设置 j2ee认证考试有人知道吗? 有关Java中事件 关于JTable的DefaultTableModel获取表格单元值的问题? j2ee认证考试有人知道吗? 我要去参加晓通公司举办的pb8 internet 开发培训班,希望大家多提一些问题 为什么说放弃也是一种美丽? 小仪人骑自行车加速度和推车前进时,地面对自行车前轮和后轮的摩擦力方向?急~!~!~!~!~!~!~!~! 一篇英语作文 作文题目是《我的春节》要运用初一到初三的知识,要用一般现代式和一般过去式,字数200字 放弃也是一种美恋爱来的时候还会来,不来的时候,你也求不得,放弃啦,期待下次,. 小议人骑自行车加速行驶和推车前进时,地面对自行车前轮和后轮的摩擦力方向写一篇科学小论文 幼儿园教师把一箱饼干分给小班和中班的小朋友,平均每人分得6块;如果只分给中班的小朋友,平均每人可以多分得4块.如果只分给小班的小朋友,平均每人分得多少块?(一元一次方程) 加速度最基本的公式就是Vt=V0+at^2 X=V0t+1/2aVt^2但是我们做题的时候遇到很多公式像什么相同时间内X1:X2:X3...=1:4:9.)相同位移时间比是什么根号几比跟好几还有很多公式像V2/x=根号(V0^2+Vt^2)/2 等等 以“小议人骑自行车加速行使和推车前进时,地面对自行车前轮和后轮的摩擦力方向”为题,写1篇科学小论文 幼儿园教师把一箱饼干分给小班和中班的小朋友平均每人分6块;如果只分给中班的小朋 we can't learn all we need on the internet写一篇英语作文60至80词即可 优秀英语作文 跟加速度有关的所有计算公式 How tO be safe on the internet 英语作文80词的. 哪里找优秀的英语作文 英语作文,告诉大家怎样做对别人才是有礼貌的 急,小红对本班同学上学的出行情况进行了调查.1/3的同学乘汽车上学,2/5的同学坐家长的自行车或摩托车上学,其余同学不行上学.步行上学的同学占全班人数的几分之几? 英语翻译随便什么话题,最好是小学生英语作文 放弃也是一种美丽许多的事情,总是在经历过以后才会懂得.一如感情,痛过了才知道如何保护自己;傻过了,才会懂得适时的坚持与放弃,在得到与失去中我们慢慢的认识自己. 物理题 小红家与学校间隔一座大山,每天上学时,五分之二的路程是上坡,其余是下坡,小红从家到校要走36分物理题 小红家与学校间隔一座大山,每天上学时,五分之二的路程是上坡,其余是下 初二优秀英语作文i want to do something for school 请问下如图 汽车速度表上那个黄色灯的标志是什么意思前段时间出现了几天没了 现在又出现了 怎样保护生态平衡 高一的优秀英语作文我是山西的一名高中生为了提高英语成绩我打算背一些英语作文要有每一句翻译,要是有具体的语法解释的话,那就更好了哈总之要一些经典的文章 如图,这是什么车啊?求这车的名称和型号... 我们应该怎样保护生态平衡 当前生态平衡遭到破坏的因素有哪些 请问图中的车是什么? 英语作文80个词,该怎么写 造成生态平衡破坏的人为之原因之一是```` 请问图中这台是什么车?就是不知道才问的具体是哪个品牌的? 帮忙写篇英语作文.要有80词 的公式 英语作文 杰克是一名中学生,一放学回家就打开电脑.父母认为太在电脑上花了太多时间,.英语作文请以书信的形式向杰克的朋友Frank讲述自己的遭遇,不少于50词 注:不要有语法、时态(最好 8个金币中有一个是假的,假的比真的轻,用天平秤2次,把假的找出来 初中生英语作文各位哥哥姐姐,我明天就考English了啊!so,得到个内部消息,就是作文题材很可能是 寒假怎么过 ,希望各位哥哥姐姐能帮我找一篇60词以上的,要求使用be going to和want 的句型的, 英语作文 杰克是一名中学生,一放学回家就打开电脑.父母认为太在电脑上花了太多时间.请向杰克的好朋友Frank用书信的形式讲述自己的遭遇.不少于50词 (不要有语法、时态、第三人称单数的 我山地车刹车片老摩在轮胎上怎么办公爵500,去了两家修车店 都说摩擦一点是正常的,说有的车很难搞,一点点就要弄半天没准还弄不好,说可以骑就行了,真烦,有一家还好给我拧了两下摩擦不那 求篇初中生英语作文假设张玉坤 17:34:08你是李平谁为寂寞买单 17:34:14然后呢?张玉坤 17:34:20下星期是你的生日张玉坤 17:34:49你准备在家开一个生日晚会 并邀请你的朋友参加张玉坤 17:34:57晚会7. 因为他想去借书 用英语怎么说? 坐汽车,乙骑自行车,都从甲地匀速驶往乙地.已知汽车经过两地中点时,自行车走了全程的五分之二 ,张津坐汽车,王东骑自行车,都从甲地匀速驶往乙地.已知汽车经过两地中点时,自行车走了全程 初中生英语作文范文在哪里找?刚刚上初中要写英语作文,我找初中生英语作文范文. 3月12日是植树节.我们少先队员每年都有到公园植树.今年也不例外看这张照片,BEN正在快速地挖洞,TONY正在慢慢地般小树苗,我正在认真地植树,LISA正在浇水,鸟儿正在快乐地在树枝上歌唱…… 奶糖每千克4.5元,水果糖每千克3元,要配制出礼品唐4.8元奶糖和水果糖要什么比例 初中生英语作文, 高分求几篇六年级水平的英语作文!我要这么几篇英语作文 六句话以上1 Our school library 2 My Desk-mate 3 1 have a dream 4 My favourite food 5 My English Teacher 6 A new year party 7 Our English Evening急 越快越好 满意 有80个硬币,其中一个是假的比较轻给你个天平你要最少称几次? 小明骑自行车,看到前方的红灯就停止蹬车,则此时前轮后轮受摩擦力方向如何? 幼儿园阿姨给同学分糖.如果每人分7块则差24块,如果每人分4块分完,把糖分给了几个同学?一共有多少个糖 英语作文 中学生日常行为规范 80词左右是应该干.不能干什么.急 试试放弃吧,也许,放弃对我们也是一种美丽.你有什么看法?要实例! 胶水干了后用什么才能使它溶解? 一辆汽车在高速公路上行驶,某时刻速度表的指针指在80Km/h,所指的速度是平均速度吗?谢谢!快! 我想成为一名.英语作文该怎么写? 胶水干了怎么办做工艺画时拿到一种黄色的胶水,放在针管里,涂成线,粘贴细条状的东西.涂上以后过一会儿会变成半固状.现在胶水可能干了,把针头堵住了,针管里的也变稠了.这是什么胶水,有 两辆速度都为80km/h的轿车在高速公路上迎面相撞,车子受损的情况是相当于一辆车以80km/h撞上墙,还是以160(都为完全非弹性碰撞,墙是刚性的而车不是,要从物理的角度分析,车是一样的,撞 英语作文 我想成为一名律师60字左右, 为什么速干胶会使泡沫塑料溶化 不小心101胶水弄到衣服上,硬硬的,怎么办啊手上也弄到了,弄不掉,怎么办啊?是棉制的衣服 英语作文 我想成为一名服装设计师我的梦想(未来){这是题目} 要初二水平,不用太长,60词左右就可以,星期四之前要,中间最好提到巴黎,最好还有汉语意思! 汽车从A城行驶到高速公路收费站C处的速度大约是每小时多少千米?(得数保留整数)有图片!从收费站C处到B城的这段高速公路上,汽车的平均速度大约是每小时多少千米?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘