无法使用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
。 一切都使用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')
}
您必须在应用程序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插件为应用程序和库使用不同的实现,分别称为AppVariant
和LibraryVariant
。 有时候,变体和构建类型的工作方式在这两类项目中都有所不同。 在这种情况下,前一段时间,库总是在给定变体中以发布构建类型编译,这使得库项目不如应用程序那么灵活。
这就是为什么他们决定启用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?