Android studio - 具有库项目的应用程序无法构建

时间:2013-11-21 10:08:01

标签: android gradle android-studio android-gradle

我在尝试构建我的应用项目时遇到了大麻烦。我有主app模块和库项目模块,如下所示:

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 rev 19
  • Gradle版本1.8

有关如何解决此问题的任何想法?

2 个答案:

答案 0 :(得分:68)

当Gradle构建库项目时,即使您正在为主应用程序构建调试类型(这是bug),它也会构建发布类型。在您的库项目中,您已为您的发布版本类型配置了Proguard,而Proguard正在混淆符号名称,使其对您的应用程序不可见。

由于您控制库代码,最好的办法是不在您的库构建中运行Proguard,而只是运行它以用于主应用程序的发布版本。它会混淆所有代码,包括依赖项。

如果你真的想独立地混淆库代码,你需要设置Proguard规则来公开库的公共符号,DatePickerDialog是一个。

答案 1 :(得分:0)

只需明确通过添加/修改部分告诉gradle您的图书馆项目不得缩小

android/buildTypes/debug

你的图书馆项目 build.gradle 这样的文件( minifyEnabled false 是关键):

android {
...
    buildTypes {
        debug {
            debuggable true
            minifyEnabled false
        }
...
    }
...
}

注意:

在这里,我还指示显式地 gradle使我的调试' build debuggable( debuggable true )。