查看: 1818|回复: 0
打印 上一主题 下一主题

[提问] 关于Unity中c#调用so,so调用java

[复制链接]

3

主题

1

听众

41

积分

设计初学者

Rank: 1

纳金币
12
精华
0
跳转到指定楼层
楼主
发表于 2016-7-10 21:31:36 |只看该作者 |倒序浏览
如题 我想要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很正常啊在这里就不行了!
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-5-4 12:10 , Processed in 0.083796 second(s), 31 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部