Unity Android Jar插件中com.google.common.primitives.Longs类定义缺失问题的解决求助
解决Unity Android插件找不到com.google.common.primitives.Longs的问题
这个问题我之前帮朋友处理过,本质是你的Jar插件编译时能访问到Guava依赖,但打包到Unity项目后,运行环境里没有包含这些依赖类,导致出现NoClassDefFoundError。给你几个靠谱的解决思路,按优先级推荐:
方法1:把Guava依赖打包进你的插件Jar(Fat Jar)
直接让你的插件Jar包含所有依赖类,这样Unity不需要额外配置就能找到。步骤如下:
- 打开Android Studio中你的插件模块的
build.gradle文件 - 添加一个自定义的Fat Jar构建任务:
task createFatJar(type: Jar) { // 排除重复类,避免冲突 duplicatesStrategy = DuplicatesStrategy.EXCLUDE // 把依赖的类都打包进来 from { configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) } } // 保留原Jar的内容 with jar }
- 执行构建任务:在终端运行
./gradlew createFatJar(Windows用gradlew.bat createFatJar) - 生成的Fat Jar在模块的
build/libs目录下,替换原来的Jar导入到Unity即可。
方法2:在Unity的Gradle配置中添加Guava依赖
让Unity在构建Android包时自动拉取Guava依赖,适合不想修改插件Jar的情况:
- 打开Unity的
Player Settings(Edit -> Project Settings -> Player) - 切换到Android平台,找到
Publishing Settings,勾选Custom Main Gradle Template(会在Assets/Plugins/Android下生成mainTemplate.gradle) - 打开
mainTemplate.gradle,在dependencies块中添加Guava的Android专用依赖:
dependencies { // 保留原有的依赖,比如unityLibrary的依赖 implementation fileTree(dir: 'libs', include: ['*.jar']) // 添加Guava Android版依赖,版本选适配你项目的,这里用30.1.1示例 implementation 'com.google.guava:guava:30.1.1-android' }
- 重新构建Unity项目,Gradle会自动下载并包含Guava类。
方法3:手动导入Guava Jar到Unity
如果不想配置Gradle,也可以手动导入依赖Jar:
- 下载Android专用版的Guava Jar(比如
guava-30.1.1-android.jar,不要用标准Java版) - 将Jar复制到Unity项目的
Assets/Plugins/Android目录下 - 选中Jar,在Inspector面板中确保
Platform Settings里的Android平台被勾选,其他平台取消勾选 - 重新构建Unity项目即可。
注意事项
- 不要同时使用多种方法,比如既打包Fat Jar又添加Gradle依赖,会导致重复类冲突
- 选择Guava版本时,尽量选适配Android的版本(带
-android后缀的),避免引入桌面Java的依赖导致兼容性问题 - 如果你的插件是Android Library模块(而非纯Jar),可以直接导出AAR包导入Unity,AAR会自动携带依赖配置,更省心
内容的提问来源于stack exchange,提问作者Lilian Sananikone
相关产品推荐
相关产品推荐

