Не удалось импортировать поддержку android v4 или v7 в библиотеке, используя productFlavors

Я создаю библиотеку Android с различными продуктами . В библиотеке есть свет и полный аромат. Файл настроен правильно:

src/main/java/com/example/... для основных классов
src/full/java/com/example/... для полных классов
src/light/java/com/example/... для легких классов

Android Studio правильно поняла это и добавила (full) полный аромат.

ВОПРОС: зависимости, такие как okhttp , работают как ожидалось, но не appcompat-v7 . Все, используя ViewPager , FragmentActivity , RecyclerView . Я попытался добавить зависимости к fullCompile но он тоже не работает. Зависимости не разрешены Android Studio, импорт не работает, кроме ok okhttp , exoplayer и так далее.

Я попробовал Invalidate Cache/Restart , clean 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

 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') } 

Вы должны объявить конфигурацию в графе приложения. Когда это связано с библиотекой, конфигурации не объявляются должным образом. Пытаться:

 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") } 

Долгое объяснение

Плагин android-плагин gradle использует различные реализации для приложения и библиотеки, например AppVariant и AppVariant . Иногда варианты вариантов и типов сборки различны в обоих проектах. В этом случае, когда-то библиотеки всегда были скомпилированы в стиле сборки выпуска в рамках данного варианта, что делало проекты библиотек не такими гибкими, как приложения.

Именно поэтому они решили включить параметр publishNonDefault и получить поддержку в Android Studio для такого поведения, поэтому вы можете использовать разные сборки библиотеки в разных сборках приложения, но вам нужно указать, какая сборка использует эту библиотеку. Именно по этой причине вы явно заявляете configurations .

Название соглашения, используемое командой Android Build Tools, – {buildType}{flavor}TaskName , поэтому для конфигурации пути к классам вы должны использовать одно и то же имя.

Весь этот процесс имеет недостаток, и если вы публикуете нестандартные зависимости, плагин android будет обеспечивать, чтобы все возможные конфигурации библиотеки были скомпилированы до того, как ваше приложение будет построено, поэтому время сборки может немного увеличиться (в зависимости от размера библиотеки )