【问题标题】:Android studio - App with library project fails to buildAndroid studio - 带有库项目的应用程序无法构建
【发布时间】:2013-12-05 17:46:56
【问题描述】:

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

这是每个模块的 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 版

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 第二段占据了我的一天。
    • 非常感谢,我将 minifyEnabled 设置为 false,并构建成功
    • 第二段是金
    • 第二段节省时间
    • 你是冠军!
    【解决方案2】:

    只是明确地告诉 gradle 你的库项目不能通过添加/修改部分来缩小

    android/buildTypes/debug
    

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

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

    注意:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      相关资源
      最近更新 更多