我在尝试构建我的应用项目时遇到了大麻烦。我有主app模块和库项目模块,如下所示:
这是每个模块的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不太自信,可能做了一些明显错误的事情。
一些额外信息:
有关如何解决此问题的任何想法?
答案 0 :(得分:68)
当Gradle构建库项目时,即使您正在为主应用程序构建调试类型(这是bug),它也会构建发布类型。在您的库项目中,您已为您的发布版本类型配置了Proguard,而Proguard正在混淆符号名称,使其对您的应用程序不可见。
由于您控制库代码,最好的办法是不在您的库构建中运行Proguard,而只是运行它以用于主应用程序的发布版本。它会混淆所有代码,包括依赖项。
如果你真的想独立地混淆库代码,你需要设置Proguard规则来公开库的公共符号,DatePickerDialog
是一个。
答案 1 :(得分:0)
只需明确通过添加/修改部分
android/buildTypes/debug
你的图书馆项目 build.gradle 这样的文件( minifyEnabled false 是关键):
android {
...
buildTypes {
debug {
debuggable true
minifyEnabled false
}
...
}
...
}
注意:
在这里,我还指示显式地 gradle使我的调试' build debuggable( debuggable true )。