gradle c'est - Studio Android-L'application avec le projet de bibliothèque ne parvient pas à construire




'implementation' 'api'. (3)

Lorsque Gradle construit le projet de bibliothèque, il construit le type de publication 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 masque les noms des 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 votre version de bibliothèque et de l'exécuter pour les versions de votre application principale. Il va masquer tout le code, y compris les dépendances.

Si vous voulez vraiment brouiller 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 un.

J'ai énormément de difficulté à 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:

Ceci 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 la bibliothèque Projet:

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, ceci est le fichier settings.gradle du projet.

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

Je suis capable d'importer avec succès des paquets de la bibliothèque dans mon code d'application et de les utiliser, mais lorsque j'essaie de compiler, j'obtiens les éléments suivants:

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'ai essayé de résoudre ce problème pendant 3 jours maintenant et j'ai épuisé presque toutes les solutions aux questions similaires que je pouvais trouver ici. Je suis assez confiant avec le développement pour Android, pas si confiant avec Gradle et j'ai probablement fait quelque chose de faux.

Quelques informations supplémentaires:

  • Android Studio v0.3.6
  • Android SDK Build-tools rev 19
  • Gradle version 1.8

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


Il suffit de dire explicitement que votre projet de bibliothèque ne doit pas être minifié par l'ajout / modification de section

android/buildTypes/debug

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

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

Remarque:

Ici, j'instruis aussi explicitement gradle pour que mon "debug" compile le debuggable ( debuggable true ).


Vous pouvez obtenir toutes les informations relatives à l'affichage en utilisant la classe Display Metrics http://developer.android.com/reference/android/util/DisplayMetrics.html

vous auriez besoin

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

Après cela, toutes les informations requises seront présentes dans votre objet de mesure.

L'autre option est d'appeler

getActivity().getWindowManager().getDefaultDisplay().getWidth()
getActivity().getWindowManager().getDefaultDisplay().getHeight()




android gradle android-studio android-gradle