J'ai le problème suivant. Quand je veux utiliser un pot local dans mes dépendances Gradle.
Si je viens d'ajouter:
compile files('libs/PushLinkAndroid-5.3.0.jar')
Ça ne marche pas
C:\Utilisateurs\Kai\AndroidStudioProjects\ProjectA\app\src\main\Java\de\xyz\xxx\projecta\BaseActivity.Java: 21: erreur: package com.pushlink.Android n’existe pas Import com.pushlink.Android.PushLink;
Remarque: Certains fichiers d'entrée utilisent ou remplacent une API obsolète. Remarque: Recompilez avec -Xlint: obsolète pour plus de détails. 4 erreurs
ÉCHOUÉ
ECHEC: La construction a échoué avec une exception.
Ce qui s'est mal passé: L'exécution a échoué pour la tâche ': app: compileDebugJava'.
La compilation a échoué. voir la sortie d'erreur du compilateur pour plus de détails.
Essayez: Exécutez l’option --stacktrace pour obtenir le suivi de la pile. Exécutez-la avec l'option --info ou> - debug pour obtenir davantage de sorties de journal.
ÉCHEC DE CONSTRUCTION
Temps total: 6,543 secondes
Si j'ajoute le chemin absolu au pot, le projet est compilé et tout fonctionne:
compile files('C:/Users/Kai/AndroidStudioProjects/ProjectA/libs/PushLinkAndroid-5.3.0.jar')
On dirait qu'il y a quelque chose qui ne va pas avec le sentier, mais comment cela pourrait-il se passer lorsque le sentier absolu fonctionne bien?
EDIT: Build.gradle
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "de.xyz.kai.migraenebook"
minSdkVersion 16
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
//compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.Android.support:appcompat-v7:22.2.0'
compile 'com.jakewharton:butterknife:7.0.1'
compile project(':volley')
debugCompile 'im.dino:dbinspector:3.2.1@aar'
compile 'de.hdodenhof:circleimageview:1.3.0'
compile 'com.Android.support:recyclerview-v7:+'
//compile files('C:/Users/Kai/AndroidStudioProjects/MigraeneBook/libs/PushLinkAndroid-5.3.0.jar')
compile files('libs/PushLinkAndroid-5.3.0.jar')
//compile files('libraries/PushLinkAndroid-5.3.0.jar')
//compile files('C:/Users/Kai/AndroidStudioProjects/MigraeneBook/libraries/PushLinkAndroid-5.3.0.jar')
}
NOTE: J'ai essayé différents dossiers, le PushLink.jar est dans "libs" et "libraries". La commande que j'utilise ou commente n'a pas d'importance. Le chemin absolu fonctionne, le relatif non.
Essayez ceci, il inclurait tous les JAR du référentiel local, de sorte que vous n’auriez pas à le spécifier à chaque fois:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
En outre, vous devez savoir que lors du référencement d’un fichier via
files("relative/path/to/a.jar")
path est évalué par rapport au buildscript dans lequel se trouve cet extrait. Ainsi, lorsque votre fichier build.gradle
se trouve dans /a/project/build.gradle
, le fichier jar doit alors se trouver dans /a/project/relative/path/to/a.jar
. Dans une construction en dégradé multiprojets, vous pouvez placer le jar dans un dossier relatif au projet racine et le référencer dans tous les sous-projets via
rootProject.files("relative/to/root/a.jar")
Prenez donc cela en compte et vérifiez à nouveau si vos paramètres de gradle sont corrects.
Tout d’abord, à mon avis, l’ajout de bibliothèques manuelles - s’il est possible d’éviter cela - est une mauvaise pratique, car vous devez gérer vous-même la bibliothèque et le chemin.
J'ai jeté un coup d'œil au repo Maven et il semble qu'ils n'aient pas cette lib spécifique ici. C'est ce à quoi je m'attendrais:
compile('com.anypackage.name.PushLinkAndroid-5.3.0.jar')
Comme ce n’est probablement pas votre volonté que celle de l’équipe de développeurs de https://www.pushlink.com/changelog.xhtml , rien ne peut l’aider.
Passons maintenant à votre problème: Avez-vous commencé votre construction avec --stacktrace?
D'après ce que je peux en tirer
compile files('C:/Users/Kai/AndroidStudioProjects/ProjectA/libs/PushLinkAndroid-5.3.0.jar')
vous utilisez un système Windows. Ceci est gênant à certains moments parce que Gradle s'attend à ce que les chemins ressemblent à ceci:
C:/Users/Kai/AndroidStudioProjects/ProjectA/libs/PushLinkAndroid-5.3.0.jar
Mon hypothèse est que gradle fait quelque chose comme ceci quand vous ne spécifiez pas le chemin vous-même:
C:\Users\Kai\AndroidStudioProjects\ProjectA\libs/PushLinkAndroid-5.3.0.jar
Vous pouvez vérifier le comportement avec cette tâche Gradle:
task printBuildDir() {
def buildDir = "${buildDir}"
println buildDir
def fixedDir = buildDir.replaceAll('\\\\', '/')
println fixedDir
}
Si ma supposition est correcte, vous avez plusieurs choix:
La spécification de chaque nom de fichier JAR est également une possibilité.
dependencies {
compile files('lib/dependency_one.jar', 'lib/dependency_two.jar')
}
Ceci indiquera à Gradle d'inclure dependency_one.jar et dependency_two.jar lors de la compilation. Pour confirmer que tous les JAR requis inclus dans la configuration de la compilation, vous pouvez créer cette tâche auxiliaire,
task listJars << {
configurations.compile.each { File file -> println file.name }
}
Puis lance-le
$ gradle -q listJars
hibernate-core-3.6.7.Final.jar
antlr-2.7.6.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-3.2.0.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
jta-1.1.jar
slf4j-api-1.6.1.jar
Lire la suite sur https://docs.gradle.org/current/userguide/declaring_dependencies.html
Votre dossier libs est égaré. Vous devez le mettre sous MigraeneBook/app
, pas directement sous MigraeneBook
.
Si vous appelez le chemin du schéma d'URL, vous pouvez utiliser cet exemple:
def path = "file://${projectDir}/ojdbc6.jar"
Mon problème était que je l'ai copié à partir d'Android Studio IDE lui-même, de même que commande + c sur les bibliothèques d'un projet et commande + v sur les bibliothèques de l'autre. Pour une raison quelconque, AS produit des fichiers jar de taille zéro ... Mais bon, j'ai appris de nouvelles choses sur Gradle :)