Unity3D 和 aar 问题

1 android unity-game-engine

我必须为Unity3D构建一个aar模块,但是这样做的问题太多了。

我的工作环境

Unity3D:5.6.f1
Android Studio:2.3.3
构建工具:25.0.2
SDK 工具:24.4

我已经构建了一个 aar 文件并将其解压缩以删除classes.jarin libs,之后我将 aar 文件和 AndroidManifest.xml 复制到asset\Plugins\Android。android项目和unity项目的包名是一样的。

之后构建 APK 文件,导致以下异常:

IOException: Failed to Move File / Directory from 'Temp/StagingArea/android-libraries/app-debug/classes.jar' to 'Temp/StagingArea/android-libraries/app-debug/libs/classes.jar'.
UnityEditor.Android.PostProcessor.Tasks.ProcessAAR.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessAndroidPlayer.PostProcess (BuildTarget target, System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, System.String productName, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry)
UnityEditor.Android.AndroidBuildPostprocessor.PostProcess (BuildPostProcessArgs args)
UnityEditor.PostprocessBuildPlayer.Postprocess (BuildTargetGroup targetGroup, BuildTarget target, System.String installPath, System.String companyName, System.String productName, Int32 width, Int32 height, System.String downloadWebplayerUrl, System.String manualDownloadWebplayerUrl, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.BuildReporting.BuildReport report) (at /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:186)
UnityEditor.HostView:OnGUI()
Run Code Online (Sandbox Code Playgroud)

我一直在寻找答案 3 天,我已经尝试了我在网上找到的所有内容,请帮助!

我很确定 aar 文件libs夹中没有任何内容

Pro*_*mer 5

从 Android Studio 中找到您的Build.gradle文件,查找捆绑classes.jar文件的任何命令。

根据您的 Android Studio 项目的生成方式,它应该如下所示:

compile files('libs/jars/classes.jar')
Run Code Online (Sandbox Code Playgroud)

或者

compile fileTree(dir: 'libs', include: ['*.jar'])
Run Code Online (Sandbox Code Playgroud)

只需将“compile”替换为“provided”关键字

provided files('libs/jars/classes.jar')
Run Code Online (Sandbox Code Playgroud)

或者

provided fileTree(dir: 'libs', include: ['*.jar'])
Run Code Online (Sandbox Code Playgroud)

这将使 Android Studio 从最终的 arr 插件构建中排除 .jar 插件。您现在可以再次构建插件并将其传输到Assets/Plugins/Android文件夹中。我建议你用一个新项目这样做,以确保任何地方都没有重复。

您还可以通过右键单击classes.jar插件并在依赖项 选项卡中将其设置为提供来进入模块设置

笔记:

您不需要手动将AndroidManifest.xml文件添加到 Unity 项目中,因为如果这是一个arr插件,这将由 Unity 自动完成。如果这是一个jar插件,您只需要这样做。虽然,如果您仍然遇到权限问题,请手动执行此操作。

  • 这完美而优雅地工作。谢谢你。在较新的 gradle 版本中,我们现在可以使用 `compileOnly` 来避免`配置 'provided' 已过时并已被替换为 'compileOnly'。它将在 2018 年底移除。有关更多信息,请参阅:http://d.android.com/r/tools/update-dependency-configurations.html` 警告。 (2认同)