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

Gyr*_*ope 29 android gradle android-studio android-gradle-plugin

我在尝试构建我的应用程序项目时遇到了大麻烦.我有主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')
}
Run Code Online (Sandbox Code Playgroud)

这个是图书馆项目:

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.+'
}
Run Code Online (Sandbox Code Playgroud)

最后,这是项目settings.gradle文件.

include ':App', ':libraries:datetimepicker'
Run Code Online (Sandbox Code Playgroud)

我能够成功地将库中的包导出到我的应用程序代码并使用它们,但是当我尝试编译时,我得到以下内容:

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
Run Code Online (Sandbox Code Playgroud)

我一直试图解决这个问题3天,并且已经用尽了我在这里找到的几乎所有类似的问题解决方案.我非常有信心为Android开发,对gradle不太自信,可能做了一些明显错误的事情.

一些额外的信息:

  • Android Studio v0.3.6
  • Android SDK Build-tools rev 19
  • Gradle版本1.8

有想法该怎么解决这个吗?

Sco*_*rta 68

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

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

如果您真的想要独立地混淆库代码,则需要设置Proguard规则以公开库的公共符号DatePickerDialog.