Qt C++通过JNI技术调用Java,FindClass()获取不到类 [问题点数:50分]

Bbs1
本版专家分:0
结帖率 0%
Bbs12
本版专家分:378075
Blank
状元 2017年 总版技术专家分年内排行榜第一
Blank
榜眼 2014年 总版技术专家分年内排行榜第二
Blank
探花 2013年 总版技术专家分年内排行榜第三
Blank
进士 2018年总版新获得的技术专家分排名前十
2012年 总版技术专家分年内排行榜第七
Bbs1
本版专家分:0
android C++ 和 jni,根据JNIEnv的FindClass获取java类,包括多线程
c++ 代码 #include #include #include #include #include #include #include #include #include          // std::chrono::seconds #include #include "test_c_<em>java</em>.h" #define
Android JNI里c++调用java时遇到的FindClass返回0的问题
我在工作中要解决一个问题就是,从
JNI学习笔记——创建JAVA对象和内部类需注意
跨过了基本类型和基本类型数组的坑后,迈入字符串和
安卓android jni创建线程后无法findclass
参考: http://blog.csdn.net/qiuchangyong/article/details/27222701 http://blog.csdn.net/lirunfa/article/details/8030094 C++里首先定义全局变量: JavaVM* gs_jvm = nullptr; 然后在第一个<em>java</em><em>调用</em>c++的函数里<em>调用</em>
Jni本地多线程回调Java函数,env->findClass()失败。
Jni回调 Native层本地多线程回调Java函数时env->findClass()失败问题
Qt安卓JNI交互之(2) C++调用JAVA对象的动态方法(1)
JAVA中的String String是一个类,在JAVA中非常常用,和C++交互也很常用.QT封装了他,只需要<em>调用</em>: QAndroidJniObject::fromString("字符串"); 返回一个String对象,使用的时候JNI识别jstring,需要强制转换: 对象.object()); 转换成jstring QtAndroid::androidActivity()
C和C++中FindClass用法区别
如果是c程序,要用 (*env)-> 如果是C++要用 env-> ps:在linux下如果.c文件中用 “env->” 编译会找<em>不到</em>此结构,必须用“(*env)->”,或者改成.cpp文件,以 c++的方式来编译。 以下是两者的区别: <em>jni</em>.h中 struct JNINativeInterface_; struct JNIEnv_; #ifdef __cp
实现自己的类加载时,重写方法loadClass与findClass的区别
Java中的类加载器,有启动类加载器(Bootstrap Classloader)、扩展类加载器(Launcher$ExtClassLoader)、应用程序类加载器(Launcher$AppClassLoader),用户还可以实现自定义的类加载器,见下图:       类加载的这种关系称为双亲委派模式,需要注意的是他们之间不是继承关系,而是组合关系,在执行类加载的动作时,首先都是交给父类去加载
JNI开发-C/C++调用Java静态函数参数和返回值均为String类型
        C/C++<em>调用</em>Java函数参数和返回值均为String类型; Java的CCallJavaTools类: package com.niubashaoye.ndk.<em>jni</em>; public class CCallJavaTools { /** * C/C++<em>调用</em>Java静态函数传递String参数并返回String类型值 * @param str * @retu...
Android jni调用java方法遇到的坑
今天<em>jni</em><em>调用</em><em>java</em>方法的时候一直报错,说找<em>不到</em><em>java</em>方法 刚开始还以为是方法名和签名写错了,查了半天,也没找到问题最后在build.gradle中发现debug的时候开启了混淆,最后在proguard-rules.pro中不让混淆才解决了-keep class com.pf.ffmpegmusicdemo.*{*;} 总结:搞<em>jni</em>的时候慎用proguard
Android中JNI方式调用Jar包
标 题: 【原创】Android中JNI方式<em>调用</em>Jar包 作 者: 蟑螂一号 时 间: 2013-10-10,10:44:03    最近在研究DexClassLoader加载jar包,在帖子“使用DexClassLoader<em>调用</em>jar包”使用的是Java方式来加载jar包,并<em>调用</em>jar包中的方法,完成相关功能。现在我将<em>通过</em>JNI方式实现动态加载jar的成果和大家分享一下。   以下为关键
在C++中调用JAVA的内部类方法
在NDK开发中,有时候会用C++去<em>调用</em>JAVA的方法,下面演示如何在C++中<em>调用</em>JAVA的内部类方法。 需要注意的是FindClass的时候需要用$连接内部类的类名。 下面的函数<em>通过</em><em>调用</em>Settings.Secure.getString(Context context,String name)来<em>获取</em>Android ID:std::string getAid(JNIEnv *env, jobjec
jni C语言调用java的小例子(java返回string)
jclass regionClass = env->FindClass("com/oppo/util/RfUtils"); //查找<em>java</em>类RfUtils if(regionClass!=0){ jmethodID mid; mid = env->GetStaticMethodID(regionClass, "getPrjVersion", "()
使用JNIEnv全局变量调用FindClass()等函数发生crash
********** Crash dump: ********** Build fingerprint: 'samsung/gt58ltezc/gt58ltechn:5.0.2/LRX22G/T355CZCU1AOE1:user /release-keys' pid: 6367, tid: 6405, name: Thread-1723 >>> com.nationsky.rc.samsung:
【Android JNI】Native层解析Java复杂数据类型HashMap
前提 Java HashMap 是基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用null值和null键。HashMap是存放引用类型数据的容器,只能存放引用数据类型,不能存放如int、long等基础类型的数据。 这里用实际的例子来演示如何解析HashMap,在这个Sample中,HashMap作为参数从Java传递到Native(C/C++)层,然后在C代码中解析H...
JNI/NDK开发指南(六)——C/C++访问Java实例方法和静态方法
<em>通过</em>前面5章的学习,我们知道了如何<em>通过</em>JNI函数来访问JVM中的基本数据类型、字符串和数组这些数据类型。下一步我们来学习本地代码如何与JVM中任意对象的属性和方法进行交互。比如本地代码<em>调用</em>Java层某个对象的方法或属性,也就是通常我们所说的来自C/C++层本地函数的callback(回调)。这个知识点分2篇文章分别介绍,本篇先介绍方法回调,在第七篇文章中介绍本地代码访问属性。
Qt安卓JNI交互之(1) C++注册函数给JAVA调用
网络上根本没人说这么个玩意,不需要对应安卓类名直接注册的机制。因为Qt中无法用JNI_OnLoad,因此我说的这个东西很重要。Qt中的新类:QtAndtoid提供了在JAVA UI线程环境中执行C++代码的功能:runOnAndroidThreadSync示例:JAVA中按返回键通知QT OnESCdown函数将由C++注册给<em>java</em><em>调用</em> public native void OnESCdown
Java中JNI的使用详解第二篇:JNIEnv类型和jobject类型的解释
上一篇说的是一个简单的应用,说明JNI是怎么工作的,这一篇主要来说一下,那个本地方法sayHello的参数的说明,以及其中方法的使用 首先来看一下C++中的sayHello方法的实现: JNIEXPORT void JNICALL Java_com_<em>jni</em>_demo_JNIDemo_sayHello (JNIEnv * env, jobject obj) { cout } 对于这个
JNI初步 -- 在CPP中创建并访问Java对象
说明:  本实例代码来自于《Android 框架揭秘》 程序运行环境 -- Ubuntu 12.04 64bit, JDK1.6, g++ 4.6.3 。 1  创建<em>java</em>文件 /** * 在C中创建<em>java</em>对象, 并<em>调用</em><em>java</em>对象的方法 */ public class JniFuncMain{ private static int staticIntFiel
Qt JNI调用Android系统功能
震动、让屏幕常亮、动态改变应用的显示方向(横屏、竖屏)、调节屏幕亮度、设置铃声模式……这些都可以<em>通过</em>Qt JNI来实现
[JNI]开发之旅(7)JNI函数中调用java对象的方法
在<em>jni</em>函数中我们不仅要对<em>java</em>对象的数据域进行访问,而且有时也需要<em>调用</em><em>java</em>中类对象已经实现的方法。接下来我们对对象的方法<em>调用</em>,<em>调用</em>步骤与访问数据域相似。1.获得实例对应的class类 2.根据class类获得方法的method id 3.根据method id和对象实例<em>获取</em>方法 4.操作方法实例1:JNI方法<em>java</em>对象public方法<em>java</em>代码 定义一个setSex方法,<em>通过</em>acces
jni获取Java类的方法的Signature
指向项目的bin目录下的classes目录 Javap -s -classpath . -p packagename.classname -s表示打印签名信息 -p表示打印所有函数和成员的签名信息,默认只打印public的签名信息。 其中Java程序中参数类型和其对应的值如下: Signature  Java中的类型 Z       boolean B       b
java自定义类加载器(findClass和loadClass这两个方法的差别)
package huang.de.wei; import <em>java</em>.io.File; import <em>java</em>.io.FileInputStream; import <em>java</em>.io.IOException; import <em>java</em>.lang.reflect.InvocationTargetException; import <em>java</em>.lang.reflect.Method; public cla
JNI开发-C/C++传递对象到Java
       JNI开发有时需要C/C++传递对象到Java,此篇主要讲解C/C++传递Student对象到Java; 1. 定义com.niubashaoye.simple.<em>jni</em>.StuInfo类 public class StuInfo { private int stuId; private String stuName; private int stuAge; privat...
c/c++ native 层 通过 JNI API 调用 java 层 的AudioTrack 来播放 音频文件
#include #include #include #include #define LOG_TAG "test" #define LOGI(f,v)  __android_log_print(ANDROID_LOG_INFO,LOG_TAG,f,v) #define LOGI2(a)  __android_log_print(ANDROID_LOG_INFO,LOG_T
基本JNI调用技术(c/c 与java互调)
注意我就是错在这个些包的名字上,导致<em>调用</em>失败 1,在项目根目录下建立文件夹libs/armeabi文件夹 2,将so库放入libs/armeabi文件夹注意事项: 1,如果采用静态注册的方式请注意C文件中严格按照命名规则Java_packageName_className_method()的方式命名 2,在Android项目中建立同上述命名规则中packageName中相同的包名,在此包名
Java 通过 JNI 调用 C/C++ 类库
说明由于一些涉及到设备或底层操作的类库,大多是C或C++语言编写的,对于Java Web开发者,在涉及到相应的项目中,不可能再去将相应的类库用Java重写。这时,就需要<em>通过</em>Java代码去<em>调用</em>C/C++的类库来完成工作。操作环境: - JDK 1.8.0_45 - Eclipse - Visual Studio 2013注意: demo中的文件路径需要加以注意!!!演示实现整体目标<em>通过</em>Java调
JNI 获取系统类加载器处理反制Xposed框架
 在网上找了很久没有找到 <em>jni</em> 相应的代码,基本都是<em>java</em>的 下面是全部代码: /** * 检测xposed * checkXposed */ bool checkXposed(JNIEnv *env) { //找到ClassLoader类 jclass classloaderClass = env-&amp;gt;FindClass(&quot;<em>java</em>/lang/ClassLoa...
利用JNI调用c++函数
在公司项目中遇到这么一个难题 客户有一个基板,这个基板<em>通过</em>数据线可以连接到电脑上,装上驱动就可以<em>调用</em>基板提供的函数. 但是程序是<em>java</em>开发的,所以就需要<em>通过</em><em>java</em><em>调用</em>基板函数,但是基板函数允许C++<em>调用</em>不支持<em>java</em>,所以就用到<em>java</em><em>调用</em>C++ 基板函数按照返回值大致分为两种 1.<em>调用</em>后直接返回数字,一般属于命令型函数,比如打开电源,返回0表示打开成功 2.<em>调用</em>后返回数组,比如需要...
JNI开发:JNI层新起的函数中(C回调函数中)调用JAVA层的接口
项目背景 在JNI层的实现中,需要将C回调函数的数据返回给Java层,为此尝试在C的回调函数中直接<em>调用</em>Java层接口,没有成功,似乎是线程问题;然后在C的回调函数中<em>通过</em>AttachCurrentThread开启线程<em>调用</em>,在完成<em>调用</em>以后再DetachCurrentThread释放运行环境;也没有成功,似乎是释放的问题; 解决方法 JNI在C的回调函数 中 <em>调用</em>Java的函数,总结一般过程如下...
linux下通过JNI用C/C++中调用JAVA类
决定使用JNI,实际是为了能够将通讯与<em>调用</em>后台的lucene索引,因此老大决定要采用这种方式来实现index的多机分布式的索引服务。接到任务,使用C++来<em>调用</em>Lucene的<em>java</em>查询的封装类。         用了<em>java</em>,c++各一段时间,却从未接触过JNI. 开始从网上收集该方面的资料,从头开始没有指导的时候特别郁闷,网上找到的大多数资料是讲述如何用<em>java</em>来<em>调用</em>C++的,而且多试wi
JNI进阶一 (C++调用java属性和方法,javap的使用)
一、C/C++函数分析://<em>获取</em>jclass对象,参数:this的意思,就是native方法所在的类1.GetObjectClass(jobject) //<em>获取</em>普通属性id,第一个参数:类对象, 第二个参数:属性名,第三个参数:属性签名(不知道的同学点击这里)2.GetFieldID(jclass clazz, const char* name, const char* sig)//设置int属性...
JNI学习---C调用Java方法
步骤 总体流程 根据jobject<em>获取</em>jclass(静态方法就不用这一步了)-&amp;amp;amp;amp;gt;<em>获取</em>jmethodid -&amp;amp;amp;amp;gt;<em>调用</em>方法 详细步骤 <em>获取</em>你需要访问的Java对象的类 如果被Native<em>调用</em>的Java类是静态类:FindClass<em>通过</em>传<em>java</em>中完整的类名来查找<em>java</em>的class 如果是非静态类:GetObjectClass<em>通过</em>传入<em>jni</em>中的一个<em>java</em>的引用来<em>获取</em>该引用的类...
利用JNI在vs2010上实现c++调用Java类方法
这几天由于项目需要,需要在使用到在c++中<em>调用</em>Java代码,也就是所谓的 JNI<em>技术</em>,网上看了一下教程,基本用的编译器是vc6.0, 个人一直不喜欢用6.0,所以就在vs2010上倒腾了一遍整个过程,折腾了好久,也遇到了很多问题,还好最后是成功了。  get 新技能!!!特写此博客作为记录。 环境:win7/win8.1 , vs2010, jdk_x86(64位的在使用中一直不能加载jv
FindClass 流程分析
前言 当我们<em>调用</em> FindClass 时,例如: JNIEnv* env env-&amp;amp;gt;FindClass(&amp;quot;<em>java</em>/lang/Class&amp;quot;) 实际上会经过如下<em>调用</em>栈: _JNIEnv::FindClass() |_ art::JNI::FindClass() 本篇文章就来探讨一下 FindClass() 中都干了什么,以及其执行流程。 ...
Jni编程(三)c/c++ 获取java字符串,以及java 获取c/c++创建的对象
 一、Java 层对象作为 opaque references(指针)传递到 JNI 层。 Opaque references 是一种 C/C++ 的指针类型,它指向 JavaVM 内部数据结构。使用这种指针的目的是:不希望 JNI 用户了解 JavaVM 内部数据结构。对 Opaque reference所指结构的操作,都要<em>通过</em> JNI 方法进行. 比如,&quot;<em>java</em>.lang.String&quot;对象...
Java -- 常用的JNI接口函数简介(一)
Java -- 常用的JNI接口函数简介 JNI是连接Java代码和C/C++代码的桥梁。Android framework中,大量对某些C/C++开源库函数的<em>调用</em>都是<em>通过</em>JNI实现的。Java层中定义native方法,<em>调用</em>native方法就相当于<em>调用</em>了一个JNI函数,而JNI函数中再间接<em>调用</em>例如某个开源库提供的一个C函数。由此可知,framework中的JNI函数也只是一个间接封装,它
JNI之 c/c++调用java构造函数
有时候c/c++是面向过程编码,很多有用工具类都没有,要编码人员自己实现,如果可以<em>调用</em><em>java</em>大量存在的类岂不是更省事更简洁。 下面是<em>通过</em><em>调用</em><em>java</em>的Date类产生是时间戳。public class JniConsTest { //c访问<em>java</em>构造函数,并返回对象 public native Date getCurrentTime(); public static voi
[JNI]开发之旅(6)JNI函数中访问java类中对象的属性
JNI函数的实现在c/c++中实现的,如果想访问<em>java</em>中定义的类对象的实例域需要三个步骤: 1.<em>通过</em>GetObjectClass()函数获得该对象的类class,返回值是一个jclass; 2.<em>调用</em>GetFieldID函数得到需要访问的实例域(变量)在该c类中id 3.<em>调用</em>Get【Type】Field()得到访问的变量值。其中【Type】对应变量的类型。 例如:<em>java</em>中有一个int a...
JNI进阶二(C++调用java数组 和 JNI引用)
一、C/C++函数分析//返回数组元素个数(数组长度)size GetArrayLength(JNIEnv *env, jarray array) //返回对象数组元素中的对象jobject GetObjectArrayElement(jobjectArray array, jsize index)  //将对象数组元素更改为新对象void SetObjectArrayElement( jobje...
JNI调用c++函数,该函数的参数是结构体(——对象的传递)
第三方C++函数接口为 int api_get_logfile(Struct fileinfo tfile),参数是个结构体,且套了另一个结构体: struct fileinfo{  char *fullpath;  int filesize;  int filemode;  struct disnode *tnode; }; struct disnode{  int nu
[笔记] 用C++通过JavaVM调用jar包
看了半天文档,Java的swing写个List要那么多代码...而后台基础都用Java写好了...想移植到C++上,咋办呢? #include "<em>jni</em>.h" #include "windows.h" #include "stdafx.h" typedef jint (WINAPI *_CreateJavaVM)(JavaVM **, void **, void *); int _tmain(int argc, _TCHAR* argv[]
Jni 多线程编程,子线程回调java方法
<em>jni</em> 回调c++中socket接收数据到<em>java</em>实例代码
jni 操作 java 类与对象
<em>jni</em> 操作 <em>java</em> 类 DefineClass jclass DefineClass(const char *name, jobject loader, const jbyte* buf,jsize bufLen) { return functions-&amp;gt;DefineClass(this, name, loader, buf, bufLen); } 从原始类数据的缓冲区加载类;其...
JAVA通过JNI调用C++函数详解
看到一篇讲述JNI<em>调用</em>C++代码的文章,写的非常详细,转载了。转载自:http://www.ibm.com/developerworks/cn/<em>java</em>/<em>jni</em>mthds/,感谢作者的辛勤付出。 简介 本文提供<em>调用</em>本地 C 代码的 Java 代码示例,包括传递和返回某些常用的数据类型。本地方法包含在特定于平台的可执行文件中。就本文中的示例而言,本地方法包含在 Windows 3
Android Jni GetMethodID中函数标识的简单解释
1 GetMethodID中函数标识的简单解释: Android 中Jni可以<em>通过</em>FindClass,GetMethodID, CallObjectMethod等可以实现对<em>java</em>中方法的<em>调用</em>。 GetMethodID中最后一个参数的写法很特殊, Jni中GetMethodID的定义: jmethodID GetMethodID(jclass clazz, const char* nam...
JNI(java 调用 本地接口)Tomcat的JNI库加载问题解决办法
Tomcat的Release Notes 里有这么一段话: ======================= JNI Based Applications: ======================= Applications that require native libraries must ensure that the libraries have been loaded pr...
JNI开发-C/C++调用Java函数传参和返回值均为String类型
        C/C++<em>调用</em>Java函数参数和返回值均为String类型; Java的CCallJavaTools类: package com.niubashaoye.ndk.<em>jni</em>; public class CCallJavaTools { /** * C/C++<em>调用</em>Java函数传递String参数并返回String类型值 * * @param str * @r...
java/lang/String"类型">【Android开发之坑爹问题】关于"java/lang/String"类型
在so文件里进行jstring和char类型的数据转换,引用了网上的一段程序 如下: jstring stoJstring(JNIEnv* env, const char* pat)   {         jclass strClass = env->FindClass("L<em>java</em>/lang/String;");         jmethodID ctorID
Java通过JNI调用C的一个小DEMO
最近看<em>java</em>源代码,发现很多方法用native修饰,那么什么事native方法呢?     简单地讲,一个Native Method就是一个<em>java</em><em>调用</em>非<em>java</em>代码的接口。一个Native Method是这样一个<em>java</em>的方法:该方法的实现由非<em>java</em>语言实现,比如C。这个特征并非<em>java</em>所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调
JNI基础(六)C调java代码
<em>java</em>如何<em>调用</em>C代码,大概已经了解了,<em>通过</em>是先本地方法来<em>调用</em>。那么C代码如何代用<em>java</em>代码 套路与思路:<em>通过</em>反射 <em>java</em>代码: public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) {
android关于jni反射的一些操作
android关于<em>jni</em>反射的一些操作 本文说明一下当用到<em>jni</em>的时候需要的反射功能及一些操作,应用场景在于c++反射<em>调用</em><em>java</em>的一些变量及类的操作,下面截取项目中的代码片段。具体的可以看注释 android studio 怎样进行<em>jni</em>开发可以参考这个: 方法如下: 1.添加如下代码在MainActivity类内 static { System.load
JNI开发-C/C++调用Java函数传递多个参数
       C/C++<em>调用</em>Java函数传递多个参数并返回String类型; Java的CCallJavaTools类: package com.niubashaoye.ndk.<em>jni</em>; public class CCallJavaTools { /** * C/C++<em>调用</em>Java函数传递多个参数 * @param num1 * @param str * @param ...
JNI 调用java里的基本类型和对象
主要是介绍<em>jni</em><em>调用</em>基本类型和对象,包含实例对象和静态对象 先上mylog.h文件 #include&amp;lt;android/log.h&amp;gt; #ifndef TEST_JNI_LOG_H #define TEST_JNI_LOG_H #define TAG &quot;my<em>jni</em>-TAG&quot; // 这个是自定义的LOG的标识 #define LOGD(...) __android_log_prin...
Android NDK 开发(三)JNI 调用Java属性和方法
前言 native方法虽然是native的,但毕竟是方法,那么就应该同其他方法一样,能够访问类的属性和方法。实际上,JNI的确可以做到这一点,我们<em>通过</em>几个例子来说明~ 原文链接请标明: http://blog.csdn.net/u011974987/article/details/52709642 本文出自:【stromxu的博客】 正文 继 Android NDK 开发(二)J
JNI开发:Java调用C/C++函数传递Array参数并返回Array值
             此篇Java<em>调用</em>C/C++函数来实现给int数组[12,45,67]的每个元素加17; <em>java</em><em>调用</em>: int array[] = { 12, 45, 67 }; array = <em>jni</em>Tools.intArray(array); String resultStr = Arrays.toString(arra...
类加载器中findClass与loadClass的区别?
findClass()用于写类加载逻辑、loadClass()方法的逻辑里如果父类加载器加载失败则会<em>调用</em>自己的findClass()方法完成加载,保证了双亲委派规则。 1、如果不想打破双亲委派模型,那么只需要重写findClass方法即可 2、如果想打破双亲委派模型,那么就重写整个loadClass方法 ...
用JNI从C传递结构体到JAVA
直接上C的实现 typedef struct Foo {     int len;     char name[100]; } Foo_t; JNIEXPORT jint JNICALL Java_TestJNI_foo(JNIEnv *env, jobject obj, jobject fooObj) {     Foo_t * bar = malloc(sizeof(
JNI中的C回调java中的方法
C反射<em>调用</em><em>java</em>方法,反射机制和<em>java</em>中的反射机制差不多。 以下是<em>调用</em>一个返回值为空,参数为空的实例 #include #include #include #include //#define LOG_TAG "System.out" #define LOG_TAG "lalalal" #define LOGD(...) __android_log_print(ANDROID_LOG
android jni中的java调c的两种方法
终于有个时间来整理以前的一些笔记,android最大的特点就是native/art虚拟机,因此就有了NDK编程和SDK编程的区别 NDK是使用了本地接口(c /c++)<em>jni</em>,sdk则是<em>java</em>层的接口;因此读懂和了解<em>jni</em>是关键
java JNI本地方法调用的使用
<em>java</em> 可以<em>通过</em>JNI<em>调用</em>native本地方法,实现对其它非<em>java</em>语言编写的接口(C,C++)的<em>调用</em>。在类当中只需要定义好<em>调用</em>的方法,加载具体实现的动态库。 package studyJNIMain; public class Main { static { System.out.println(System.getProperty("<em>java</em>.library.path"));
使用jni实现在C语言中调用Java的方法
在前面的博客中介绍了<em>jni</em>的使用以及使用<em>jni</em>实现在<em>java</em>中<em>调用</em>c语言的方法,这篇博客将介绍在c语言中<em>调用</em><em>java</em>方法 在写代码前,先看一下实现的效果 实现方式(部分步骤有所省略,详细的步骤可以参考我前面的博客) 第一步:使用eclipse创建一个Android工程,并且修改activity_main.xml文件中的代码 <LinearLayout xmlns:andro
c调用java方法
背景需求   我们需要在JNI的C代码<em>调用</em>Java代码。实现原理:使用JNI提供的反射借口来反射得到Java方法,进行<em>调用</em>。 JNI关键方法讲解。 1. 在同一个类中,<em>调用</em>其他方法 JNIEXPORT void JNICALL Java_cn_itcast_ndkcallback_DataProvider_callmethod1 (JNIEnv * env, job
Android:JNI调用C++自定义类的详细方法
一般情况下,我们都是用 JNI <em>调用</em> C++ 的某个方法的代码,包括直接使用 android studio 生成的代码也是如此。但有时我们需要新建、或者得到的是 C++ 的一个自定义类,在<em>调用</em>时就不能像<em>调用</em> C++ 方法那样了,查阅了一部分其他人的博客,写的都比较笼统、模糊,对没接触过这块知识的人来说很不友好,故参考了几篇较好的博客,以下介绍具体使用方法。 1.创建JNI工程  为了方便,可以...
JNI开发基础篇:C语言调用Java中的方法
JNI中C语言<em>调用</em>Java方法
JNI开发-Java从C/C++获取List集合对象
       JNI开发有时需要Java从C/C++<em>获取</em>List对象,此篇主要讲解Java从C/C++<em>获取</em>List&amp;lt;Student&amp;gt;返回值; 1. 定义com.niubashaoye.simple.<em>jni</em>.StuInfo类 public class StuInfo { private int stuId; private String stuName; private in...
C++通过jni调用java静态方法和非静态方法
http://blog.csdn.net/dj0379/article/details/18217323 <em>调用</em>非静态方法首先就是<em>调用</em>的静态方法得到要<em>调用</em>的<em>java</em>的类对象然后<em>通过</em><em>调用</em> minfo.env->CallVoidMethod(activityObj, minfo.methodID);方法把对象和要<em>调用</em>的方法以及参数(如果有 )传递个<em>java</em>类对象中的非静态方法;
JNI与多个线程导致JNIEnv*发生异常
概述: JNIEnv 是一个与线程相关的变量,即线程A有一个 JNIEnv变量, 线程B也有一个JNIEnv变量,由于线程相关,所以A线程不能使用B线程的 JNIEnv 结构体变量。 问题描述: 一个<em>java</em>对象<em>通过</em>JNI<em>调用</em>DLL中一个send()函数向服务器发送消息,不等服务器消息到来就立即返回,同时把JNI接口的指针JNIEnv *env(虚拟机环境指针),和jobject
JNI:在c代码中获得和直接修改java的string成员变量的值
<em>jni</em> c和<em>java</em>交互中,大部分数据类型都有对应,<em>java</em>中的string类型比较特殊,所以要用object。 <em>java</em>代码 StringTest1.<em>java</em> public class StringTest1 { public String s = new String("<em>java</em> string"); //声明c方法 public native void displ
C语言调用jni中JNIEnv指针使用和理解
使用C语言<em>调用</em><em>jni</em>的时候,需要和<em>java</em>的环境对象和虚拟机对象交互。它们的C语言定义如下。 typedef const struct JNINativeInterface* JNIEnv; typedef const struct JNIInvokeInterface* JavaVM; 可以看到,JNIEnv和JavaVM是一个指针内心。其结构体包含了很多我们需要用的函数指针: j
Android JNI中C和JAVA代码之间的互相调用
一、C语言代码回调Java方法 1. C代码回调Java方法的流程 (1) 找到<em>java</em>对应的Class 创建一个char*数组, 然后使用<em>jni</em>.h中提供的FindClass方法<em>获取</em>jclass返回值; char* classname = "wjy/geridge/com/testndk/<em>jni</em>/JniUtils"; jclass dpclazz = (*env)->Fi
JNI与C++数据类型传递示例(包括ArrayList对象、ArrayList嵌套返回)
一个C++(Ubuntu16.04+QT5.9.1)<em>通过</em>JNI,<em>调用</em>JAVA类及方法的示例。<em>通过</em>JNI传递和返回多种类型的参数,boolean ,int,String,ArrayList,ArrayList嵌套ArrayList>等。
AS JNI中C语言调Java方法签名
在用到JNI,C回调Java时,会使用到方法签名,一般情况下我们会选择去命令行中去查看方法签名,有时或许会有些不是很方便,其实在as中就为我们提供了控制台(terminal)供我们使用。            首先,我们找到要查看方法签名得项目(或Demo)的debug 文件夹,注意这个文件的一般路径为:X:\XX\XXXX\XXXX\build\intermediates\classes\
JNI/NDK开发指南(七)——C/C++访问Java实例变量和静态变量
在上一章中我们学习到了如何在本地代码中访问任意Java类中的静态方法和实例方法,本章我们也<em>通过</em>一个示例来学习Java中的实例变量和静态变量,在本地代码中如何来访问。静态变量也称为类变量(属性),在所有实例对象中共享同一份数据,可以直接<em>通过</em>【类名.变量名】来访问。实例变量也称为成员变量(属性),每个实例都拥有一份实例变量数据的拷贝,它们之间修改后的数据互不影响。
Java与c++通过JNI的完美结合
参看:高煥堂的课程《JNI:Java与C++的美好结合》http://edu.csdn.net/course/detail/1469 一、基本介绍 1、JNI是什么?       Java本机接口(Java Native Interface (JNI))是本机编程接口,它是JDK的一部分,JNI它提供了若干的API,实现了和Java和其他通信(主要是C&C++)。 2、JNI有什么用?
NDK开发 从入门到放弃(五:JNI抛异常)
在C++的代码运行过程中,若是发生异常错误,需要抛出异常在Java代码中来处理。JNI函数中有`Throw`、`ThrowNew`两个方式来抛出异常。
Android studio中NDK开发(五)——C嵌套结构体与Java类在JNI层的传输
一、前言 最近在Android上的NDK开发时遇到一个问题,在Java层需要<em>获取</em>到设备的注册信息,然后在JNI层将这些信息封装为结构体参数的形式传递到C++中的方法中进行处理。也就是说,在Java层<em>获取</em>到的信息需要先转换成结构体,再传进去,在C++和Java的JNI层转换的这个过程中整整卡了两三天,一直找<em>不到</em>解决问题的思路。 二、分析 从结构体的特性来看,其实结构体就是不同属性的合集,只不过嵌套...
jni系列 C层访问Java层的方法(四)
C层访问Java层的方法 // <em>java</em>代码 /* * 在C中<em>调用</em>次方法,<em>获取</em>登入的用户id */ private String getLoginUserId(){ return &quot;100010&quot;; } 复制代码 // c代码 // 3. 访问<em>java</em>方法 JNIEXPORT void JNICALL Java_com_jerry_<em>jni</em>test_JniTest_accessMeth...
JNI中通过参数来传递数组返回值(C和java间)
     在<em>jni</em>中返回数组,一般是在<em>jni</em>中直接new一个byte数组,然后<em>调用</em>函数(*env)-&amp;gt;SetByteArrayRegion(env, bytearray, 0, len, buffer);将buffer的值copy到bytearray中,函数直接return bytearray就可以了。      另外一种是返回错误号,数据<em>通过</em>参数传出,但是<em>java</em>的基本数据类型是传值,对象...
如何在NDK中呼叫Java的class
废话不多说,直接上码....... package com.clouddevelop.cloudbox; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.
在eclipse下,JAVA通过JNI调用C++方法的简单例子(非android)
eclipse Java JNI VS2015 开发
Android JNI反射调用Java构造方法、成员方法和静态方法
Android开发中一般讲Java接口<em>调用</em>放在APP层,但是如果想对外隐藏Java接口<em>调用</em>,应该怎么办呢?我们可以将接口<em>调用</em>放在JNI层,<em>通过</em>反射<em>调用</em>所需接口,之后打包成.so库,这样既可对外隐藏所有<em>调用</em>细节。
Android开发 通过JNI实现JAVA与C/C++程序间的调用和回调
在一些Android应用的开发中,需要<em>通过</em>JNI和 Android NDK工具实现JAVA和C/C++之间的相互<em>调用</em>。        Java Native Interface (JNI)标准是<em>java</em>平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI是本地编程接口,它使得在 Java 虚拟机 (VM)内部运行的 Java代码能够与用其它编程语言(如 C、C++和汇编语言)编
JNI/NDK开发指南(八)——调用构造方法和父类实例方法
转载请注明出处:http://blog.csdn.net/xyang81/article/details/44002089在第6章我们学习到了在Native层如何<em>调用</em>Java静态方法和实例方法,其中<em>调用</em>实例方法的示例代码中也提到了<em>调用</em>构造函数来实始化一个对象,但没有详细介绍,一带而过了。还没有阅读过的同学请移步《JNI/NDK开发指南(六)——C/C++访问Java实例方法和静态方法》阅读。这章详细
Java中JNI的使用详解第三篇:JNIEnv类型中方法的使用
上一篇说道JNIEnv中的方法的用法,这一篇我们就来<em>通过</em>例子来看一下这些方法的使用: 首先是第一个例子:在Java代码中定义一个属性,然后再C++代码中将其设置成另外的值,并且输出来 先来看一下Java代码: package com.<em>jni</em>.demo; public class JNIDemo { public int number = 0;//定义一个属性 //定义一个本地方
JNI(C/C++调用Java父类/子类方法)
back&amp;gt;&amp;gt; 1. C/C++<em>调用</em>Java函数的形式     - <em>调用</em>实例方法的三种形式     Call&amp;lt;TYPE&amp;gt;Method(jobject obj,jmethodID id,....);     Call&amp;lt;TYPE&amp;gt;Method(jobject obj,jmethodID id,va_list lst);     Call&amp;lt...
JAVA通过JNI调用C语言库
重点内容##1.前言 - JDK版本1.8.0 - 操作系统 ubuntu 16.04.2 - 目标实现JAVA<em>调用</em>C语言库 root@msos:/root# <em>java</em> -version openjdk version &amp;amp;amp;amp;quot;1.8.0_151&amp;amp;amp;amp;quot; OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-0ubuntu0.16.04.2-...
JNI/NDK开发指南(五)——访问数组(基本类型数组与对象数组)
JNI中的数组分为基本类型数组和对象数组,它们的处理方式是不一样的,基本类型数组中的所有元素都是JNI的基本数据类型,可以直接访问。而对象数组中的所有元素是一个类的实例或其它数组的引用,和字符串操作一样,不能直接访问Java传递给JNI层的数组,必须选择合适的JNI函数来访问和设置Java层的数组对象。阅读此文假设已经了解JNI与Java数据类型的映射关系,如果还不了解的童鞋,请移步《JNI/NDK开发指南(三)——JNI数据类型及与Java数据类型的映射关系》阅读。
JNI开发-Java传递对象到C/C+
       JNI开发有时需要Java把对象作为参数传递到C/C++,此篇主要讲解Java传递Student对象到C/C++; 1. 定义com.niubashaoye.simple.<em>jni</em>.StuInfo类 public class StuInfo { private int stuId; private String stuName; private int stuAge; p...
IntelliJ IDEA平台下JNI编程(五)—本地C代码创建Java对象及引用
本文学习如何在C代码中创建Java对象和对象数组,前面我们学习了C代码中访问Java对象的属性和方法,其实在创建对象时本质上也就是<em>调用</em>构造函数,因此本文知识学习起来也很轻松。有了前面学习数组创建的方法后,C代码创建对象数组同样很容易,下面开始学习吧~
JAVA通过JNI调用C++程序实践
整体思路:将需要<em>调用</em>的C++函数在<em>java</em>中声明一个对应的native函数,利用<em>java</em>h生成对应的h头文件,用C++封装成动态链接库,提供给<em>java</em><em>调用</em> 实践步骤:1.声明需要<em>调用</em>的C++函数在<em>java</em>中对应的native函数,这里只有两个是native函数,只要这2个函数在动态库中能找到就可以了:package com.ylzhang.service.config;/** * Ylzhang
JNI开发-C/C++获取Java的静态全局变量
       在JNI开发时,C/C++函数有时需要<em>获取</em>Java的静态全局变量,此篇主要是<em>获取</em>CCallJavaTools静态全局变量strContent2;   1. Java的com.niubashaoye.ndk.<em>jni</em>.CCallJavaTools类: public class CCallJavaTools { public int num = 2017; public Str...
java和c之间进行数据传递 之 JNI
在<em>java</em>和c之间进行数据传递 之 JNI
Java与C通过JNI指针相互传递
注意 1、c中指针可以直接转为<em>java</em>里的int值,都是32位无损失(32位操作系统或者gcc 32编译器)。 2、循环里要注意释放本地引用,因为循环太多或不可预知,容易溢出,你没有做着咯额异常处理,jvm会直接退出,看<em>不到</em>打印堆栈信息的,所以使用<em>jni</em>时如果程序没有打印就无故退出,就检查下本地方法。 3、long 对应J不是L,会给出打印信息提示的(64位操作系统或gcc 64位)。
JNI c调用Java 返回值为String
Java定义: public String getSignatureInfo() { try { PackageInfo packageInfo = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), PackageManager.GET_SIGNATUR
使用JNI将C结构体转为JAVA实体类
最近项目中有关于这部分的功能需求,所以在空闲时参考网上的资料,并对其部分功能做了简单封装,整理了一份demo。可实现将C语言中的结构体转换为JAVA类型的实体类。 目前支持基础数据类型int、long、foloat、double、const char *、bool的转换,也支持将数组装换为JAVA中的ArrayList。目前有个难点是将枚举类型直接转换为JAVA中的枚举,这个目前还搞不定,如果有
JNI中C代码调用使用java属性和方法
从事NDK必经之路,根据文档快速入手,体验c代码如何<em>调用</em><em>java</em>方法,和修改<em>java</em>类属性值;
JNI java调用动态链接库dll
#include #include JNIEXPORT void JNICALL JAVA_ConDll_open(JNIEnv *env,jobject obj);          生成的头文件中方法命名为<em>java</em>类的完整路径和方法,中间用下划线隔开。          注意:如果项目中<em>调用</em>现成的dll文件,我们必须知道C中方法的声明,并在<em>java</em>程序中创建对应的包结构,如果路径不对应
用java编写的注册机,只要运行就会随机的产生注册码下载
用java编写的注册机,只要运行就会随机的产生注册码,可以解决当您需要注册码而又上不了网使得大麻烦,屡试不爽!!! 相关下载链接:[url=//download.csdn.net/download/zdy32032319861105/2157831?utm_source=bbsseo]//download.csdn.net/download/zdy32032319861105/2157831?utm_source=bbsseo[/url]
C++课程设计大作业下载
C++课程设计,可以作为大作业提交,变异运行没有任何错误。 相关下载链接:[url=//download.csdn.net/download/xiyangxiaodong/2337082?utm_source=bbsseo]//download.csdn.net/download/xiyangxiaodong/2337082?utm_source=bbsseo[/url]
数据结构中的排序方法源代码下载
包含各种可以正确运行的排序源代码,如希尔排序、快速排序、堆排序、起泡排序等 相关下载链接:[url=//download.csdn.net/download/qiluruanjiansheji/2543136?utm_source=bbsseo]//download.csdn.net/download/qiluruanjiansheji/2543136?utm_source=bbsseo[/url]
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 通过实例学习java java 机器学习技术
我们是很有底线的