Unity中调用.aar并打包安卓问题
- 序言
- 导入设置
- C#调用Java代码
- 遇见的问题
- 出现 The option setting 'android.enableR8=false' is deprecated 报错
- 出现 Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0. 报错
- 出现 XXX at AndroidManifest.xml requires a placeholder substitution but no value for <XXX> is provided. 报错
- AndroidManifest.xml问题
- 总结
序言
最近项目中需要导入一些安卓底层代码,遇到一些问题,记录一下。Unity版本2020.3.48f1
导入设置
.aar文件是同事直接发给我的。
-
将aar文件放入Unity下Assets/Plugins/Android 文件夹下,没有的自行创建。
-
导入后点击aar文件,将Android勾上(一般默认勾选)
-
用压缩软件打开.aar文件里看一下,重点看AndroidManifest.xml 文件,不知道是同事导出有问题还是有时候就会存在问题,这里面可能会出现重复的情况。具体报错会在后面详细说。
-
其实这样就已经完成了,可以写代码调java代码了。
C#调用Java代码
具体调用,这篇文章已经写得很详细了。链接: Unity调用Java
遇见的问题
不知道是不是我这个版本的问题,反正遇到了很多问题,一一记录一下解决方法。
出现 The option setting ‘android.enableR8=false’ is deprecated 报错
解决方案:在PlayerSetting中打开这个开关
他会在Assets/Plugins/Android文件夹下生成一个.gradle文件,双击打开该文件。
当前gradle版本是4.0.1,可能是这个版本有问题,将版本改成3.4.0
然后重新打包,这个报错就被解决了。
参考链接: 解决android.enableR8=false
出现 Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0. 报错
好像是使用了弃用的Gradle特性报错。
找到PlayerSetting里这个选项:
在相应的地方打开mainTemplate.gradle
在这里增加一行:implementation ‘com.android.support:appcompat-v7:28.0.0’ 注意:这里的是英文的引号!!!
重新打包就可以。
出现 XXX at AndroidManifest.xml requires a placeholder substitution but no value for is provided. 报错
这是因为的.aar里的AndroidManifest.xml文件里有这么一行
你需要给XXX一个默认值。
还是打开mainTemplate.gradle文件。
在这个地方添加一条 manifestPlaceholders.put(“screenOrientation”,“unspecified”) put里填写key和value就可以了。
AndroidManifest.xml问题
现在好像一般不用另外写ndroidManifest.xml了,Unity会自动将默认的AndroidManifest.xml和你所有的aar中的AndroidManifest.xml文件合并。但是合并的时候有可能会出问题,他会报合并错误,按照他报错的内容修改就好了,一般可能是什么权限合并重复等等。你如果想自己写AndroidManifest.xml的话,你可以打开这个开关:
AndroidManifest.xml文件就自动出现了。你需要改的也就是吧.aar中这种标签全都复制到相应的地方就行了。
总结
导入aar文件后打包可能会出现很多问题,根据报错一一解决就好了,反正上面的报错我都一个一个出现了。很烦。有不会的问ChatGPT,贼好使!!完全能告诉你为什么会出错,该怎么做。