Android Studio开发Unity插件Library缺失AppCompat依赖求助
解决Unity Android插件中依赖类找不到的问题
我之前做Unity Android插件的时候也踩过这个坑!问题的核心在于:Android Library默认生成的.jar只包含自身的代码,不会把第三方依赖(比如AppCompat、Retrofit)打包进去——不管你用implementation还是旧的compile,这些依赖都只会在本地编译时生效,不会被合并到最终输出的jar里,而Unity没办法像Android项目那样通过Gradle自动拉取依赖,所以就会出现运行时ClassNotFoundException。
下面给你几个可行的解决方案,按推荐程度排序:
方案一:自定义Gradle任务,打包所有依赖到同一个Jar
这是最自动化、最可靠的方法,我们可以写一个Gradle任务,把Library自身的代码和所有第三方依赖的代码合并成一个Jar。
修改你的build.gradle,添加以下内容:
apply plugin: 'com.android.library' android { compileSdkVersion 26 defaultConfig { minSdkVersion 21 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') // 这里用api或者implementation都可以,只要后续任务能获取到依赖 api 'com.android.support:appcompat-v7:26.1.0' // 如果需要Retrofit,同样添加依赖 // api 'com.squareup.retrofit2:retrofit:2.9.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } // 自定义任务:打包自身代码+所有依赖到一个Jar task createUnityJar(type: Jar) { // 包含Library编译后的核心代码 from('build/intermediates/javac/release/classes') // 遍历所有编译依赖的Jar包,解压后合并到输出Jar中 configurations.compileClasspath.files.each { file -> from(zipTree(file)) { // 排除不需要的文件,避免冲突或冗余 exclude 'META-INF/**' exclude 'android/support/test/**' exclude 'junit/**' exclude 'org/junit/**' } } // 输出的Jar名称,可自定义 archiveName = 'unity-plugin.jar' // 输出目录,默认在build/libs下 destinationDir = file('build/libs') } // 让打包任务依赖Release编译任务,确保先编译再打包 createUnityJar.dependsOn assembleRelease
使用方法:
- 在Android Studio的Gradle面板(右侧边栏)中,找到你的Library模块 -> Tasks -> other ->
createUnityJar,双击运行; - 或者在终端执行命令:
./gradlew createUnityJar(Windows用gradlew.bat createUnityJar); - 任务完成后,在
build/libs目录下就能拿到包含所有依赖的unity-plugin.jar,把这个Jar导入Unity的Plugins/Android目录即可。
方案二:手动拷贝依赖Jar到Unity项目
如果不想改Gradle配置,可以手动找到依赖的Jar文件,和你的Library生成的Jar一起导入Unity:
- 找到AppCompat的Jar:在你的Android SDK目录下的
extras/m2repository/com/android/support/appcompat-v7/26.1.0/,找到appcompat-v7-26.1.0.jar; - 还要注意AppCompat依赖的其他Jar,比如
support-v4、support-media-compat等,同样找到对应的版本Jar; - 把这些Jar和你的Library生成的Jar(默认在
build/outputs/aar/下,解压aar就能拿到里面的classes.jar)一起放到Unity的Plugins/Android目录。
⚠️ 缺点:容易遗漏依赖,版本管理麻烦,后续升级依赖还要手动重新拷贝,不如方案一高效。
额外注意事项:
- 混淆配置:如果开启了
minifyEnabled true,一定要在proguard-rules.pro中添加规则,避免依赖类被混淆:-keep class android.support.v4.** { *; } -keep class android.support.v7.** { *; } -keep class retrofit2.** { *; } -keepattributes Signature -keepattributes Exceptions - 避免重复依赖:如果Unity项目中已经导入了相同的Jar,要注意版本一致,否则会出现冲突。
内容的提问来源于stack exchange,提问作者YoloAccReturned
相关产品推荐
相关产品推荐

