- 最后登录
- 2016-7-11
- 注册时间
- 2016-7-9
- 阅读权限
- 10
- 积分
- 41
- 纳金币
- 12
- 精华
- 0
|
如题 我想要c#调用c++然后c++通过jni调用java(必须这样干 不能通过c#调用java,之所以要通过c++这一层是因为有Unity工程中有多个jar包并且多于一个jar包继承了UnityPlayActivity)代码如下:
c#中的代码
[DllImport ("NetUtils")]
private static extern bool SetObjectName(string name);
void Start () {
SetObjectName(“name”);
}
c++中的代码:
bool SetObjectName(char* name){
jstring strname = NULL;
JNIEnv* env = NULL;
gVm->GetEnv((void**)&env, JNI_VERSION_1_4);
LOGI("SetObjectName start");
if(env != NULL){
strname = str2jstring(env, name);
LOGI("SetObjectName start FindClass");
jclass Setname = env->FindClass("com/youdou/tv/sdk/interaction/UnityAdapter");
LOGI("SetObjectName after FindClass");
if(Setname != 0){
LOGI("SetObjectName start getmethod");
jmethodID SetObjectNamemethod = env->GetStaticMethodID(Setname, "SetObjectName", "(Ljava/lang/String;)Z");
LOGI("SetObjectName after getmethod");
if(SetObjectNamemethod != 0){
LOGI("SetObjectName start callmethod");
bool flag = env->CallStaticBooleanMethod(Setname,SetObjectNamemethod,strname);
LOGI("SetObjectName after callmethod");
return flag;
}else{
LOGI("method is 0");
return false;
}
}else{
LOGI("class is 0");
return false;
}
}else{
LOGI("env is null");
return false;
}
}
java中的代码:
package com.youdou.tv.sdk.interaction;
public class UnityAdapter extends UnityPlayerActivity{
public static boolean SetObjectName(String name) {
Object = name;
System.out.println("objectname:"+Object);
return true;
}
}
然后就在C++那一块GetStaticMethodID的时候一直返回0,这是什么情况啊?Manifest中的配置如下
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name="com.example.testunity.MainActivity"
android:label="@string/app_name"
android:screenOrientation="landscape"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
有没有大神知道通过 这是怎么回事啊 !我在其它地方通过JNI来调用java很正常啊在这里就不行了! |
|