You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

使用方法:

  1. 在Android Studio的Gradle面板(右侧边栏)中,找到你的Library模块 -> Tasks -> other -> createUnityJar,双击运行;
  2. 或者在终端执行命令:./gradlew createUnityJar(Windows用gradlew.bat createUnityJar);
  3. 任务完成后,在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目录。

⚠️ 缺点:容易遗漏依赖,版本管理麻烦,后续升级依赖还要手动重新拷贝,不如方案一高效。

额外注意事项:

  1. 混淆配置:如果开启了minifyEnabled true,一定要在proguard-rules.pro中添加规则,避免依赖类被混淆:
    -keep class android.support.v4.** { *; }
    -keep class android.support.v7.** { *; }
    -keep class retrofit2.** { *; }
    -keepattributes Signature
    -keepattributes Exceptions
    
  2. 避免重复依赖:如果Unity项目中已经导入了相同的Jar,要注意版本一致,否则会出现冲突。

内容的提问来源于stack exchange,提问作者YoloAccReturned

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:38:26