用C++调用android里边的方法也就是Java里的方法的话必须借助于JNI的力量才能完成,调用可以分为两大类方法,分别为静态方法调用和非静态方法调用,非静态方法不同于静态方法的地方是调用非静态方法则必须先得到这个方法所在类的实例然后对这个方法再发起调用简单举个例子
Java代码如下:(注这些方法都是凭空写出来的,不能拿来直接用看明白意思自己去试验这样自己吸收的更快
//把包名定为com.test接下来你会看到包名的用法
“`c++
class A{
public static void methodA(){
//do something here
}
<pre class="prism-highlight line-numbers" data-start="1"><code class="language-null"> public void methodB(){
//do something here
}
public static void methodA_Param(int a){
//this is a static method with a parameter
}
public void methodB_Param(int b){
//this is a non-static method with none parameter
}
</code></pre>
}
<pre class="line-numbers prism-highlight" data-start="1"><code class="language-null">C++代码如下:
“`c++
JniMethodInfo mMethodInfo;//定义Jni函数信息结构体 //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数 bool isFindMethodInfo= JniHelper::getStaticMethodInfo(mMethodInfo,”com/test/A”,”methodA”, “()V”);
if (isFindMethodInfo) {
mMethodInfo.env->CallStaticVoidMethod(mMethodInfo.classID, mMethodInfo.methodID);
}
以上部分是使用c++调用java中的静态方法
//如果需要有返回值那必须修改获取方法的部分
如下:(标红的部分则是不同的地方了)
JniMethodInfo mMethodInfo;//定义Jni函数信息结构体
//getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数 bool isFindMethodInfo= JniHelper::getStaticMethodInfo(mMethodInfo,”com/test/A”,”methodA”,
“()Ljava/lang/Object;”);
jobject jobj;
if (isFindMethodInfo) {
jobj = mMethodInfo.env->CallStaticObjectMethod(mMethodInfo.classID, mMethodInfo.methodID);
}
调用非静态方法的实例我这里就不列出了,还有java调用C++得部分也不列出了,demo里都有,注释都会很详尽的,之后我会给出一个详尽的demo给大家,需要注意的地方我上边已经写明白了,如果还有其他不太明白的可以直接发邮件或qq联系