很久以前,Google Code票证被打开,因为Gradle插件不会将您是在进行调试构建还是发布构建传播到依赖的android库:
描述:
Gradle插件不会将调试版本或发布版本传播到依赖的android库。
版本信息:
渐变插件:0.3渐变:1.4
这是一个问题,尤其是当库的发布
配置阻止代码的版本或调试过程正常发生时(本机方法的红色突出显示,因为IDE在它们正常链接时不再找到,损坏Java逐步调试...)。
这在Google Code和Stack Overflow上进行了非常彻底的讨论,碰巧Kane O'Riley提出了一个非常有趣(且干净)的解决方法:
将其放入应用程序:依赖项{debugCompile project(路径:':custom_lib',配置:“libraryDebug”)releaseCompile project(路径:':custom_lib',配置:“libraryRelease”)}
和库的构建中。gradle add:defaultPublishConfig'release'PublishNonfault true productFlavors{library{}
我试过了,但我在Gradle同步时间收到了以下消息:
Error:Configuration with name 'libraryDebug' not found.
我只尝试了“debug
”和“release
”(这是我在lib中使用的构建配置名称),但结果是一样的。
有什么想法可以让这个有趣的解决方法发挥作用吗?(我正在运行Android Studio 2.0 beta 2)
附录:
>
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配置:
无论我使用什么步骤,Shlublu的解决方案都不适用于我。
经过大量挖掘,我们发现可以定义可用的配置(至少使用实验梯度),从而避免了为了修复所有错误而必须进行清理/重建。
在AS2中使用最新的gradle。1.我通过一个非常简单的依赖项内容解决了这个问题:
Lib的身材。gradle(使用实验gradle 0.7.0):
model {
android {
...
productFlavors {
create('all') {
...
}
}
publishNonDefault true
}
}
configurations {
allDebug
allRelease
}
应用程序的构建。gradle(使用标准gradle 2.1.0):
debugCompile project(path: ':lib', configuration: 'allDebug')
releaseCompile project(path: ':lib', configuration: 'allRelease')
我很确定,如果只使用调试/发布配置,则不需要库的gradle中的productFlavors,比如:
Lib的身材。gradle(使用实验gradle 0.7.0):
model {
...
}
configurations {
debug
release
}
应用程序的构建。gradle(使用标准gradle 2.1.0):
debugCompile project(path: ':lib', configuration: 'debug')
releaseCompile project(path: ':lib', configuration: 'release')
为了实现这一点,需要构建两个。gradle
在同步一次之前,不能同时修改文件。我必须遵循以下步骤:
>
第1步:修改lib的build.gradle
,正如Kane所说:
// "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
,正如Kane所说:
dependencies {
debugCompile project(path: ':custom_lib', configuration: "libraryDebug")
releaseCompile project(path: ':custom_lib', configuration: "libraryRelease")
}
第4步:Gradle同步。
所以这只是一个先更改库,然后在修改应用程序之前进行清理的问题。
我检查了由debug
和release
构建模式生成的APK,每个模式都包含正确的库变量,这与应用此解决方案之前不同,因此它确实有效(感谢凯恩!)。
问题内容: 我正在尝试建立一个共享库。让我们说libabc.so。它使用另一个.so文件,例如lib123.so(/ usr / local / lib中的一个lib)。现在我在我的应用程序中使用共享的liblibabc.so。说我的应用程序。我想知道我应该如何链接这些二进制文件?我不想直接将我的应用程序与lib123.so链接。my- app应该仅与libabc.so链接。我怎样才能做到这一点?
我试图将我编译的简单共享库(libhello.so)链接到我的本机C++代码中。库libhello.so文件是: 1。Get13.h 2.get13.cpp Android文件是: 1。myapplication/jni/android.mk 问题是,在gradle构建过程中,我在文件native-lib.cpp中得到了这个错误: 我使用android NDK包中包含的make_standalon
我正在尝试链接一个名为libtest lib的预编译共享库文件。所以这是我在CMakeLists的底部所拥有的。txt: 如上所述,我得到以下错误: 如果我注释掉add_library行,我会得到以下结果: 在库中链接时,似乎绝对需要源文件(.c、cpp等)。但我如何在一个。那档案呢?这些文档对target_link_库()做了如下介绍: 被命名的必须是由add_executable()或add_
问题内容: 我正在尝试使用集成使用我的应用程序编写的第三方库。我已经为测试编写了所有的python代码。我很难找到设置此示例的方法。 我有一个手动创建的文件。第三方给了我a和a 。据我所知,没有其他依赖项。有人可以提供使用和进行设置的示例吗? 谢谢 问题答案: 当然可以! (在下文中,我假设你已经知道如何处理之间和交互和,如果这不是完全的情况下,只问我会开发部分以及) 示例(来自我的C ++项目,
#include <hiredis/hiredis.h> int main(void) { char a[1026] = {0}; redisContext *c = NULL; void *reply = NULL; memset(a, 'a', (sizeof(a) - 1)); c = redisConnec
问题内容: 如何在gcc中静态链接共享库函数? 问题答案: 参考: http://www.linuxquestions.org/questions/linux-newbie-8/forcing-static- linking-of-shared- libraries-696714/ http://linux.derkeiler.com/Newsgroups/comp.os.linux.develo