我有一个Unity游戏,它使用包含在AAR(library.aar
)中的Android库。但是,我需要访问主要活动的生命周期回调(onPause()
,onResume()
,仅举几例)。
所以我在Android Studio中创建了一个新的库项目(让我们称之为plugin
)。我将library.aar
导入plugin
并将其添加到依赖项中。我通过调用library.aar
内的MainActivity
内的函数来测试它。此时它不会抛出任何错误。
在MainActivity
中,我在相应的功能中调用了Library.onActivityResult()
,Library.onResume()
和Library.onPause()
。
接下来,我将classes.jar
中的Unity/Editor/Data/PlaybackEngines/androidplayer/release/bin
添加到我的plugin
项目中。我将JAR添加到依赖项中。我通过尝试子类UnityPlayerActivity
来测试它。再次,没有错误。
我将plugin
汇编到plugin-debug.aar
并将其放入Assets/Plugins/Android
。我还创建了一个AndroidManifest.xml
我从the Unity Manual获得并将其放在Assets/Plugins
内。
我从Unity场景中的按钮调用这些函数,如下所示:
AndroidJavaClass jc = new AndroidJavaClass("com.alxcyl.plugin.MainActivity");
jc.CallStatic("connect");
// "connect" is a static function in the Java class MainActivity containing
// a short message like so:
// Log.d("My Plugin", "connect() was called");
我构建游戏并在我的Android设备上运行它。如果我单击该按钮,则MyPlugin.connect()
被正确调用,因为它会记录单击时应该显示的消息。
我认为生命周期回调被正确调用,但问题是它记录了一个错误说:
I/dalvikvm( 5466): Could not find method com.somecompany.library.Library.onActivityResult, referenced from method com.alxcyl.plugin.MainActivity.onActivityResult
W/dalvikvm( 5466): VFY: unable to resolve virtual method 276: Lcom/somecompany/library/Library;.onActivityResult (IILandroid/content/Intent;)V
I/dalvikvm( 5466): Could not find method com.somecompany.library.Library.onPause, referenced from method com.alxcyl.plugin.MainActivity.onPause
W/dalvikvm( 5466): VFY: unable to resolve virtual method 276: Lcom/somecompany/library/Library;.onPause()V
I/dalvikvm( 5466): Could not find method com.somecompany.library.Library.onResume, referenced from method com.alxcyl.plugin.MainActivity.onResume
W/dalvikvm( 5466): VFY: unable to resolve virtual method 276: Lcom/somecompany/library/Library;.onResume()V
D/MyPlugin( 5466): connect() was called
我不确定是什么原因造成的。当你构建plugin
项目时,它构建良好而没有任何错误,但是当你通过Unity访问它时,它不起作用。我尝试在新的Android项目中使用相同的library.aar
,Library.onActivityResult()
,Library.onPause()
和Library.onResume()
肯定存在且已正确调用。
Unity可以处理包含AAR的AAR吗?有没有解决这个问题?
答案 0 :(得分:0)
看起来.aar库中缺少包含所有已编译代码的.jar文件。
Unity将自己的.jar文件与所有插件中的所有.jar文件一起编译成一个.dex文件。
在Unity论坛上,您发布了“未找到类”错误;在这里你提到“找不到方法”。无论如何,你的.aar文件似乎有些问题。