基于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依赖,问题仍存在。
解决方案
以下是经过验证的修复步骤:
- 配置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' } } } }
- 校验SDK模块的Library配置
确保SDK模块的build.gradle顶部声明为Library插件,且未禁用依赖传递:
plugins { id 'com.android.library' } // 确保没有设置如下禁用传递的配置 // configurations.all { // transitive = false // }
- 替换手动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)
- 清理缓存并重新构建
执行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
相关产品推荐
相关产品推荐

