基于ARCore与Sceneform的Android土地面积测量项目依赖问题咨询
ARCore与Sceneform依赖冲突解决方案(Kotlin Android项目)
问题背景
使用Kotlin开发具备土地面积测量功能的Android应用,集成ARCore与Sceneform时遭遇依赖冲突,当前build.gradle依赖配置如下:
implementation(libs.androidx.core.ktx) { exclude(group = "com.android.support") } implementation(libs.androidx.appcompat) { exclude(group = "com.android.support") } implementation(libs.material) { exclude(group = "com.android.support") } implementation("com.google.ar.sceneform.ux:sceneform-ux:1.17.1") { exclude(group = "com.android.support") } implementation("com.google.ar.sceneform:core:1.17.1") { exclude(group = "com.android.support") } implementation("com.google.ar:core:1.41.0") implementation("androidx.core:core:1.12.0") implementation("androidx.core:core-ktx:1.12.0") implementation("androidx.appcompat:appcompat:1.6.1")
尝试默认依赖集成后无法正常运行,需解决以下问题:
- 避免ARCore与Sceneform版本冲突的正确依赖树是什么?
- 这些依赖在Kotlin项目中应如何构建?
- 是否存在已知的适配良好的版本组合?
1. 避免版本冲突的正确依赖树
冲突核心原因有两点:Sceneform与ARCore版本不匹配(Sceneform对ARCore版本有严格绑定);重复声明AndroidX依赖(同时使用libs.xxx和直接坐标导致版本不一致)。
正确的依赖树需满足:
- Sceneform核心与UX组件版本完全一致
- ARCore版本与Sceneform版本严格适配
- 仅保留一套AndroidX依赖声明(推荐用
libs.toml统一管理)
结构示例:
├── AndroidX Core KTX(统一版本) ├── AndroidX AppCompat(统一版本) ├── Material Components(统一版本) ├── Sceneform Core(指定版本) ├── Sceneform UX(与Core同版本) └── ARCore(与Sceneform适配的版本)
2. Kotlin项目中的依赖构建方式
步骤1:用libs.toml统一版本管理
在gradle/libs.versions.toml中配置所有依赖版本,消除重复声明:
[versions] androidxCoreKtx = "1.12.0" androidxAppCompat = "1.6.1" material = "1.11.0" sceneform = "1.17.1" arcore = "1.28.0" # 与Sceneform 1.17.1适配的版本 [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "androidxCoreKtx" } androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "androidxAppCompat" } material = { group = "com.google.android.material", name = "material", version.ref = "material" } sceneform-core = { group = "com.google.ar.sceneform", name = "core", version.ref = "sceneform" } sceneform-ux = { group = "com.google.ar.sceneform.ux", name = "sceneform-ux", version.ref = "sceneform" } arcore = { group = "com.google.ar", name = "core", version.ref = "arcore" }
步骤2:在模块build.gradle.kts中引入依赖
移除重复的AndroidX声明,保留统一引用并处理com.android.support冲突:
dependencies { implementation(libs.androidx.core.ktx) implementation(libs.androidx.appcompat) implementation(libs.material) implementation(libs.sceneform.core) { exclude(group = "com.android.support") } implementation(libs.sceneform.ux) { exclude(group = "com.android.support") } implementation(libs.arcore) }
步骤3:配置Java 8支持
Sceneform依赖Java 8特性,需在模块build.gradle.kts中添加:
android { compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } }
3. 已知适配良好的版本组合
由于Google官方已停止维护Sceneform(最后稳定版为1.17.1),以下是经过验证的稳定组合:
- 最稳定组合:Sceneform 1.17.1 + ARCore 1.28.0 + AndroidX Core KTX 1.12.0 + AppCompat 1.6.1
- 兼容较新AndroidX组合:Sceneform 1.17.1 + ARCore 1.28.0 + AndroidX Core KTX 1.13.1 + AppCompat 1.7.0
若需更现代的AR功能,建议迁移至ARCore Extensions(Google官方替代Sceneform的方案),但需注意其API与Sceneform差异较大。
内容的提问来源于stack exchange,提问作者Akila Lochana
相关产品推荐
相关产品推荐

