首页 > 解决方案 > 为什么将产品风味添加到我的库 build.gradle 文件会导致我的本地应用程序无法解析从所述库导入的依赖项?

问题描述

我正在为我的公司开发一个 android 应用程序。该项目包含目录:我们的 sdk(在本例中为库)和一个导入 sdk 的示例应用程序。当我将产品风味添加到 sdk(库)时,应用程序由于无法解析从 sdk 导入的依赖项而中断。

错误是:

  1. 错误找不到符号类 S
  2. 错误找不到符号类 SO
  3. 错误包S不存在
  4. 错误方法不会覆盖或实现超类型中的方法

这是顶级/项目级别的 build.gradle 文件

buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0'
        classpath 'com.novoda:bintray-release:0.9'
    }
}

allprojects {
    repositories {
        jcenter()
        google()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

这是 SDK/库 build.gradle 文件:

apply plugin: 'com.android.application'
apply plugin: 'com.novoda.bintray-release'

android {
    compileSdkVersion 27
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 27
        versionCode 1
        versionName version
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    defaultPublishConfig "nonlocationVersionRelease"
    publishNonDefault true

    flavorDimensions "version"

    productFlavors {
        nonlocation {
            dimension "version"
        }
        location {
            dimension "version"
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            //proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            debuggable true
        }
    }



    lintOptions {
        abortOnError false
    }
}

configurations {
    javadocDeps
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:support-annotations:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.mcxiaoke.volley:library:1.0.19'
    implementation 'com.google.android.gms:play-services-ads:15.0.1'
}

publish {
    userOrg = '*******'
    groupId = 'com.*******.android'
    artifactId = '*******'
    publishVersion = '2.0.0'
    desc = '******* sdk'
    website = 'https://github.com/*******/*******-android-public-sdk'
}

这是应用程序的 build.gradle 文件:

apply plugin: 'com.android.application'

def computeVersionCode = { ->
    def stdout = new ByteArrayOutputStream()
    exec {
        commandLine 'git', 'rev-list', 'HEAD', '--count'
        standardOutput = stdout
    }
    return stdout.toString().trim().toInteger();
}

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.*******.demo"
        minSdkVersion 15
        targetSdkVersion 27

        versionCode computeVersionCode()
        versionName "1.0"

        renderscriptTargetApi 20
        renderscriptSupportModeEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    signingConfigs {
        debugConfig {
            storeFile file("debug.jks")
            storePassword "*******"
            keyAlias "com.*******.android"
            keyPassword "*******"
        }

        releaseConfig {
            storeFile file("release.jks")
            storePassword "*******"
            keyAlias "com.*******.android"
            keyPassword "*******"
        }
    }

    buildTypes {
        debug {
            signingConfig signingConfigs.debugConfig
        }
        release {
            signingConfig signingConfigs.releaseConfig
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    lintOptions {
        abortOnError false
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    testImplementation 'junit:junit:4.12'
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.support:design:27.1.1'
    implementation 'com.android.support:preference-v7:27.1.1'
    implementation 'com.google.guava:guava:23.0'
    implementation 'com.squareup:seismic:1.0.2'
    implementation 'net.hockeyapp.android:HockeySDK:3.7.0'
    implementation 'jp.wasabeef:blurry:1.0.5'

    implementation project(path: ':*******-sdk', configuration:'default')
}

我已经尝试解决此问题 4 天,但仍然卡住。我已经尝试了在 stackoverflow 上找到的所有典型解决方案。这是一个接一个问题的级联问题,这个特定问题是在更新了如何在应用程序的 build.gradle 文件中加载 sdk 之后直接出现的。我怀疑我将 sdk 作为依赖项导入的这一行有问题(应用程序的 build.gradle 结束):

implementation project(path: ':*******-sdk', configuration:'default')

但不包括 'configuration: 'default'' 会导致另一个错误,即应用程序无法辨别要使用 SDK 的哪个 buildVariant。

如何让我的应用程序启动并运行,同时保持 SDK 中的产品风格?

标签: androidgradleandroid-productflavors

解决方案


推荐阅读