Liu*_*ong 1 android unity-game-engine kotlin
我使用Android Studio和Unity开发,将Library打包成aar文件,然后将aar文件作为Unity插件.当我使用Java时没问题,但是当使用Kotlin时,它会引发异常.谢谢!
例外:
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
Run Code Online (Sandbox Code Playgroud)
活动
class PluginActivity : UnityPlayerActivity() {
fun showToast(msg: String) {
runOnUiThread {
Toast.makeText(this@PluginActivity.applicationContext, msg, Toast.LENGTH_SHORT).show()
}
}
Run Code Online (Sandbox Code Playgroud)
}
.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);
}
Run Code Online (Sandbox Code Playgroud)
aar文件:
小智 6
它与支持.NET的JetBrain无关.我实际上遇到了这个问题并使用GoogleJarResolver解决了这个问题.
当您将插件打包到AAR文件中时,假设消费者(通常是另一个Android Studio项目而不是Unity)将解析这些依赖关系,则不会使用它打包依赖项.但是,正如您所猜测的那样,Unity在解决对AAR文件的依赖性方面没有做任何事情,因此您必须自己完成.
Google有一个Unity插件实际上就是这样,它下载所需的文件以满足依赖关系并将它们添加到您的项目中.由于Google Jar Resolver主页上的说明和说明超出了您的确切需求,因此我只是针对该特定问题向您提供说明:
创建并添加一个名为$XDependencies.xml($X插件名称)的文件到项目中.此文件应包含Gradle文件依赖项.假设您只使用Kotlin stdlib,文件将如下所示:(记得使用正确的kotlin版本)
<dependencies>
<androidPackages>
<androidPackage spec="org.jetbrains.kotlin:kotlin-stdlibjdk7:1.2.61" />
</androidPackages>
</dependencies>
通过选择Unity中的菜单项,使用GoogleJarResolver解析依赖关系Assets -> Play Services Resolver -> Android Resolver -> Resolve.这将下载并向项目添加所需的依赖项.这些将生活在Assets/Plugins/Android.
构建并运行您的应用程序,看它现在是否有效.
我希望它可以解决你所拥有的问题,就像它固定我的一样!
| 归档时间: |
|
| 查看次数: |
1276 次 |
| 最近记录: |