升级到Android 3.0 beta 2后无法解析库项目

时间:2017-08-14 18:25:26

标签: android-studio android-studio-3.0

我正在尝试将我的AS升级到最新的beta2,并遇到我的applib模块的以下问题。

在我的app build.gradle我有两种口味

    flavorDimensions "default" 
       productFlavors {
           stage {
             applicationId "com.mycompany.hello.stage"
             resValue "string", "app_name", "Stage"
            }
           production {
            applicationId "com.mycompany.hello.stage.production"
            resValue "string", "app_name", "Live"
            }
      }

我指定该应用仅与我lib的特定类型进行对话,如下所示:

 stageCompile project(path: ':lib', configuration: 'debug')
 productionCompile project(path: ':lib', configuration: 'release')

lib build.gradle文件我只有构建类型而没有调整块

 publishNonDefault true
 buildTypes {
    debug {
        versionNameSuffix ".debug"
    }
    release {
        versionNameSuffix ".release"
        minifyEnabled true
    }
}

以上代码我最了解app将取决于构建变体并与lib的特定构建变体进行对话。它完美运行,直到我升级到AS 3.0。

这里是gradle错误消息...我不确定这是否是由我的两个gradle文件中的flavorDimensions不匹配引起的。

Error:Could not determine the dependencies of task ':app:compileStageDebugAidl'.
> Could not resolve all task dependencies for configuration ':app:stageDebugCompileClasspath'.
> Could not resolve project :lib.
 Required by project :app
> Project :app declares a dependency from configuration 'stageCompile' to configuration 'debug' which is not declared in the descriptor for project :lib.

1 个答案:

答案 0 :(得分:0)

所以我花了几个小时来迁移我的项目以匹配我Android Studio提供的迁移指南。

我最终做了以下更改以实现我想要的目标:

app变体productionRelease应调用lib release

app变体stageDebug应调用lib debug

app build.gradle文件

flavorDimensions "default" //add this line for flavorDimensions 
productFlavors {
    stage {
        ...
    }

    production {
        ...
    }
}
implementation project(':lib')

在我的lib build.gradle中,我保持不变

publishNonDefault true
 buildTypes {
    debug {
        versionNameSuffix ".debug"
    }
    release {
        versionNameSuffix ".release"
        minifyEnabled true
    }
}

我在这里唯一的问题是忽略某些我不想实现的生产版本(app)+发布(lib)和stageDebug(app)+ debug(lib)组合。

//通过这种方式,我只会在AS面板中留下productionReleasestageDebug变体。

在app build.gradle中

variantFilter { variant ->
    def names = variant.flavors*.name
    if (names.contains("stage") && variant.buildType.name == "release") {
        variant.ignore = true
    }
    if (names.contains("production") && variant.buildType.name == "debug") {
        variant.ignore = true
    }
}

当我切换app的构建变体时,它也会将我的lib切换为相应的构建类型。

我仍然不确定这是否是最佳做法。如果你们找到一个更好的方法来做到这一点。请告诉我。