2013-06-02 2 views
0

J'ai créé un projet simple dans Android Studio pour l'essayer. Je vais accepter que pour le moment je dois avoir mon code build.gradle correspondant à ma configuration IDE, mais comme je suis nouveau sur IntelliJ et Gradle, je me bats.Problème de déploiement de la bibliothèque Android-Studio/Gradle

Le projet a été créé avec une activité vide par défaut. J'ai créé un simple, très Noddy, Voir classe donnée ci-dessous:

package com.example.view; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.View; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

/** 
* Created by steve on 02/06/13. 
*/ 
public class GraphView extends View { 

    /** The system logger. */ 
    protected transient final Logger log; 

    public GraphView(Context context) { 
     super(context); 

     // Instantiate the system logger. 
     log = LoggerFactory.getLogger(getClass()); 
    } 

    public GraphView(Context context, AttributeSet attrs) { 
     super(context, attrs); 

     // Instantiate the system logger. 
     log = LoggerFactory.getLogger(getClass()); 
    } 

    public GraphView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 

     // Instantiate the system logger. 
     log = LoggerFactory.getLogger(getClass()); 
    } 
} 

Pour le compiler/parser dans l'IDE j'ai ajouté les bibliothèques JAR Logback dans le même répertoire libs l'androïde-support-v4. fichier jar est situé. Une modification rapide de la structure du projet et tout semble fonctionner correctement. Dans l'éditeur de l'IDE, je peux voir les méthodes sur les classes Logger et LoggerFactory.

Pour déployer l'application noddy à mon Nexus 4 J'ai modifié le fichier build.gradle pour faire référence également les bibliothèques:

buildscript { 
    repositories { 
     maven { url 'http://repo1.maven.org/maven2' } 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.4' 
    } 
} 
apply plugin: 'android' 

dependencies { 
    compile files('libs/android-support-v4.jar') 
    compile files('libs/logback-android-1.0.10.2.jar') 
    compile files('libs/slt4j-api-1.7.5.jar') 
} 

android { 
    compileSdkVersion 17 
    buildToolsVersion "17.0.0" 

    defaultConfig { 
     minSdkVersion 7 
     targetSdkVersion 16 
    } 
} 

Il construit très bien, il déploie sur le téléphone, mais quand la valeur par défaut activité dans démarré je reçois une erreur d'exécution:

Caused by: java.lang.NoClassDefFoundError: org.slf4j.LoggerFactory 
     at com.example.view.GraphView.<init>(GraphView.java:29) 
     ... 25 more 

Qu'est-ce que j'ai manqué?

Merci beaucoup à l'avance.

Steve

+0

Je vois ce qui suit: compiler des fichiers ('libs/slt4j-api-1.7.5.jar') Ne devrait-il pas être libs/slf4j? – TiGer

Répondre

2

a trouvé la réponse here. Après l'ajout d'une bibliothèque, vous devez exécuter ./gradlew clean dans la racine du projet avant de créer.

0

MISE À JOUR

Vous avez encore probablement une sorte de faute de frappe là-dedans.

J'ai récupéré le SDK android et essayé de compiler un simple projet Hello world avec votre fichier build et cela fonctionne. Cela implique que vous pouvez avoir une faute de frappe, un fichier jar manquant ou quelque chose comme ça.

Assurez-vous que le fichier jars est présent avec les noms corrects aussi!

Ci-dessous le build.gradle (compiler des fichiers est utilisé qu'une seule fois, mais cela ne devrait pas d'importance, je ne l'utilise généralement le système de fichiers sans dépôt distant):

buildscript { 
     repositories { 
       mavenCentral() 
     } 
     dependencies { 
       classpath 'com.android.tools.build:gradle:0.4' 
     } 
} 

apply plugin: 'android' 

dependencies { 
    compile files('libs/android-support-v4.jar', 'libs/logback-android-1.0.10.2.jar', 'libs/slf4j-api-1.7.5.jar') 
} 

android { 
    compileSdkVersion 17 
    buildToolsVersion "17.0.0" 

    defaultConfig { 
     minSdkVersion 7 
     targetSdkVersion 16 
    } 
} 

pourrait ce soit slf4j-api-1.7.5.jar au lieu de slt4j-api-1.7.5.jar?

Je pense que vous avez une faute de frappe dans votre section de dépendances.

+0

J'aurais pensé que c'était le problème. Mais c'était le nom du fichier JAR qui avait la faute de frappe. J'ai corrigé cela et le problème demeure. Si je commente les bibliothèques de la 'build.Gradle, alors le code ne compile pas avec Gradle, donc je conclus que pour une raison quelconque la construction gradle ne tire pas dans ces fichiers JAR un temps de paquet seulement au moment de la compilation. – Dobbo

+0

Merci d'avoir regardé cela. Avez-vous essayé d'exécuter l'application Hello World? Le problème que je vois est qu'il échoue à RUNTIME! Et je l'ai vu avec deux projets, en utilisant un emplacement différent pour la bibliothèque, donc je suis sûr qu'il n'y a plus de faute de frappe. – Dobbo

+0

Dans ce cas, je ne sais pas. Je n'ai aucun appareil Android ... Bonne chance. – rimero