Android Studio - 应用与库项目构建失败

30

我在构建我的应用项目时遇到了巨大的困难。如下图所示,我有一个主应用程序模块和一个库项目模块:

Project Structure

下面是每个模块的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 Build-tools 版本为19
  • Gradle版本为1.8

你有什么想法如何解决这个问题吗?

2个回答

69
当Gradle构建库项目时,即使您正在为主应用程序构建调试类型,它也会构建发布类型(这是一个错误)。在库项目中,您已经为发布构建类型配置了Proguard,并且Proguard正在混淆符号名称,使它们对您的应用程序不可见。
由于您控制库代码,最好的方法是不要在库构建中运行Proguard,并仅在主应用程序的发布构建中运行它。它将混淆所有代码,包括依赖项。
如果您真的想独立混淆库代码,则需要设置Proguard规则以公开库的公共符号,其中之一是DatePickerDialog

0

只需明确告诉Gradle您的库项目不得被缩小,方法是添加/修改部分即可。

android/buildTypes/debug

在您的库项目的build.gradle文件中添加以下内容(minifyEnabled false是关键):
android {
...
    buildTypes {
        debug {
            debuggable true
            minifyEnabled false
        }
...
    }
...
}

注意:
在这里,我还明确指示Gradle使我的“debug”构建可调试(debuggable true)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接