Подтвердить что ты не робот

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

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

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')
}

И это для библиотеки Project:

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.+'
}

Наконец, это файл настроек проекта.

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
  • Инструменты SDK для SDK версии 19
  • Gradle версия 1.8

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

android/buildTypes/debug

вашего проекта build.gradle вашего проекта библиотеки (например, minifyEnabled false):

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

Примечание:

Здесь я также явно укажу gradle, чтобы сделать мою отладку debugable (debuggable true).