我在构建我的应用项目时遇到了很大的麻烦。我有主应用程序模块和一个库项目模块,如下所示:
这是每个模块的 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 版
关于如何解决这个问题的任何想法?
最佳答案
Gradle 构建库项目时,它构建的是发布类型,即使您正在构建主应用程序的调试类型(这是 bug)。在您的库项目中,您为发布构建类型配置了 Proguard,并且 Proguard 混淆了符号名称,使它们对您的应用程序不可见。
由于您控制库代码,因此最好不要在库构建中运行 Proguard,而只在主应用程序的发布构建中运行它。它将混淆所有代码,包括依赖项。
如果您真的想独立混淆库代码,则需要设置 Proguard 规则以公开库的公共(public)符号,DatePickerDialog
就是其中之一。
关于Android studio - 带有库项目的应用程序无法构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20117884/