无法使用 productFlavors 在库中导入 android 支持 v4 或 v7

Fail to import android support v4 or v7 in library using productFlavors

我正在设置具有不同 productFlavorsAndroid 库 。 该库具有 lightfull 风格。文件设置正确:

src/main/java/com/example/... 主 类
src/full/java/com/example/... 完整 类
src/light/java/com/example/... 灯 类

Android Studio 正确地理解了这一点,并为完整的风格添加了 (full)

问题: okhttp 等依赖项按预期工作,但 appcompat-v7 没有。一切都使用 ViewPagerFragmentActivityRecyclerView。我已经尝试将依赖项添加到 fullCompile 但它也没有用。 Android Studio 未解决依赖关系,导入不工作,但可以 okhttpexoplayer 等。

我已经尝试 Invalidate Cache/Restartclean ProjectResync gradle、none 成功了。

图书馆 build.gradle

apply plugin: 'com.android.library'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    ...

    buildTypes {
        release {
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            minifyEnabled false
        }
    }
    lintOptions {
        abortOnError false
    }

    publishNonDefault true

    productFlavors {
        full {
        }
        light {
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:support-v4:23.1.1'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.squareup.okhttp:okhttp:2.3.0'
    fullCompile 'com.android.support:support-v4:23.1.1'
    fullCompile 'com.android.support:appcompat-v7:23.1.1'
    fullCompile 'com.android.support:recyclerview-v7:23.1.1'
    fullCompile 'com.squareup.picasso:picasso:2.5.0'
}

应用程序 build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    buildTypes {
        release {
        }
    }

    productFlavors {
        full {
        }
        light {
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.+'
    compile 'com.android.support:support-v4:23.+'
    compile 'com.google.android.gms:play-services-base:7.5.0'
    compile 'com.google.android.gms:play-services-ads:7.5.0'
    compile 'com.google.android.gms:play-services-location:7.5.0'
    compile 'com.android.support:recyclerview-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    fullCompile project(path: ':library', configuration: 'fullRelease')
    lightCompile project(path: ':library', configuration: 'lightRelease')
}

您必须在应用程序中声明配置 gradle。当它与库相关时,配置未正确声明。尝试:

configurations {
    fullDebugCompile
    fullReleaseCompile
    lightDebugCompile
    lightReleaseCompile
}

dependencies {
...
    fullDebugCompile project(path:":library", configuration:"fullDebug")
    fullReleaseCompile project(path:":library", configuration:"fullRelease")
    lightDebugCompile project(path:":library", configuration:"lightDebug")
    lightReleaseCompile project(path:":library", configuration:"lightRelease")
}

详细解释

gradle android 插件对应用程序和库使用不同的实现,分别称为 AppVariantLibraryVariant。有时,变体和构建类型在两种项目中的工作方式是不同的。在这种情况下,前段时间库总是在给定变体中以发布构建类型编译,这使得库项目不像应用程序那样灵活。

这就是为什么他们决定启用 publishNonDefault 选项并在 Android Studio 中引入对此类行为的支持,这样您就可以在应用程序的不同构建中使用不同构建的库,但您必须指定哪个构建使用哪个库。这就是让您明确声明 configurations 的原因。

Android 构建工具团队使用的约定名称是 {buildType}{flavor}TaskName,因此对于类路径配置,您必须使用相同的名称。

所有这些过程都有一个缺点,那就是如果您发布非默认依赖项,android 插件将确保在构建您的应用程序之前编译所有可能的库配置,因此构建时间可以增加一点(取决于库大小)