草庐IT

android - 由于转换为使用 Gradle Kotlin DSL,无法解决依赖关系

coder 2023-12-22 原文

使用以下文章作为引用,将我原来的 Kotlin Gradle 脚本从使用 groovy 转换为使用 Kotlin DSL: A Better way to Manage Gradle Build ScriptMigrating Gradle Build Scripts to Kotlin DSL .编译我的代码后,出现以下构建错误。

ERROR: Unable to resolve dependency for ':app@debug/compileClasspath': Could 
not resolve project :app.
Show Details
Affected Modules: app

ERROR: Unable to resolve dependency for 
':app@debugAndroidTest/compileClasspath': Could not resolve project :app.
Show Details
Affected Modules: app

ERROR: Unable to resolve dependency for 
':app@debugUnitTest/compileClasspath': Could not resolve project :app.
Show Details
Affected Modules: app

ERROR: Unable to resolve dependency for ':app@release/compileClasspath': 
Could not resolve project :app.
Show Details
Affected Modules: app

ERROR: Unable to resolve dependency for 
':app@releaseUnitTest/compileClasspath': Could not resolve project :app.
Show Details
Affected Modules: app

过去在这个平台上提出的问题有建议,

  • 使缓存失效并重新启动 android studio,我有 尝试过,但似乎不起作用。
  • 确保没有选择 gradle 全局设置作为离线工作, 也已检查离线,问题仍然存在。

我已尝试使用建议的解决方案来解决问题。 我的应用程序模块的 build.gradle 如下:

plugins {
    id(Plugins.androidApplication)
    kotlin(Plugins.kotlinAndroid)
    kotlin(Plugins.kotlinExtensions)
    kotlin(Plugins.kapt)
}
android {

    compileSdkVersion(Configs.compileVersion)
    defaultConfig {
        applicationId = Configs.applicationId
        minSdkVersion(Configs.minSdkVersion)
        targetSdkVersion(Configs.targetSdkVersion)
        testInstrumentationRunner = Configs.testInstrumentationRunner
        var value = Integer.parseInt(project.property("build_version_code") as String?)
        versionCode = value
        versionName = project.property("build_version") as String?
    }

    signingConfigs {
        getByName("debug") {

        }

        create("release") {

        }
    } 
        buildTypes {
        getByName("debug") {
            buildConfigField("boolean", "MOCK_HARDWARE", "false")
            signingConfig = signingConfigs.findByName("debug")
            applicationIdSuffix = ".debug"
            matchingFallbacks = listOf("debug")
        }
        getByName("release") {
            isMinifyEnabled = false
            buildConfigField("boolean", "MOCK_HARDWARE", "false")
            proguardFiles(getDefaultProguardFile(ProGuards.proguardTxt), ProGuards.androidDefault)
            signingConfig = signingConfigs.findByName("release")
            matchingFallbacks = listOf("release")
        }

    dataBinding {
        isEnabled = true
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
}
repositories {
    flatDir {
        dirs("libs")
    }
}
dependencies {

    implementation(fileTree(mapOf("dir" to "libs", "include" to 
    listOf("*.jar", "*.arr"))))
    implementation(Libs.stdLib)
    implementation(Libs.sunmiui)
    implementation(Libs.slf4j)
    implementation(Libs.appCompact)
    implementation(Libs.otpView)
    implementation(Libs.vectordrawableAnimated)
    implementation(Libs.materialComponents)
    implementation(Libs.recyclerView)
    implementation(Libs.constraintLayout)
    implementation(Libs.junit)
    implementation(Libs.testRunner)
    implementation(Libs.expressoCore)
    implementation(Libs.lifecyleExtensions)
    kapt(Libs.lifecyleCompiler)
    implementation(Libs.roomRuntime)
    implementation(Libs.databindingCompiler)
    implementation(Libs.rxjava)
    implementation(Libs.rxjavaAndroid)
    implementation(Libs.glide)
    implementation(Libs.glideCompiler)
    implementation(Libs.gson)
    implementation(Libs.joda)
    implementation(Libs.countrycodePicker)
    implementation(Libs.timber)
    implementation(Libs.daggerandroidSupport)
    implementation(Libs.daggerandroidProcessor)
}

我的Dependecies.kts如下:

    object Versions
    {
        // kotlin
        const val kotlin = "1.3.31"
        const val buildToolsVersion = "28.0.3"

        const val lifecycleExtensionVersion = "2.0.0"
        const val lifecyleCompilerVersion = "2.0.0"

        const val stdLibVersion = "1.3.21"
        const val otpViewVersion = "2.0.3"

        const val appCompactVersion = "1.1.0-alpha05"
        const val constraintLayoutVersion = "2.0.0-beta1"
        const val materialComponentsVersion = "1.1.0-alpha06"
        const val recyclerViewVersion = "1.0.0"

        const val junitVersion = "4.12"
        const val testRunnerVersion = "1.1.1"
        const val expressoCoreVersion = "3.1.1"

        const val roomRuntimeVersion = "2.1.0-alpha04"

        const val databindingCompilerVersion = "3.5.0-alpha06"

        const val rxjavaVersion = "2.2.7"
        const val rxjavaAndroidVersion = "2.1.1"

        const val glideVersion = "4.8.0"
        const val glideCompilerVersion = "4.8.0"

        const val gsonVersion = "2.8.5"

        const val jodaVersion = "2.7.2"

        const val countrycodePickerVersion = "2.3.0"

        const val timberVersion = "4.7.1"

        const val daggerandroidSupportVersion = "2.19"
        const val daggerandroidProcessorVersion = "2.19"

        const val slf4jVersion = "1.7.21"

        const val vectordrawableAnimatedVersion = "1.1.0-beta01"

        const val sunmiuiVersion = "1.1.27"
    }

    object Libs
    {
        const val lifecyleExtensions = "androidx.lifecycle:lifecycle-extensions:${Versions.lifecycleExtensionVersion}"
        const val lifecyleCompiler = "androidx.lifecycle:lifecycle-compiler:${Versions.lifecyleCompilerVersion}"

        const val stdLib = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${Versions.kotlin}"

        const val otpView = "com.github.mukeshsolanki:android-otpview-pinview:${Versions.otpViewVersion}"

        const val appCompact = "androidx.appcompat:appcompat:${Versions.appCompactVersion}"
        const val constraintLayout = "androidx.constraintlayout:constraintlayout:${Versions.constraintLayoutVersion}"
        const val materialComponents = "com.google.android.material:material:${Versions.materialComponentsVersion}"
        const val recyclerView = "androidx.recyclerview:recyclerview:${Versions.recyclerViewVersion}"

        const val junit = "junit:junit:${Versions.junitVersion}"
        const val testRunner = "androidx.test:runner:${Versions.testRunnerVersion}"
        const val expressoCore = "androidx.test.espresso:espresso-core:${Versions.expressoCoreVersion}"

        const val roomRuntime = "androidx.room:room-runtime:${Versions.roomRuntimeVersion}"

        const val databindingCompiler = "androidx.databinding:databinding-compiler:${Versions.databindingCompilerVersion}"

        const val rxjava = "io.reactivex.rxjava2:rxjava:${Versions.rxjavaVersion}"
        const val rxjavaAndroid = "io.reactivex.rxjava2:rxandroid:${Versions.rxjavaAndroidVersion}"

        const val glide = "com.github.bumptech.glide:glide:${Versions.glideVersion}"
        const val glideCompiler = "com.github.bumptech.glide:compiler:${Versions.glideCompilerVersion}"

        const val gson = "com.google.code.gson:gson:${Versions.gsonVersion}"

        const val joda = "net.danlew:android.joda:${Versions.jodaVersion}"

        const val countrycodePicker = "com.github.joielechong:countrycodepicker:${Versions.countrycodePickerVersion}"

        const val timber = "com.jakewharton.timber:timber:${Versions.timberVersion}"

        const val daggerandroidSupport = "com.google.dagger:dagger-android-support:${Versions.daggerandroidSupportVersion}"
        const val daggerandroidProcessor = "com.google.dagger:dagger-android-processor:${Versions.daggerandroidProcessorVersion}"

        const val slf4j = "org.slf4j:slf4j-api:${Versions.slf4jVersion}"

        const val vectordrawableAnimated = "androidx.vectordrawable:vectordrawable-animated:${Versions.vectordrawableAnimatedVersion}"

        const val sunmiui = "com.sunmi:sunmiui:${Versions.sunmiuiVersion}"
    }

    object Plugins
    {
        const val androidApplication = "com.android.application"
        const val kotlinAndroid = "android"
        const val kotlinExtensions = "android.extensions"
        const val kapt = "kapt"
    }

    object ProGuards
    {
        val androidDefault = "proguard-rules.pro"
        val proguardTxt = "proguard-android.txt"
    }

    object ClassPaths
    {
        const val gradlePlugin = "com.android.tools.build:gradle:3.4.1"
        const val kotlinPlugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.31"
    }

    object Configs
    {
        const val applicationId = "eteetetet"
        const val compileVersion = 28
        const val minSdkVersion = 24
        const val targetSdkVersion = 28
        const val testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

我的项目模块的build.gradle如下:

    buildscript {
        repositories {
            google()
            jcenter()
            mavenCentral()
        }

        dependencies {
            classpath(ClassPaths.gradlePlugin)
            classpath(ClassPaths.kotlinPlugin)

            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }

    allprojects {
        repositories {
            jcenter()
            google()
            mavenCentral()
            maven {
                url = uri("https://plugins.gradle.org/m2/")
            }
            maven {
                url = uri("https://maven.google.com")  
            }
            maven { url = uri("https://jitpack.io") }
        }
    }

    tasks.register("clean", Delete::class) {
        delete(rootProject.buildDir)
    }

我的settings.gradle.kts文件如下:

include(":app",
        ":asterixclient",
        ":asterixtest",
        ":data",
        ":hardware",
        ":registrations",
        ":rewards",
        ":rules",
        ":rulescontracts",
        ":sdfclient",
        ":sdfservice",
        ":sunmiclient",
        ":sync",
        ":till",
        ":tsdevice",
        ":ui",
        ":webapi")

project(":asterixclient").projectDir = 
File("../modules/sdfservice/asterixclient")
project(":asterixtest").projectDir = 
File("../modules/sdfservice/asterixtest")
project(":data").projectDir = File("../modules/data/data")
project(":hardware").projectDir = File("../modules/hardware/hardware")
project(":registrations").projectDir = File("../modules/registrations/app")
project(":rewards").projectDir = File("../modules/rewards/rewards")
project(":rules").projectDir = File("../modules/rules/rules")
project(":rulescontracts").projectDir = 
File("../modules/rules/rulescontracts")
project(":sdfclient").projectDir = File("../modules/sdfservice/sdfclient")
project(":sdfservice").projectDir = File("../modules/sdfservice/sdfservice")
project(":sunmiclient").projectDir = 
File("../modules/sdfservice/sunmiclient")
project(":sync").projectDir = File("../modules/sync/sync")
project(":till").projectDir = File("../modules/till/till")
project(":tsdevice").projectDir = File("../modules/sdfservice/tsdevice")
project(":ui").projectDir = File("../modules/ui/ui")
project(":webapi").projectDir = File("../modules/webapi/webapi")

最佳答案

我终于解决了这个问题,我就是这样改变的

首先我更新到最新版本的 Gradle 发行版

#Tue May 14 11:11:48 CAT 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip

然后我将应用程序模块的 gradle.buid.kts 更改为如下所示

plugins {
    id(Plugins.androidApplication)
    kotlin(Plugins.kotlinAndroid)
    kotlin(Plugins.kotlinExtensions)
    kotlin(Plugins.kapt)
}

android {
    compileSdkVersion(Configs.compileVersion)
    buildToolsVersion(Versions.buildToolsVersion)

    defaultConfig {
        multiDexEnabled = true
        applicationId = Configs.applicationId
        minSdkVersion(Configs.minSdkVersion)
        targetSdkVersion(Configs.targetSdkVersion)
        val version_code = Integer.parseInt(project.property("build_version_code") as String)
        versionCode = version_code
        versionName = project.property("build_version") as String
        testInstrumentationRunner = Configs.testInstrumentationRunner
        proguardFiles(getDefaultProguardFile(ProGuard.proguardTxt), ProGuard.androidDefault)
    }   

    signingConfigs {
        named("debug").configure {
            storeFile = file(project.property("keyStore") as String)
            storePassword = project.property("keystorePassword") as String
            keyPassword = project.property("keystorePassword") as String
            keyAlias = project.property("keyName") as String
        }   

        register("release") {
            storeFile = file(project.property("keyStore") as String)
            storePassword = project.property("keystorePassword") as String
            keyPassword = project.property("keystorePassword") as String
            keyAlias = project.property("keyName") as String
        }
    }

    buildTypes {
        named("release").configure {
            buildConfigField("boolean", "MOCK_HARDWARE", "false")
            proguardFiles(getDefaultProguardFile(ProGuard.proguardTxt), ProGuard.androidDefault)
            signingConfig = (signingConfigs.getByName("release"))
            matchingFallbacks = listOf("release")
        }
        named("debug").configure {
            buildConfigField("boolean", "MOCK_HARDWARE", "false")
            applicationIdSuffix = ".debug"
            signingConfig = signingConfigs.getByName("debug")
            matchingFallbacks = listOf("debug")
        }    
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }

    repositories {
        flatDir {
            dirs("libs")
        }
    }
}

dependencies {
    implementation(fileTree(mapOf("include" to listOf("*.jar", "*.arr"), "dir" to "libs")))
    implementation(Libs.stdLib)
    implementation(Libs.sunmiui)
    implementation(Libs.slf4j)
    implementation(Libs.appCompact)
    implementation(Libs.otpView)
    implementation(Libs.vectordrawableAnimated)
    implementation(Libs.materialComponents)
    implementation(Libs.recyclerView)
    implementation(Libs.constraintLayout)
    implementation(Libs.junit)
    implementation(Libs.testRunner)
    implementation(Libs.expressoCore)
    implementation(Libs.lifecyleExtensions)
    annotationProcessor(Libs.lifecyleCompiler)
    implementation(Libs.roomRuntime)
    annotationProcessor(Libs.databindingCompiler)
    implementation(Libs.rxjava)
    implementation(Libs.rxjavaAndroid)
    implementation(Libs.glide)
    annotationProcessor(Libs.glideCompiler)
    implementation(Libs.gson)
    implementation(Libs.joda)
    implementation(Libs.countrycodePicker)
    implementation(Libs.timber)
    implementation(Libs.daggerandroidSupport)
    annotationProcessor(Libs.daggerandroidProcessor)    
    implementation(project(":data"))
    implementation (project( ":ui"))
    implementation (project( ":webapi"))
    implementation (project(":hardware"))
    implementation (project(":sdfclient"))

}

我还更新了 settings.gradle.kts 文件中的项目引用,如下所示:

include(":app",
        ":data")    
project(":data").projectDir = file("../modules/data/data")) 

主要变化是签名配置、构建类型和项目中其他模块的引用。 例如

implementation(project(":data"))

代替

implementation(project(path, ":data"))

关于android - 由于转换为使用 Gradle Kotlin DSL,无法解决依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56366798/

有关android - 由于转换为使用 Gradle Kotlin DSL,无法解决依赖关系的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  7. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  8. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  9. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  10. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

随机推荐