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

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

见证中国开源的力量:“开源力量”2013年度庆典活动亮点汇总 专访APU13讲师、西电朱虎明:概念难以理解成异构编程最大阻力 盘点2013:21款最优秀的开源数据库 苹果三星再次谈判,欲和解所有侵权案 应对iOS in the Car,Google将携手奥迪推Android车载系统 10个技巧让你更轻松地使用AWS 《近匠》第04期:移动开发技术访谈,多看科技CTO王毅——阅读未来 2013年Linux领域重要事件回顾 2013年12月操作系统份额:Windows XP跌破30%大关 Linux小幅上涨 Snapchat存安全漏洞 460万用户信息被窃 年底广告高峰:AdMob团队支招“马上赚钱” 从远程调用框架认识Zookeeper 盘点Hadoop生态圈:13个让大象飞起来的开源工具 【开源推荐】Ejoy2D:“风魂”游戏引擎作者云风的又一力作 Web应用在IE11里的实际使用性能 回顾2013年十个值得关注的WordPress设计主题 为什么Google眼镜注定会失败? 2013移动开发工具盘点:最火原型设计工具 2013年12月份浏览器份额:IE 11暴涨3倍 【PPT集萃】十位一线专家分享Spark现状与未来(二) 2014年,怎么做产品才能获得成功? 年末新游盘点:2014年移动游戏四大趋势 IDC:全球有1850万程序猿 4成爱好者在写代码 PHP开发框架流行度排名:Laravel居首 2013年度最强AngularJS资源合集 研发周报:回顾2013、技术栈的选择、开源成趋势 TIOBE 2014年1月编程语言排行榜:Transact-SQL力挫Objective-C 夺得桂冠 IBM:这五个智能技术的发展,将会改变我们生活 一周消息树: 微软的2013,Surface的2014 Amazon CTO Werner Vogels:云和SaaS正在快速风靡全球 “人类先知”Isaac Asimov 50年前的科技预测大多应验了 一个局域网内访问odbc数据源的问题 对女孩子不能太热情了! 一个easy 的question 请精通C#与VB.net的大虾帮忙翻译一下 在异地拷贝一个文件(200M以上)到本地,如何做 《C++程序语言》(特别版)怎么样 getContentPane()是什么意思? 高手请进!嵌入网页中的Activex如何获取加载它的浏览器对象?谢谢! i am 24 year old ,but i have nothing 请问哪里有exchange2000 server??? XP,IE 6 SP1,安装JRE 1.4无数次,<APPLET>标签下的东西仍不能看,<OBJECT>可以,为什么??!!求救!! Socket发送接收的问题! c++ builder6的盘 mapx 问题? partition magic 8.0 一个既包含静态图象又包含视频播放的视频,怎样把它抓屏下来??? SOS!!!一个有关全文检索,以及文档的数据库存储的问题,急急!各位大侠出招啊,在线等候 请问如何在程序中将CEdit控件设为只读或取消只读, Java认证问题 请问你们认为哪种操作系统更好用和稳定? 关于mfc dll wizard 做出来的dll 的内存泄漏问题!! vc++与C++Builder有何本质的区别? 能否做个象Media Play的ACTIVEX查件,既有动画窗口,又有按钮??? 高手,关于数据库转换的问题 给分:谁有关于“从网卡取得数据”方面的论文 大家好,有一个关于拔号、专线系统的IP地址问题 SAX的问题 表单传递后,如何判断用户是否填入了内容的? 请教 请教各位大侠 各位好,小弟初学Oracle,请各位指点哪有相关电子书下载,多谢! 辞职,不知是对是错?(第一次散分,请版主高台贵手) 关于vb在com编程的几个问题! 请教如何用C#取网卡MAC的地址?? 那位大侠做过数据加密解密的程序呀! 询问一个关于组件安装的问题 Windows2000网上邻居里没有任何东西 我要的form控件在哪里? 有谁用过windows.net server 2003? 有关于结合JBuilder介绍XML的书籍吗? treeview的一个问题 有谁用过windows.net server 2003?介绍一下相关情况?谢谢 如何单击按钮产生超级连接的效果? mail函数怎么让邮件正文换行? redhat 7.2 请问这个问题如何解决? DropDownList不捆定数据库在线等待 急! 大家好,请教一个创建表的问题? win98第二版安装密码 Frontpage与Dreamwear的兼容性问题 PHP+MSSQL怎么配置? 下列五种有色溶液与SO2作用,均能褪色,其实质相同的是( )①品红溶液 ②酸性KMnO4溶液 ③溴水 ④滴有酚酞的NaOH溶液 ⑤淀粉—碘溶液A.①④              B.①②③C.②③ 高压灭菌锅,深圳高压灭菌锅,高压灭菌锅价格,高压灭菌锅规格,高压灭菌锅型号,高压灭菌锅厂家? 化学清洗的目的是什么啊? 女生生病了要我帮她去拿药 说明了什么校医室不远 她只不过是咳嗽 Fe可不可以与CuO反应 化学清洗哪家好? 细菌拟核中有一个环状的DNA分子这句话对不对2 细菌和蓝藻都有细胞壁,细胞内只含有DNA一种核酸分子 对么? Cuo能与Fe(So4)反应吗 双四核和单八核.有什么区别吗? 为什么环状 DNA细菌体内的A≠T,C≠G? 叶绿体中ADP由叶绿体基质向内囊体膜运动,ATP则是向相反方向运动为什么是对的? 粘米粉是什么粉 植物POD达到三四百,有没有可能?植物(沉水植物)叶片的POD值的范围一般是多少?在叶片还绿时达到三四百有没有可能? “氨能直接被植物吸收”这个说法对吗?如题有个题是:3.下面有关氮循环的说法中正确的一项是 A.生物的固氮过程就是氮被吸收到植物体内并被利用的过程 B.氮素一旦进入生物体内就会形 在叶绿体中adp atp的运动方向是 怎样准确阅读药品说明书? 问问“看不懂”的粤语怎么说? 激烈运动时,ATP和ADP会怎样? 节能灯塑料件的配方,我知道节能灯塑料件PP料加母料(就是石粉)的配方,但我石粉加多了,产品就容易碎,一捏就破,可能还有一种原料要掺进去,那就可能是玻纤,但我不知道他们的配比是多少, 带8个结晶水的氢氧化钡和氯化铵反应的中立即用玻璃棒搅拌的原因 歌颂党征文 魔法玉米如何消毒? 为什么环状DNA细菌体内的A≠T,C≠G? 中国特色共产主义和资本主义区别的具体表现如题,请从经济政治文化等方面具体举例说明 猪场氨气太重,怎么处理? 粤语,听不懂不说,可怎么还看不懂...那些繁体字不说 好像很多词都没见过 像是古人用的 有点文言文的味道 有些简单句子看起来还特别扭 中国人的共产主义体现在什么方面 怎么样解决养猪场的氨气?目前我们规模比较小,但是氨气也比较严重,请问有什么方法可以解决呢? 细菌拟核中的DNA是单链的对吗? 如何让贝壳里面的肉快速融化 为什么必须阅读药品说明书上的注意事项 下列关于HC-三键-苯环-CH-二键-CH-CH3的说法中正确的是A.所有原子都可能在同一平面上B.最多只可能有9个碳原子在同一平面上C.有7个碳原子可能在同一平面上D.只可能有5个碳原子在同一直线上 人的尸体煮了肉会不会融化成水? 一个关于药品的问题,药品说明书上有如下内容:不良反应:尚不明确禁忌:尚不明确注意事项:尚不明确这说明什么问题? 苯环可以与CH3-CH=CH2反应么?生成什么? 碘化铅是盐吗?属不属于酸碱盐之中? 阅读下列材料,材料一:楚越之地,地广人希(稀),饭稻羹鱼,或火耕而水耨,果隋赢蛤.材料二:江南地广野丰,民勤本业,一岁或稔(丰收),则数郡忘饥.)材料二中的江南地区相比材料一中的描 英语翻译Other ingredients:soybean oil,soy lecithin,gelatin,glycerin,magnesium hydroxide,silica.Warning:if you are pregnant,nursing,taking any medications,or planing any medical procedure,consult your doctor before use.discontinue use and consult 那些室内植物可以防病杀菌(晚上不会释放出有害空气) 兵团棉花目标价补贴是按面积补还是按斤数补 翻译药的说明书!第一种药:Duodenal ulcer,1 cup in the morning for 2-4 weeks, Gastric ulcer, reflux oesophagitis 1 cup in the morning for 4-8 weeks, Patients refractory to other regimens 40mg once daily for 4 weeks in patients with duodenal 清洁空气应该在家里放什么植物? 谁知道棉花是怎样补贴的? 亚铁离子的存在为什么会加速高锰酸钾氧化氯离子 植物怎么清洁空气 2014年棉花补贴怎么补 审计风险的定义和组成要素是什么? 化学清洗标准有哪些?谁知道啊 棉花补贴补每亩补贴l了191元,剩下的产量补贴还能补多少钱 实验室消毒设备有哪些谢谢wrgeng的回答,请问能再说明更细吗?例如紫外线灯用可移动的还是固定的好?臭氧我用密闭的臭氧机还是什么好?呵呵,多谢 在不同的季节(用英语表达) 细菌质粒是不是环状DNA?它要是DNA为什么还要做细胞工程的运载体?把它放入细胞里面,细菌的DNA不就也进去了么?而且目的基因是如何把质粒当成载体的呀? 找个懂德语的翻译段德语http://www.euro-piano.org/html/modules.php?op=modload&name=News&file=article&sid=80这个西德人的生平.翻译好了,再加一百分,现在不能一次二百了. 想了解化学清洗行业的验收标准?涉及到每个行业的化学清洗的验收标准, 某种细菌每15分钟分裂一次(有一个分裂为两个)经过2小时,这个细菌由1个分裂成几个? 手提式高压灭菌锅如何使用什么时间放气?如果是电炉如何维持20分钟? 用英语表示一年内"季节"怎么表达? 噬菌体在细菌细胞内的繁殖,需要利用细菌的物质中,为什么没DNA我看实验过程明明有细菌的DNA参加 含氯消毒剂中 氯 指什么 A元素 B原子 C分子 D离子 我认为应该是D 在每个季节我们都能做哪些事情?用英文表达比如说春天:fly kites 夏天:go swimming 秋天:climb the mountains 冬天:gong skiing越多越好每个季节能做的事情的英文词组,要有季节特征 日本福岛外海强震上修为7.1级 东京海军三大舰队首次在西太平洋实兵对抗前美国国安局长“私聊”遭邻座“直播”美媒体称俄外交官在美招间谍 费用俄方美恶妇险扯断幼儿生殖器用胶粘合 面临商务部谈第四次中欧经贸高层对话30余国领导人遭美监听 偏爱私人手机美电视台脱口秀节目“杀中国人言论”被墨西哥一糖果厂爆炸 1死20人失踪7米高阿根廷恐龙亮相新加坡 系亚洲首\"监听们\"丑闻 美国欠全世界一个新加坡华人青年从事旧货买卖 为环境保凯特王妃低胸礼服出席晚宴 展苗条身材日媒称4架中国军机同一天越过冲绳飞向英航空公司推出空姐半裸慈善日历新加坡法院首次执行中国大陆司法判决英王室公开最新四世同堂全家福{高清)稀世粉钻亮相 拍卖价预计可达6000新加坡向中国颁发电子团体签证福州旅游局官微骂记者 专家:官微亟需直击“机动-5号”实兵演习:势均力敌高考首日有阵雨 早点赴考防塞车白坭部署下半年 文明施工工作佛山媒体深圳华强行圆满结束年底禅城10分钟可达广州南站湖南伤医案打人者确系省人大干部羊奶粉捐助广州市儿童福利院及株洲市脑印尼酸奶杏仁咖喱鸡端午六一小长假逾20楼盘推营销广东开放个人投资者“炒碳”“足球高尔夫” 你没看错,这是一项新仅四成受访市民有意落户城镇“幸福左右·时报有约” 左右家私深圳摇头丸之父病逝 “毒理学圈每个人都尊失业女性生育可领3倍失业保险金网秦击破浑水做空计谋公务员咋也那么容易被骗?塘厦“半山儿童乐园”营业他突然给你一股冲击,也许想考察有没发证监会再发3家IPO预披露名单珠江泳场六月中旬开张 价格或有调整越秀地产昨启动城市办公环境健康调研
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘