it-swarm.com.de

Android Studio - App mit Bibliotheksprojekt kann nicht erstellt werden

Ich habe massive Probleme beim Versuch, mein App-Projekt erstellen zu lassen. Ich habe das Haupt-App-Modul und ein Bibliotheksprojekt-Modul wie folgt:

Project Structure

Dies ist das gradle.build für jedes der Module:

Haupt-App:

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

Und dies ist für das Bibliotheksprojekt:

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

Schließlich ist dies die Datei Projekteinstellungen.gradle.

include ':App', ':libraries:datetimepicker'

Ich kann erfolgreich Pakete aus der Bibliothek in meinen App-Code importieren und verwenden. Wenn ich jedoch versuche zu kompilieren, bekomme ich Folgendes:

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

Ich habe seit 3 ​​Tagen versucht, das Problem zu beheben, und ich habe fast alle ähnlichen Fragestellungen erschöpft, die ich hier finden konnte. Ich bin ziemlich zuversichtlich bei der Entwicklung für Android, nicht so zuversichtlich mit Gradle und habe wahrscheinlich etwas offensichtlich falsch gemacht.

Einige zusätzliche Infos:

  • Android Studio v0.3.6
  • Android SDK Build-Tools Version 19
  • Gradle-Version 1.8

Irgendwelche Ideen, wie man das beheben kann?

29
Gyroscope

Wenn Gradle das Bibliotheksprojekt erstellt, erstellt es den Release-Typ, auch wenn Sie den Debug-Typ für Ihre Hauptanwendung erstellen (dies ist ein bug ). In Ihrem Bibliotheksprojekt haben Sie Proguard für Ihren Release-Build-Typ konfiguriert, und Proguard verschleiert die Symbolnamen und macht sie für Ihre App unsichtbar.

Da Sie den Bibliothekscode steuern, ist es am besten, Proguard nicht in Ihrem Bibliotheksaufbau auszuführen, sondern nur für Release-Builds Ihrer Hauptanwendung. Dadurch wird der gesamte Code einschließlich der Abhängigkeiten verschleiert.

Wenn Sie den Bibliothekscode wirklich unabhängig verschleiern möchten, müssen Sie die Proguard-Regeln einrichten, um die öffentlichen Symbole der Bibliothek sichtbar zu machen, wobei DatePickerDialog eins ist.

68
Scott Barta

Nur explizit teilt gradle mit, dass Ihr Bibliotheksprojekt nicht minimiert werden darf durch Hinzufügen/Ändern eines Abschnitts

Android/buildTypes/debug

build.gradle -Datei Ihres Bibliotheksprojekts wie folgt (minifyEnabled falseist der Schlüssel):

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

Hinweis:

Hier weise ich auch explizit gradle an, meinen Debug-Build 'debugable' (debuggable true) zu machen.

0
Pascal