managed unity plugin with native ios (framework) and android (aar) files

I have iOS framework and Android aar files and they work well with Unity as unmanaged plugins. To simplify the usage of my libraries, I want to create a wrapper unity plugin for the unmanaged iOS and Android plugins.

So unity apps will call this one method in this wrapper plugin which will then call the corresponding methods in the native libraries.

Is this possible?

Yes, this is possible. Since you’re already using the native libraries, it sounds like you already know how to call the native functions from Unity. So, what you want to do is create an interface for you plugin that will be the same across both platforms:

interface IWidget {
  void DoSomething();
}

The next step is to create Android and iOS specific implementations of that interface:

class iOSWidget : IWidget {
  public void DoSomething() {
  // Call into your native iOS code
  }
}

class AndroidWidget : IWidget {
  public void DoSomething() {
  // Call into your native Android code
  }
}

Next, create a factory class that provides the right implementation based on the platform:

class WidgetFactory {
  public IWidget GetInstance() {
    #if UNITY_IOS
      return new iOSWidget();
    #elif UNITY_ANDROID
      return new AndroidWidget();
    #else
       throw new System.Exception("Unsupported platform");
    #endif
}

Finally, in your application, you can use the factory to get an instance of your plugin interface and use it in a platform-agnostic way:

var widget = WidgetFactory.GetInstance();
widget.DoSomething();

If you don’t want to deal with using the factory in your application code, you could create another implementation of the interface that does that for you, like this:

class MultiPlatformWidget : IWidget {

  public void DoSomething() {
    WidgetFactory.GetInstance().DoSomething();
  }
}