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

我正在使用不同的productFlavors设置Android库 。 该图书馆有一个轻松充满味道。 该文件设置正确:

src/main/java/com/example/...为主类
src/full/java/com/example/...为完整的类
src/light/java/com/example/...用于轻量级类

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

问题:okhttp这样的依赖okhttp按预期工作,但不是appcompat-v7 。 一切都使用ViewPagerFragmentActivityRecyclerView 。 我已经尝试将依赖关系添加到fullCompile但它也不起作用。 Android Studio无法解决依赖关系,导入不起作用,除了ok okhttpexoplayer等。

我试过Invalidate Cache/Restartclean ProjectResync gradle ,没有工作。

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插件将确保所有可能的库配置都是在应用程序构建之前编译的,所以构建时间会增加一点(取决于库的大小)

链接地址: http://www.djcxy.com/p/31061.html

上一篇: Fail to import android support v4 or v7 in library using productFlavors

下一篇: How to sort filter items in DevExtreme data grid's headerFilter?