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

时间:2015-12-14 13:36:21

标签: android android-gradle android-support-library android-productflavors

我正在使用不同的 productFlavors 设置 Android库。 该库具有完整风格。文件设置正确:

$(document).ready(function(){ ... });主要班级 完整班级src/main/java/com/example/... 轻量级src/full/java/com/example/...

Android Studio正确理解了这一点并添加了src/light/java/com/example/...

问题(full)等依赖项按预期工作,但不是okhttp。使用appcompat-v7ViewPagerFragmentActivity的所有内容。我已经尝试将依赖项添加到RecyclerView但它也不起作用。 Android Studio无法解析依赖关系,导入无效,但ok fullCompileokhttp等等除外。

我已尝试过exoplayerInvalidate Cache/Restartclean Project,但都没有效果。

图书馆 Resync 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

1 个答案:

答案 0 :(得分:3)

您必须在app 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 Build Tools团队使用的约定名称为{buildType}{flavor}TaskName,因此对于类路径配置,您必须使用相同的名称。

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