J'ai écrit cet article avant. Comment gérer les dépendances d'applications Java qui ne peuvent pas être résolues avec Android Studio 3
La méthode de cet article n'était pas intelligente, j'ai donc trouvé un bon moyen de réessayer.
--Il existe un projet nommé MyApplication. --MyApplication a un module (application Android) appelé app. --MyApplication a un module (application Java) appelé purejava. (La dépendance ne peut pas être résolue en exécutant ce module seul)
Chaque build.gradle
ressemble à ceci
./MyApplication/purejava/build.gradle
./MyApplication/app/build.gradle
./MyApplication/build.gradle
Tout d'abord, ajoutez ʻapply plugin: 'idea'` à build.gradle du module que vous souhaitez appliquer. Cette fois, Gson est ajouté à titre d'exemple. En dehors de cela, il est automatiquement généré par défaut.
groovy:./MyApplication/purejava/build.gradle
apply plugin: 'java-library'
apply plugin: 'idea' //cette
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.google.code.gson:gson:2.8.2'
}
sourceCompatibility = "1.7"
targetCompatibility = "1.7"
Alternativement, il peut être appliqué à tous les modules à la fois en l'ajoutant à la racine build.gradle.
groovy:./MyApplication/build.gradle
allprojects {
apply plugin: 'idea'
}
Ensuite, créez la configuration d'application par défaut et ajoutez la tâche ** Exécuter la tâche Gradle ** à ** idée ** à ** Avant le lancement **.
Vous pouvez maintenant exécuter à partir d'ici avec les dépendances résolues. Bien sûr, si vous l'exécutez avec Debug, vous pouvez vous arrêter à un point d'arrêt.
Si vous utilisez Gson dans la classe appropriée du module purejava,
java:./MyApplication/purejava/src/main/com/example/MyClass.java
public class MyClass {
public MyClass() {
String jsonString = "{\"a\": 12345, \"b\": 67890}";
JsonObject jsonObject = new JsonParser().parse(jsonString).getAsJsonObject();
System.out.println("un est" + jsonObject.get("a"));
System.out.println("b est" + jsonObject.get("b"));
}
public static void main(String[] args) throws Exception {
new MyClass();
}
}
Heureux d'utiliser correctement
a est 12345
b est 67890
Synchroniser le projet avec les mises à jour Gradle Files **. Iml **.
En regardant .iml, par exemple, si Gson est dans des dépendances, un tel orderEntry est généré.
.iml
<orderEntry type="library" exported="" scope="PROVIDED" name="gson-2.8.2" level="project" />
Ce qui ne va pas ici, c'est scope =" PROVIDED "
.
En effet, le modifier manuellement en scope =" "
peut résoudre la dépendance sans avoir à effectuer la tâche d'idée ci-dessus.
Alors lancez ./gradlew idea
.
Après cela, si vous regardez .iml, il spécifie le fichier jar Gson avec le chemin complet et la dépendance est résolue.
Je pense qu'il y a un moyen d'implémenter une tâche dans .gradle qui modifie la portée en "", mais je n'ai pas compris alors j'ai abandonné.
Pour le moment, c'est très bien car vous pouvez facilement vous arrêter à un point d'arrêt, comme à l'époque d'Android Studio 2.x.
Puisque la tâche d'idée est exécutée à chaque fois, l'exécution est retardée d'un tempo.
Après tout, il semble que .iml ne sera pas mis à jour à moins que Sync Project with Gradle Files, j'ai donc également créé une version de Run Configuration sans tâche d'idée dans la tâche Run Gradle, et l'utilise généralement et manuellement ./ après Sync Vous voudrez peut-être exécuter gradlew idea
pour mettre à jour le fichier .iml.
Est-il possible d'exécuter des tâches supplémentaires pendant la synchronisation du projet avec des fichiers Gradle?
Recommended Posts