很久以前,a Google Code ticket被打开了,因为Gradle插件不会传播,无论你是在为一个依赖的android库做一个调试版本还是一个发布版本:
说明:
无论您是在做Gradle插件,Gradle插件都不会传播 调试构建或发布构建到依赖的android库。版本信息:
gradle插件:0.3 gradle:1.4
这是一个问题,尤其是当库的release
配置阻止代码版本或调试过程正常发生时(本机方法的红色突出显示,因为IDE在链接时不再找到它们)通常,破旧的Java逐步调试......)。
在Google代码和Stack Overflow上已经对此进行了彻底的讨论,Kane O'Riley a really interesting (and clean) workaround提出:
把它放在你的应用中:
dependencies { debugCompile project(path: ':custom_lib', configuration: "libraryDebug") releaseCompile project(path: ':custom_lib', configuration: "libraryRelease") }
并在你的图书馆的build.gradle中添加:defaultPublishConfig 'release' publishNonDefault true productFlavors { library { } }
我试了一下,但是我在Gradle同步时有以下消息:
Error:Configuration with name 'libraryDebug' not found.
我尝试过" debug
"和" release
" (这是我在lib中使用的构建配置名称)但结果是一样的。
有什么想让这个有趣的解决方法有效吗? (我正在运行Android Studio 2.0 beta 2)
附录:
我的lib build.gradle
文件(包括我目前正在使用的丑陋的解决方法):
apply plugin: 'com.android.library'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
// THIS IS WHERE I INSERT THE THREE STATEMENTS PERTAINING
// TO THE LIB FROM Kane O'Riley'S WORKAROUND ABOVE
defaultConfig {
minSdkVersion 16
targetSdkVersion 21
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
buildTypes {
/*
release {
// UNCOMMENT BEFORE MAKING AN ACTUAL RELEASE !!! (duh...)
ndk {
moduleName "mylib"
ldLibs "log"
cFlags "-fvisibility=hidden -g0 -DSHLUBLU_ACTUAL_RELEASE -O3"
}
buildConfigField "boolean", "actualRelease", "true"
debuggable false
jniDebuggable false
minifyEnabled false
}
*/
release {
// COMMENT THIS WHOLE BLOCK BEFORE MAKING AN ACTUAL RELEASE !!!
// (this is a copy of the "debug" config below... did I say 'duh' ?)
ndk {
moduleName "mylib"
ldLibs "log"
cFlags "-g"
}
buildConfigField "boolean", "actualRelease", "false"
debuggable true
jniDebuggable true
minifyEnabled false
}
debug {
// IF ONLY THIS ONE WAS USED WHEN DEBUGGING!
// (Only the IDE uses that, but the release build is actually linked,
// see https://code.google.com/p/android/issues/detail?id=52962 )
ndk {
moduleName "mylib"
ldLibs "log"
cFlags "-g"
}
buildConfigField "boolean", "actualRelease", "false"
debuggable true
jniDebuggable true
minifyEnabled false
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
我的项目build.gradle
档案
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 16
targetSdkVersion 21
versionCode 27
versionName "1.4"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
buildTypes {
release {
debuggable false
jniDebuggable false
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-shlublu.txt'), 'proguard-rules.pro'
}
debug {
debuggable true
jniDebuggable true
minifyEnabled false
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':mylib')
// THE LINE ABOVE IS WHAT I REPLACE BY Kane O'Riley's WORKAROUND
// DESCRIBED AT THE BEGINNING OF THIS POST
}
我的Gradle配置:
答案 0 :(得分:8)
要实现此功能,必须同时修改两个build.gradle
文件不,然后才能同步一次。我必须遵循以下步骤:
第1步:修改lib的build.gradle
,正如凯恩所说:
// "android" section:
defaultPublishConfig 'release'
publishNonDefault true
productFlavors {
library {
/* This strange empty flavour is actually needed
for the step 3 to be successful */
}
}
第2步:清理/重建
第3步:修改应用的build.gradle
,同时凯恩说:
dependencies {
debugCompile project(path: ':custom_lib', configuration: "libraryDebug")
releaseCompile project(path: ':custom_lib', configuration: "libraryRelease")
}
第4步:Gradle sync。
因此,只需首先更改库,然后在修改应用程序之前进行清理。
我检查了由debug
和release
构建模式生成的APK,并且每个都包含lib的正确变体,与应用此变通方法之前不同,所以它确实有效(感谢Kane! )。
答案 1 :(得分:1)
无论我使用什么步骤,Shlublu的解决方案对我都不起作用。
经过多次挖掘,发现可以定义可用的配置(至少使用实验gradle),这反过来避免了必须清理/重建以避免修复所有错误。
使用最新的gradle和AS2.1,我能够通过一个非常简单的依赖内容来解决这个问题:
Lib的build.gradle(使用实验gradle 0.7.0):
model {
android {
...
productFlavors {
create('all') {
...
}
}
publishNonDefault true
}
}
configurations {
allDebug
allRelease
}
App的build.gradle(使用标准gradle 2.1.0):
debugCompile project(path: ':lib', configuration: 'allDebug')
releaseCompile project(path: ':lib', configuration: 'allRelease')
我非常确定如果仅使用调试/发布配置,则不需要lib的gradle中的productFlavors,如下所示:
Lib的build.gradle(使用实验gradle 0.7.0):
model {
...
}
configurations {
debug
release
}
App的build.gradle(使用标准gradle 2.1.0):
debugCompile project(path: ':lib', configuration: 'debug')
releaseCompile project(path: ':lib', configuration: 'release')