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

标签 android gradle android-studio android-gradle-plugin

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

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 构建工具第 19 版
  • Gradle 1.8 版

关于如何解决这个问题的任何想法?

最佳答案

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

由于您控制库代码,因此最好不要在库构建中运行 Proguard,而只在主应用程序的发布构建中运行它。它将混淆所有代码,包括依赖项。

如果您真的想独立混淆库代码,则需要设置 Proguard 规则以公开库的公共(public)符号,DatePickerDialog 就是其中之一。

关于Android studio - 带有库项目的应用程序无法构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20117884/

相关文章:

android - 将Db值导出为XML文件

android - 在 Android/Gradle 中如何定义仅在构建特定 buildType/buildVariant/productFlavor (v0.10+) 时运行的任务

android - TimePickerDialog 自定义主题

java - fragment 中绘图应用程序的自定义 View InflateException

android - android studio 中的纵向到横向视频 View 和 Controller 重启问题

java - 如何从 Activity A 到 Activity B 显示seekBar值和选定的微调项目?

android - FCM 通知标题仍然是 "FCM Message"

php - 未找到 Android 跟踪代码管理器,因此不会使用

java - 调用java程序的Gradle脚本

android - 启用多索引的仪器测试随机失败