Android studio - 带有库项目的应用程序无法构建
Posted
技术标签:
【中文标题】Android studio - 带有库项目的应用程序无法构建【英文标题】:Android studio - App with library project fails to build 【发布时间】:2013-12-05 17:46:56 【问题描述】:我在构建我的应用项目时遇到了很大的麻烦。我有主应用程序模块和一个库项目模块,如下所示:
这是每个模块的 gradle.build:
主应用:
buildscript
repositories
mavenCentral()
dependencies
classpath 'com.android.tools.build:gradle:0.6.+'
apply plugin: 'android'
repositories
mavenCentral()
android
compileSdkVersion 19
buildToolsVersion '19.0.0'
defaultConfig
minSdkVersion 14
targetSdkVersion 19
buildTypes
release
runProguard true
proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
productFlavors
defaultFlavor
proguardFile 'proguard-rules.txt'
dependencies
compile 'com.android.support:support-v13:19.0.+'
compile 'com.google.android.gms:play-services:4.0.+'
compile project(':libraries:datetimepicker')
这个是图书馆项目的:
buildscript
repositories
mavenCentral()
dependencies
classpath 'com.android.tools.build:gradle:0.6.+'
apply plugin: 'android-library'
repositories
mavenCentral()
android
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig
minSdkVersion 14
targetSdkVersion 19
release
runProguard true
proguardFile 'proguard-rules.txt'
proguardFile getDefaultProguardFile('proguard-android-ptimize.txt')
dependencies
compile 'com.android.support:support-v4:19.0.+'
最后,这是项目 settings.gradle 文件。
include ':App', ':libraries:datetimepicker'
我能够成功地将包从库导入到我的应用程序代码并使用它们,但是当我尝试编译时,我得到以下信息:
Gradle: Execution failed for task ':App:compileDefaultFlavorDebug'.
> Compilation failed; see the compiler error output for details.
E:\blah\blah\MyClass.java
Gradle: error: cannot find symbol class DatePickerDialog
Gradle: error: package DatePickerDialog does not exist
Gradle: error: cannot find symbol class DatePickerDialog
Gradle: error: cannot find symbol class DatePickerDialog
Gradle: error: cannot find symbol variable DatePickerDialog
Gradle: error: method does not override or implement a method from a supertype
我已经尝试解决这个问题 3 天了,并且已经用尽了几乎所有我可以在这里找到的类似问题的解决方案。我对为 android 开发很有信心,对 gradle 没有那么自信,并且可能做了一些明显错误的事情。
一些额外的信息:
Android Studio v0.3.6 Android SDK 构建工具第 19 版 Gradle 1.8 版关于如何解决这个问题的任何想法?
【问题讨论】:
【参考方案1】:Gradle 构建库项目时,它会构建发布类型,即使您正在构建主应用程序的调试类型(这是 bug)。在您的库项目中,您为发布构建类型配置了 Proguard,并且 Proguard 混淆了符号名称,使它们对您的应用程序不可见。
由于您可以控制库代码,因此最好不要在库构建中运行 Proguard,而只在主应用程序的发布构建中运行它。它将混淆所有代码,包括依赖项。
如果你真的想独立混淆库代码,你需要设置 Proguard 规则来公开库的公共符号,DatePickerDialog
就是其中之一。
【讨论】:
第二段占据了我的一天。 非常感谢,我将 minifyEnabled 设置为 false,并构建成功 第二段是金 第二段节省时间 你是冠军!【参考方案2】:只是明确地告诉 gradle 你的库项目不能通过添加/修改部分来缩小
android/buildTypes/debug
你的库项目的 build.gradle 文件是这样的(minifyEnabled false 是关键):
android
...
buildTypes
debug
debuggable true
minifyEnabled false
...
...
注意:
在这里,我还明确指示 gradle 使我的“调试”构建可调试(debuggable true)。
【讨论】:
以上是关于Android studio - 带有库项目的应用程序无法构建的主要内容,如果未能解决你的问题,请参考以下文章
如何建立与 Android studio和 gradle android 库
多库项目中的 Android Studio proguard 处理
如何使用 Android Studio 和 gradle 构建一个 android 库?