繁体   English   中英

Unity忽略了android插件清单文件导致丢失 <service> android清单中的元素

[英]Unity ignores android plugin manifest file leading to missing <service> element in its android manifest

我为Unity3D创建了一个Android插件。 这个插件通过调用bindService()来启动后台服务。 为了声明这个服务,我将<service>元素作为我的android模块的AndroidManifest.xml文件 <application>元素的子元素。 然后我从模块创建了一个jar文件,并将其放在Assets \\ Plugins \\ Android文件夹中。

问题是Unity创建的AndroidManifest文件中缺少<service>元素。 这是为什么?

Unity应该从jar文件中提取我的清单,并根据Unity文档将其与自己的清单文件合并:

您可以将预编译的Android库项目放入Assets-> Plugins-> Android文件夹中。 预编译意味着所有.java文件必须已编译到位于项目的bin /或libs /文件夹中的jar文件中。 在构建项目时,来自这些文件夹的AndroidManifest.xml将自动与主清单文件合并。

因此结果清单文件应该包含<service>元素(但它不像之前所说的那样)。

以下是我的模块及其清单文件:

在此输入图像描述 我使用以下gradle代码(从这里 )将模块转换为jar文件:

task createJar(type: Copy) {
    from('build/intermediates/bundles/default/')
    into('libs/jars/')
    include('classes.jar')
    rename('classes.jar', 'locationPlugin.jar')
}

注意 :我的问题不是这个问题的重复。 我不是在制作自定义清单,而是我没有修改Unity制作的清单。 我的问题是为什么unity不会将我编译的模块(.jar文件)的清单合并到它自己的清单中。

我想到了。 我创建的Jar文件不包含清单文件(我通过7zip打开.jar文件验证了)。 因此Unity首先没有看到任何清单文件能够将其合并到自己的清单文件中。

为解决此问题,我创建了一个Android Archive(AAR)文件而不是jar文件, 如下所示

  1. 打开现有应用程序模块的build.gradle文件。 在顶部,您应该看到以下内容:

    apply plugin: 'com.android.application'

  2. 更改插件分配,如下所示:

    apply plugin: 'com.android.library'

  3. 单击“使用Gradle文件同步项目”

现在通过进入“Gradle Projects”窗格(右侧)构建模块,找到相关的gradle模块,然后转到Tasks> build> build 双击运行它。 .aar文件现在已构建。

1)找到该模块的.aar文件(它位于mylibrary \\ build \\ outputs \\ aar文件夹中)。 我选择了第一个版本。 它被称为mylibrary-release.aar 您可以通过7zip打开它来验证Android清单文件是否存在。

2)将.aar文件复制到Assets\\Plugins\\Android文件夹中。

而已! Unity现在将模块的清单文件合并到其自己的清单中。 您可以在Unity项目的Temp \\ StagingArea中找到生成的清单文件。

一个非常重要的事情是确保您的<service>元素包含服务类的完全限定名称,这意味着包名+类名:

<service android:name="com.servicelocation.zerokey.mylibrary.MyLocationService"/>

有关此方法的示例,您可以在Unity中创建一个空项目,并从资产商店安装Google Cast Remote Display android插件 您可以看到Google已将其.aar文件放在Assets> Plugins> Android下,此文件包含:

在此输入图像描述

以下是此清单的内容:

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM