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

基于Google Cardboard SDK的Android项目生成AAR缺失SDK类求助

解决Google Cardboard SDK类未打包进App模块AAR的问题

问题背景

开发基于最新Google Cardboard SDK的360°图片展示Android项目,将App模块打包为AAR导入其他项目时,发现AAR仅包含App自身类与基础依赖,缺失Cardboard SDK的相关类与native库。尝试过api依赖、模块引入等方式,且Gradle已开启transitive依赖,问题仍存在。

解决方案

以下是经过验证的修复步骤:

  1. 配置App模块AAR打包时合并SDK模块内容
    在App模块的build.gradle的android块中添加libraryVariants配置,强制将SDK模块的类、native库、资源合并到最终生成的AAR中:
android {
    // ... 保留现有compileSdkVersion、defaultConfig等配置

    libraryVariants.all { variant ->
        variant.outputs.each { output ->
            def packageLibTask = output.getPackageLibraryProvider().get()
            // 导入SDK模块的类文件
            packageLibTask.from(project(':sdk').bundleReleaseAar.outputs.files) {
                include 'classes.jar'
                into 'libs'
            }
            // 导入SDK的native库
            packageLibTask.from(project(':sdk').bundleReleaseAar.outputs.files) {
                include 'jni/**/*.so'
                into 'jni'
            }
            // 导入SDK的资源文件(如果有)
            packageLibTask.from(project(':sdk').bundleReleaseAar.outputs.files) {
                include 'res/**'
                into 'res'
            }
        }
    }
}
  1. 校验SDK模块的Library配置
    确保SDK模块的build.gradle顶部声明为Library插件,且未禁用依赖传递:
plugins {
    id 'com.android.library'
}

// 确保没有设置如下禁用传递的配置
// configurations.all {
//     transitive = false
// }
  1. 替换手动Native库复制任务
    删除原extractNdk、deleteNdk任务,改为直接依赖SDK模块的Native产物,避免手动复制导致的打包遗漏:
    在App模块的defaultConfig.externalNativeBuild.cmake中添加SDK Native路径参数:
defaultConfig {
    // ... 现有配置
    externalNativeBuild.cmake {
        arguments "-DANDROID_STL=c++_shared", "-DCARDBOARD_JNI_DIR=${project(':sdk').buildDir}/intermediates/jniLibs/release"
    }
}

同时在CMakeLists.txt中引用该路径的库:

link_directories("$ENV{CARDBOARD_JNI_DIR}")
target_link_libraries(your_app_target_name GfxPluginCardboard)
  1. 清理缓存并重新构建
    执行Gradle命令彻底清理缓存并重新打包AAR:
./gradlew clean :app:bundleReleaseAar

额外注意事项

  • 由于minSdkVersion为24(Android 7.0),可移除multiDexEnabled true配置,该版本系统默认支持多Dex,无需额外开启。
  • 确保ProGuard规则未混淆Cardboard SDK的类,在proguard-rules.pro中添加:
-keep class com.google.cardboard.** { *; }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:22:59