it-roy-ru.com

Android studio - приложение с библиотечным проектом не удается собрать

У меня огромные проблемы при попытке создать проект моего приложения. У меня есть основной модуль приложения и модуль проекта библиотеки, как показано ниже:

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

Любые идеи о том, как это исправить?

29
Gyroscope

Когда Gradle создает проект библиотеки, он создает тип выпуска, даже если вы создаете тип отладки для своего основного приложения (это bug ). В вашем проекте библиотеки Proguard настроен для вашего типа сборки выпуска, а Proguard скрывает имена символов, делая их невидимыми для вашего приложения.

Поскольку вы управляете библиотечным кодом, лучше всего не запускать Proguard в вашей сборке библиотеки, а просто запускать ее для выпусков основного приложения. Это запутывает весь код, включая зависимости.

Если вы действительно хотите запутывать код библиотеки независимо, вам нужно установить правила Proguard, чтобы выставлять открытые символы библиотеки, DatePickerDialog равен единице.

68
Scott Barta

Просто явно говорит Gradle, что ваш библиотечный проект не должен быть минимизирован путем добавления/изменения раздела

Android/buildTypes/debug

файла build.gradle проекта вашей библиотеки, например, (minifyEnabled falseэто ключ):

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

Замечания:

Здесь я также даю указание явному gradle сделать отладочную сборку 'debug' (debuggable true).

0
Pascal