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

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

Android上HTTP协议通讯状态获取 Android开发需要自己完善的类库总结 Android的ListView控件滚动时背景问题 GestureDetector手势识别类 - 进阶篇 MenuInflater Android菜单从xml创建方法 EditText输入提示你知道吗? Android布局Java代码构造法 Android全屏设置代码 测试Android软件性能主要方法 自定义Android标题栏TitleBar布局 获取Android屏幕方向及键盘状态 Android平台XML解析库功能不完整 GestureDetector手势识别类 - 入门篇 不会Java或C,Android123告诉你还有选择 Splash Screen开场屏在Android中的实现 Android游戏开发性能改进要点 Android的Activity你知多少呢? JSONObject在Android上的应用 Android高性能文件类MemoryFile 判断Android文件名是否安全技巧 让你的Android程序兼容多种分辨率 Android Button按钮控件美化方法 Android堆内存也可自己定义大小 TextUtils类-Android字符串处理类 InputSream输入流转String字符串,Android开发工具类 Android中的正则表达式Regex使用 优化Dalvik虚拟机的堆内存分配 Android标题栏进度指示器使用方法 Thread和Looper以及Handler和Message详解 Android开发必读 layout资源包含,android开发必读 Android本地化开发技巧 怎样知道一个调度执行失败或没有执行???(MSSQL7)上火呀~~~ 如何将自己定义的记录类型转化成Tmemorystream对象? c++builder5的下载地址? 做个调查,来者有分。 ODBC下的数据库查询,急!急! 初学者的问题--com dll服务器如何在客户程序中使用? 如何统计 DBGrid 中记录的个数???? 请教:m_fLogfile.Read(pBuffer , sizeof(VNumAndPassWord)); 错在哪? 谁能替我做一张图片啊? 气死人了,安装红帽子在输入根口令时遇到的尴尬:( 奇怪的oracle数据库错误? 公布我的软件了——网络邮盘,国内日下载量>1000,国外<10 关于堆和栈的队! 请问,准考证的英文怎么说? ASP终极开发:请成功用INSTALLSHIELD设置好IIS的高手朋友进来看看。100分全散了!!!!! 是屏保的问题?还是硬件故障? 紧急救命啊!各位大虾:)98关机时断电出现的故障 初级问题,请教大侠 在C#里面如何取得这个SQL値那? 请教, 扫描的问题... 不好意思,还有问题,关于span,恳请高手答完再下班。 心情郁闷,各位朋友安慰我一下好么。 如何注册JDBC驱动啊!我手头好多的驱动但是我不知道如何的注册这些驱动 在RICHEDIT里怎么实现换行输出? 200分求快速取中值的算法!(thirdapple) Flash Action 如何定时,就像Javascript中的setTimeout()? 保护的问题 用一个关于Printer对象的问题?各位大虾,初来乍到,请多多关照。 请问如何自动提交一个FORM? 请问各位师兄:web开发如何起步?例如使用JSP? 求助! 如何知道电脑中的网卡是什么型号的? 大家请帮忙,兄弟必重谢,分都给了 如何制作含有msdn数据库的安装程序 Web Service服务程序如何增加对SSL的支持? 怎么還可以上網﹐向各位大蝦求救 请问如何自动提交一个FORM? 如何处理并发访问! 如何在网页中打开*.ocx组件?是否能打开? 如果给我再来一次的机会...我还是想说... 求随机数发生器的算法 高手来拿高分!!!!!!!!!求开发自定义服务器控件的好书或代码 那位有ESQL(嵌入SQL)中文资料? 如何select LONG类型的字段? 红帽子里面可以演戏吗? 如何改变 Win me 快捷方式上的小键头图标。 ANY元素不是可以表示“任意”吗?为什么这个不行? 皇帝的新装 求助! 如何知道电脑中的网卡是什么型号的? 在winxp下如何安装winme实现双系统启动 在windows form下,怎样为datagrid添加click事件? 大家说小系统用什么数据库好,别说用ASA,ACCESS 汉译英几个短句记得外出时吧外套穿上(WHEN,PUT ON)你一定很累,应该去睡觉打破这扇窗他们全家都喜欢在花园里干活 Sidney、Toronto(这些国家和城市在中文里是怎样翻译的?) 为什么promise+to do而consider + doing? the man __ me is talking loudly with the girl __.A .in front ,to his leftB .in front of,to his rightC.at the front of,on his leftD.in front of,on his right为什么? The distance between you and me,that what means to measure?You know what翻译中文 promise doing sth还是to do sth 汉译英 几个短句请翻译以下内容:这是一封来自中国的邮件.由于看到中国的泥炭需求量大增,陆续有欧洲和北美的泥炭公司进驻中国市场,谋求发展.如果您欲在中国市场寻求商业机会,请关注 Paris,Tokyo,toronto各是哪国的城市? promise doing 和promise to do有什么区别?球答.类似的问题呢 xxxto do/doing.. 我不认识音标,怎么学啊 according to the conversation between Joe and the aliens, what do we know about Venus 怎么翻译 你能感受到自然与文化的交融 用英语怎么说 音标也不认识啊 我要去考公共英语四级,请问考过的朋友,我该怎么复习?该怎么复习啊,我看了一下题感觉好难.好害怕.这样是绝对过不了的,我要过的是公共英语四级。现在已经被吓坏了。真不知道报考是对 两种文化碰撞交融的英语怎么说由上传统文化与先进文化碰撞交融的英语怎么说 不认识音标怎么办我想问一下,等我上初中的时候,英语试卷上会不会考音标 She is on longer the pretty girl ______she was.A.that B.who C.as D.whom讲解说that作表语那C为什么不行?as也能作表语,表示人和物都行 having drunk some milk i have some trouble with my stomach这里为什么用having而不用have?为什么? The boy's______ is tom She ___ some of her friends thought she moved to another city.A.kept away from B.took care ofC.kept up with D.caught up with说明理由, “I am having some trouble with my classmates ”said lisa 直接英语变间接英语 “I don‘t want to end 怎么能认识音标!怎么能认识和读好它! 请问Kite is no longer the girl she 请问Kite is no longer the girl 已经是Kite再也不是曾经的那个女孩的意思了,为什么后面还要加she was? Promise to do 和Promise sb to do 区别何在含义 Tom's brother is clever,_________ the boy can't be trusted.A.only B.or C.for D.and She is no longer the girl she was before she went to the countryside.麻烦讲讲这个从句,看得懂,但弄得不太明白. 象interst 修饰人后面加个ed 修饰物么加个ing有什么规律吗 interst又是什么词性 还有哪些词的规律是这样 怎么快速认识音标? what's the Difference between (for and with) (helped and was helping) 怎样能准确的翻译句子 +ed形容人 + ing 形容物 至于什么词加的我忘了.记的我妹妹说过... The town is no longer _____it was five years ago,______it was quite dirty.A what ; which B that ; which C what ; when D that ; where the boy on the bike is tom's brother.对on zhe bike提问,怎么写?little john does his homework every day.对does his homework提问,怎么写?最快的就选! 多伦多什么意思好友在qq里说 “多伦多 俄亥俄”什么意思 以下的字怎么读 英语翻译求翻译 Toronto什么意思? watch out! She does (her homework) in the evening对括号部分提问 going back to toronto for education中文意思是不是正随后去多伦多教育?还是培养? watch out 与watch out for的区别he minds so much about his position in the office that he_____any chance to be promoted.中为什么用watch out for而不用watch out 多伦多属于什么气候类型 Toronto什么意思,帮忙回答一下 That's why I propose,that as of today;这句话中as of 的用法是什么? Tom is a boy w____ small eyes and a big nose. He is a very good man ,还是He is very good man?哪个对? as that用法A large-amplitude compression wave,as that produced by an explosion or by supersonic motion of a body in a medium.中that是指wave么? The boy with big eyes _______ (not be) my brother.The boy in a red T-shirt _______. ] he is poor,he is very happy. 形容词最高级前加the,那么比较级前面加说明? 高中英语省略句的题,1到9 Joan was happy because she was given some _(use) gifts last week. 汉译英(几个短语)1)紧张 2)多喝水 3)太多 4)饮食习惯 5)与.不同6)每年一两次 7)很,非常 8)前往 9)根据,依靠 He is a successful businessman改感叹句?a businessman he is 用括号内单词的正确形式填空.She ______(marry) a rich man some years ago. 比较级前面不用加the,最高级加the ,对吗 My father is a businessman. He likes _________(make)money.He ___________(be) a businessman forMy father is a businessman. He likes _________(make)money.He ___________(be) a businessman for ten years. I was a student some years ago.对some years ago .提问怎么提? 汉译英的几个短语几个短语 do you know what's going on between your legs?求翻译 这个字念,什么
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘