iOS和Android的Unity插件由于AndroidJavaObject而导致iOS失败AOT

时间:2015-03-15 08:17:48

标签: android ios unity3d

我正在尝试编写一个可在iOS和Android上运行的Unity插件。 我的插件有两个入口点,一个用于iOS,另一个用于Android。

问题是,当我只使用iOS类并尝试从Unity构建XCode项目时,我收到此错误:

无法加载类UnityEngine.AndroidJavaObject,在UnityEngine中使用

AndroidJavaObject类仅用于从未由统一脚本引用的Android类。

问题是我想提供一个“只适用于iOS和Android”的插件。该插件已编译,因此我无法使用任何统一的预处理器标志。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果您需要访问本机API,我认为除了条件编译之外别无选择。我建议通过使用接口来使用封装插件访问,例如:

public interface IMyPlugin
{
    void Do ();
}

public class MyIOSConnector : IMyPlugin
{
    public void Do () {
#if UNITY_IOS
        // iOS implementation
#endif
    }
}
public class MyAndroidConnector : IMyPlugin
{
    public void Do () {
#if UNITY_ANDROID
        // Android implementation
#endif
    }
}
public static class MyPlugin
{
    static IMyPlugin _myPlugin = null;

    public static IMyPlugin Access {
        get { 
            if (_myPlugin == null) {
#if UNITY_EDITOR
                // maybe this needs special handling e.g. a dummy implementation
#endif
                switch (Application.platform) {
                case RuntimePlatform.IPhonePlayer:
                    _myPlugin = new MyIOSConnector ();
                    break;
                case RuntimePlatform.Android:
                    _myPlugin = new MyAndroidConnector ();
                    break;
                default:
                    break;
                }
            }
            return _myPlugin;
        }
    }
}

您可以从其他课程中致电:

MyPlugin.Access.Do ();