web-dev-qa-db-fra.com

Android studio - Echec de la création d'une application avec un projet de bibliothèque

J'ai des difficultés énormes à essayer de construire mon projet d'application. J'ai le module principal de l'application et un module de projet de bibliothèque, comme indiqué ci-dessous:

Project Structure

C'est le gradle.build pour chacun des modules:

App principale:

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

Et celui-ci est pour le projet de bibliothèque:

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

Enfin, il s’agit du fichier settings.gradle du projet.

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

Je parviens à importer des packages de la bibliothèque dans mon code d'application et à les utiliser. Toutefois, lorsque j'essaie de compiler, les éléments suivants sont disponibles:

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

J'essaie de résoudre ce problème depuis 3 jours maintenant et j'ai épuisé presque toutes les solutions de questions similaires que je pouvais trouver ici. Je suis assez confiant avec le développement pour Android, pas tellement confiant avec Gradle et ai probablement fait quelque chose de manifestement faux.

Quelques infos supplémentaires:

  • Android Studio v0.3.6
  • Kit de développement Android SDK rév 19
  • Gradle version 1.8

Des idées pour résoudre le problème?

29
Gyroscope

Lorsque Gradle crée le projet de bibliothèque, il crée le type de version même si vous créez le type de débogage pour votre application principale (il s’agit d’un bug ). Dans votre projet de bibliothèque, Proguard est configuré pour votre type de version, et Proguard obscurcit les noms de symboles, les rendant invisibles pour votre application.

Puisque vous contrôlez le code de la bibliothèque, la meilleure chose à faire est de ne pas exécuter Proguard dans la construction de votre bibliothèque, mais simplement de l'exécuter pour les versions de votre application principale. Cela obscurcira tout le code, y compris les dépendances.

Si vous voulez vraiment masquer le code de la bibliothèque de manière indépendante, vous devez configurer les règles Proguard pour exposer les symboles publics de la bibliothèque, DatePickerDialog étant l'un d'entre eux.

68
Scott Barta

Juste explicitement indique à Gradle que votre projet de bibliothèque ne doit pas être minifié en ajoutant/modifiant une section

Android/buildTypes/debug

du fichier build.gradle de votre projet de bibliothèque comme ceci (minifyEnabled falseest la clé):

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

Remarque:

Ici, j'instruis aussi explicitement gradle pour rendre ma construction 'debug' debugable (debuggable true).

0
Pascal