当前位置: 首页 > 知识库问答 >
问题:

无法构建:如何为新模块添加Android构建配置

胡致远
2023-03-14

现在,我正在将我的android代码转换为模块化的体系结构方法。在尝试从“聊天”模块添加对“应用”模块的依赖时遇到问题。

我为“app”模块提供了以下构建配置

android {

lintOptions {
    checkReleaseBuilds false
    abortOnError false
}

signingConfigs {
    companydevconfig {
        keyAlias 'company'
        keyPassword '123456'
        storeFile file('../app/jksFils/company_dev.jks')
        storePassword '123456'
    }
    companyqaconfig {
        keyAlias 'company'
        keyPassword '123456'
        storeFile file('../app/jksFils/company_qa.jks')
        storePassword '123456'
    }
    companyprodconfig {
        keyAlias 'company'
        keyPassword '123456'
        storeFile file('../app/jksFils/release.keystore')
        storePassword '123456'
    }
}

compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
    applicationId "com.company.employee.dev"
    minSdkVersion 21
    targetSdkVersion 28
    versionCode 1
    versionName "1.13"
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    multiDexEnabled true
}
aaptOptions {
    cruncherEnabled = false
}
testOptions {
    unitTests.returnDefaultValues = true
}
buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debug {
        testCoverageEnabled true
    }

}

sourceSets {
    main.java.srcDirs += 'src/main/kotlin'
}

dataBinding {
    enabled = true
}
packagingOptions {
    exclude 'META-INF/ASL2.0'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/rxjava.properties'
}
flavorDimensions "company"
productFlavors {
    dev {
        dimension "company"
        applicationId "com.company.employee.dev"
        versionCode 277
        versionName "2.0.0.16"
        signingConfig signingConfigs.companydevconfig

        buildConfigField 'String', 'BASEURL', '"https://dev.company.com"'
    }
    qa {
        dimension "company"
        applicationId "com.company.employee.qa"
        versionCode 225
        versionName "2.0.2.2"
        signingConfig signingConfigs.companyqaconfig

        buildConfigField 'String', 'BASEURL', '"https://qa.company.com"'

    }
    prod {
        dimension "company"
        applicationId "com.company.employee.prod"
        versionCode 38
        versionName "1.5.20"
        signingConfig signingConfigs.companyprodconfig

        buildConfigField 'String', 'BASEURL', '"https://cloud.company.com"'

    }
}
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
testOptions {
    unitTests.returnDefaultValues = true
    unitTests.all {
        setIgnoreFailures(true)
        jacoco {
            includeNoLocationClasses = true
        }
    }
  }
}

现在我添加了一个新模块“聊天”。它在build config中有以下代码。

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
compileSdkVersion 29
buildToolsVersion "29.0.2"

defaultConfig {
    applicationId "com.company.employee.chat"
    minSdkVersion 21
    targetSdkVersion 29
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debug {
    }
}
sourceSets {
    main.java.srcDirs += 'src/main/kotlin'
}

dataBinding {
    enabled true
}

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

kotlinOptions {
    jvmTarget = "1.8"
}
}

dependencies {
implementation project(':app')

implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}

当我试图建立我得到以下错误。

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


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


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


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


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

共有2个答案

沈国安
2023-03-14

您可能正在导入应用程序而不是模块。嗯,您也可以在模块的Gradle中更改它。

改变

apply plugin: 'com.android.application'

apply plugin: 'com.android.library'

您还需要从gradle中删除applicationId。

然后,在应用程序的依赖项中。格雷德尔,

而不是

实现项目(': lib-name')

我用了,

实现项目(路径:':lib name',配置:'default')

例如:实现项目(路径:': myService',配置:
'默认')

它就像一个符咒

我添加了一个服务依赖模块,而不是将库作为AOSP项目的一部分。

以防万一,它会帮助别人。

汪思博
2023-03-14

这里有一些需要考虑的事情

  1. 应用模块和库模块之间有区别。

库模块符合. aar/file。但是,应用模块被编译为APK。这意味着您不能将应用模块作为依赖导入到库模块。因此,从库模块中删除这一行:

 implementation project(':app')

打开应用程序模块的settings.gradle,并确保列出了您的库

include ':app', ':chat'

作为依赖项导入库模块

dependencies {
implementation project(':chat')
}

最重要的是看看:创建一个Android库

 类似资料:
  • 模块标记 coolie-cli 的模块构建方式应该是比较特殊的一类,与 webpack 一样,都是另辟蹊径。 webpack:依赖模块放到数组里,数组索引值就是模块 ID。 coolie-cli:依赖模块全局标记 ID(三十六进制)。 coolie-cli 可以将长长的物理路径压缩成最短的字符,达到压缩率最大化,而不是将模块直接合并。 // module1.js define(function(r

  • 问题内容: 我刚刚将Android Studio更新为内部版本130.729444,并且我的项目(在更新之前正确构建)已停止工作,并且Android Studio向我显示以下错误: 有人知道如何解决吗?我正在考虑恢复到旧版本,但是我想知道这是我的问题还是我不​​是唯一的问题。 问题答案: 我最近向Google提交了错误报告。根据Android开发人员工具论坛中的主题,这是他们无法直接解释的问题。我

  • 公共模块 在介绍分块模块之前,来说些公共模块。 当一个项目逐渐壮大的时候,势必会出现一些公共模块。 如何分配和处理这些公共模块,需要全局考虑,是一个不小的利弊权衡。 如工程里共有 20 个入口模块, 5 个入口模块引用了同一个模块 a, 10 个入口模块引用了同一个模块 b, 15 个入口模块引用了同一个模块 c, 20 个入口模块引用了同一个模块 d。 如何分配这 4 个公共模块呢? 全部打包在

  • Project Structure用来配置项目和模块的各种构建参数和属性,前面我们已经介绍过了SDK Location和Project的配置,本章主要介绍模块构建的一些配置. 打开Project Structure对话框: 操作步骤: 菜单栏: File —> Project Structure 快捷键: Mac: command + ; Windows/Linux: Ctrl + Shift +

  • 我是不是漏掉了什么?

  • Module:build.gradle是用来配置模块的构建任务. 默认的build.gradle文件内容如下: //插件: //这个module是一个android程序,使用com.android.application //如果是android库,应该使用com.android.library apply plugin: 'com.android.application' android