gpt4 book ai didi

android - Kotlin和Unity开发错误

转载 作者:行者123 更新时间:2023-11-29 14:59:54 25 4
gpt4 key购买 nike

本人使用Android Studio和Unity开发,将Library打包成aar文件,然后将aar文件作为Unity插件。我用Java的时候没问题,但是用Kotlin的时候就会抛出异常。谢谢!

异常(exception):

 AndroidJavaException: java.lang.NoClassDefFoundError: Failed resolution of: Lkotlin/jvm/internal/Intrinsics;
java.lang.NoClassDefFoundError: Failed resolution of: Lkotlin/jvm/internal/Intrinsics;
at com.lsl.plugin.PluginActivity.showToast(PluginActivity.kt)
at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
at com.unity3d.player.UnityPlayer.c(Unknown Source)
at com.unity3d.player.UnityPlayer$c$1.handleMessage(Unknown Source)
at android.os.Handler.dispatchMessage(Handler.java)
at android.os.Looper.loop(Looper.java)
at com.unity3d.player.UnityPlayer$c.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: Didn't find class "kotlin.jvm.internal.Intrinsics" on path: DexPathList[[zip file "/data/app/com.lsl.aardemo-1/base.apk"],nativeLibraryDirectories=[/data/app/com.lsl.aardemo-1/lib/arm, /data/app/com.lsl.aardemo-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassL

Activity

class PluginActivity : UnityPlayerActivity() {
fun showToast(msg: String) {
runOnUiThread {
Toast.makeText(this@PluginActivity.applicationContext, msg, Toast.LENGTH_SHORT).show()
}
}

.cs脚本

    public static AndroidTools GetInstance(){
if (instance == null) {
lock (syncRoot) {
if (instance == null) {
jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");
instance = new AndroidTools ();
}
}
}
return instance;
}

public void ShowToast(string message){
jo.Call ("showToast",message);
}

aar文件:

enter image description here

最佳答案

这与JetBrain 支持.NET 无关。我实际上遇到了这个问题并通过使用 GoogleJarResolver 解决了它.

问题

当您将插件打包到 AAR 文件中时,假设消费者(通常是另一个 Android Studio 项目而不是 Unity)将解析这些依赖项,则依赖项不会与它一起打包。但是,正如您所猜测的那样,Unity 不会做任何关于解决 AAR 文件依赖性的事情,所以您必须自己做。

解决方案

Google 有一个 Unity 插件可以实际执行此操作,它会下载所需的文件以满足依赖项并将它们添加到您的项目中。由于 Google Jar Resolver 主页上的描述和说明超出了您的确切需要,因此我只是在此处针对该特定问题向您提供说明:

  1. 添加GoogleJarResolver到您的 Unity 项目。
  2. 创建并添加一个名为 $XDependencies.xml 的文件(其中 $X 是您的插件的名称)到您的项目。该文件应包含您的 Gradle 文件依赖项。假设您只使用 Kotlin stdlib,该文件将如下所示:(请记住使用正确的 kotlin 版本)

    <dependencies>
    <androidPackages>
    <androidPackage spec="org.jetbrains.kotlin:kotlin-stdlibjdk7:1.2.61" />
    </androidPackages>
    </dependencies>

  3. 通过在 Unity 中选择菜单项 Assets -> Play Services Resolver -> Android Resolver -> Resolve,使用 GoogleJarResolver 解决依赖关系.这将下载所需的依赖项并将其添加到您的项目中。这些将位于 Assets/Plugins/Android 下.

  4. 构建并运行您的应用程序,看看它现在是否可以正常工作。

我希望它能像解决我的问题一样解决您遇到的问题!

关于android - Kotlin和Unity开发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49164218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com