将 Fabric with Multidex 与导出的 Unity 项目一起使用

Using Fabric with Multidex with an exported Unity project

我已经导出我的 Unity 项目以便能够使用 multidex。问题是我必须将项目的 androidmanifest 中的 android:name 设置为 "android.support.multidex.MultiDexApplication",而我已经为 fabric 设置了 "io.fabric.unity.android.FabricApplication"。

我曾尝试手动初始化 Fabric,但随后出现此错误: AndroidJavaException:io.fabric.unity.android.FabricInitializationException:Fabric 未找到有效的应用程序上下文。

我发现有人遇到了类似的问题,但没有得到解决: https://twittercommunity.com/t/unity-android-plugin-conflicts/79947?source_topic_id=83751

在此先感谢您的帮助!

遇到了同样的问题。

最终创建了一个新的 android 工作室项目。 导入的 Fabric-(some version).jar 和 Fabric-init.jar,我从 Unity 项目中的 android plugins 文件夹中获得。

反编译了 Fabric-init.jar 并修改了 FabricApplication.java class 以便从 MultiDexApplication 而不是 Application 进行扩展。

构建项目并从 Android Studio project/app 的构建文件夹中提取新的 FabricApplication.class。

将Unity项目的Fabric-init.jar里面的FabricApplication.class换成了新的

保留 "io.fabric.unity.android.FabricApplication" 作为清单中的应用程序名称。

在 android 4.4 中测试并且有效。 虽然不理想,因为我必须在每次插件更新时都这样做,但考虑到我对这个 gradle 东西(以及一般的 Android 项目)是个菜鸟,我非常高兴至少它起作用了。

如果有人想出更好的方法,请告诉我们!

将下一行添加到您的 Application 方法中:

protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    // this one is needed to enable multidex in your application
    MultiDex.install(this);
}

public void onCreate() {
    super.onCreate();
    // this one is needed to init the Fabric SDK
    FabricInitializer.initializeFabric(this, FabricInitializer.Caller.Unity);
}

此外,您可以在此处查看另一种解决方案,我创建了一个小 GitHub repo,其中描述了如何通过几次点击实现它。