[英]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文件, 如下所示 :
打开现有应用程序模块的build.gradle文件。 在顶部,您应该看到以下内容:
apply plugin: 'com.android.application'
更改插件分配,如下所示:
apply plugin: 'com.android.library'
单击“使用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.