Wie füge ich eine Bibliothek (android-support-v7-appcompat) in IntelliJ IDEA hinzu?


68

Ich habe ein Projekt erstellt, die Ressourcendateien in die Projektbibliothek kopiert und sie der Projektstruktur im vorgeschriebenen Stil hinzugefügt Theme.AppCompat. Ohne Fehler kompiliert, aber wenn Sie den Abstieg starten Ausnahme:

08-03 00:50:00.406: ERROR/AndroidRuntime(4055): FATAL EXCEPTION: main
        java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$styleable
        at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:98)
        at android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.java:58)
        at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:98)
        at com.example.SampleMetrRost.CentralActivity.onCreate(CentralActivity.java:12)
        at android.app.Activity.performCreate(Activity.java:4636)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1051)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1924)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1985)
        at android.app.ActivityThread.access$600(ActivityThread.java:127)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1151)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4476)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:816)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:583)
        at dalvik.system.NativeStart.main(Native Method)

Hilf mir bitte. Habe heute den ganzen Tag verbracht.


2
Wenn Sie auf dasselbe Problem gestoßen sind , überprüfen Sie stackoverflow.com/a/18916738/183575 auf eine einfache und saubere Lösung.
RedGlyph


Antworten:


83

Ohne Gradle ( Klicken Sie hier für die Gradle-Lösung )

  1. Erstellen Sie ein Support-Bibliotheksprojekt .

  2. Importieren Sie Ihr Bibliotheksprojekt aus dem Eclipse-Projekt in Intellij (dieser Schritt gilt nur, wenn Sie Ihre Bibliothek in Eclipse erstellt haben).

  3. Klicken Sie mit der rechten Maustaste auf das Modul und wählen Sie Moduleinstellungen öffnen.

  4. Richten Sie die Bibliotheken der v7-JAR-Datei ein Richten Sie die Bibliotheken der v7-JAR-Datei ein

  5. Setup-Bibliotheksmodul von v7 Setup-Bibliotheksmodul von v7

  6. Richten Sie die Abhängigkeit des App-Moduls vom v7-Bibliotheksmodul ein Richten Sie die Abhängigkeit des App-Moduls vom v7-Bibliotheksmodul ein


Sehr, sehr danke, sehr hilfreich.
Alex Malkov

Das hat mir mindestens ein paar Stunden gespart. Vielen Dank!
Maciej Swic

3
Könnten Sie etwas näher erläutern, wie Sie zu Schritt 5 gelangen? Ich wäre sehr dankbar ... Danke!
Andreas Wong

@ SiGanteng Schritt 5 wird tatsächlich automatisch ausgeführt, wenn Sie Schritt 1 & 2
Populus

113

Verwenden von Gradle

Wenn Sie Gradle verwenden, können Sie es als compileAbhängigkeit hinzufügen .

Anleitung

  1. Stellen Sie sicher, dass Sie das Android Support RepositorySDK-Paket installiert haben. Android Studio erkennt dieses Repository automatisch während des Erstellungsprozesses (nicht sicher über einfaches IntelliJ).

    Android Support Repository

  2. Fügen Sie die Abhängigkeit zu hinzu {project}/build.gradle

    dependencies {
        compile 'com.android.support:appcompat-v7:+'
    }
    
  3. Klicken Sie auf die Sync Project with Gradle FilesSchaltfläche.

BEARBEITEN : Diese Anweisungen finden Sie anscheinend in der Dokumentation unter Adding libraries with resources -> Using Android Studio.


3
Danke, aber ich benutze Gradle nicht. Ich habe kein Android Studio I-Programm in der IntelliJ IDEA
Alex Malkov

6
Ich habe dies meistens hinzugefügt, falls jemand anderes Ihre Frage gefunden und Gradle verwendet hat. Dies sollte funktionieren, wenn jemand die Android-Plugins für IntelliJ hat und Gradle verwendet.
Austyn Mahoney

Danke fürs Hinzufügen. Haben Sie jemals die Support-Bibliothek zu einem Android-Bibliotheksprojekt hinzugefügt und versucht, eine App abhängig vom Android-Bibliotheksprojekt auszuführen? Ich erhalte beim Kompilieren immer eine "bereits hinzugefügte" Ausnahme. Ich weiß nicht warum - es wird nur im Bibliotheksprojekt hinzugefügt.
Eggman87

Für die Aufzeichnung: Es funktioniert genauso mit einfachem IntelliJ. Sie müssen nur "Projekt erstellen", sobald Sie die Installation des "Android Support Repository" abgeschlossen haben.
Jpkrohling

1
@ Eggman87 Ich weiß, dass dies spät ist, aber versuchen Sie es com.android.support:support-v4:+in Ihrem Bibliotheksprojekt. Dies weist es an, die Version zu verwenden, die das Projekt verwendet.
Austyn Mahoney

10

Mit Maven

Zunächst sollten Sie Android-Bibliotheken mit Maven Android SDK Deployer in Ihrem lokalen Maven-Repository installieren

Dann können Sie Ihrem Pom folgende Abhängigkeit hinzufügen:

    <dependency>
        <groupId>android.support</groupId>
        <artifactId>compatibility-v7-appcompat</artifactId>
        <version>${compatibility.version}</version>
        <type>apklib</type>
    </dependency>

    <dependency>
        <groupId>android.support</groupId>
        <artifactId>compatibility-v7-appcompat</artifactId>
        <version>${compatibility.version}</version>
        <type>jar</type>
    </dependency>

Der Deployer hat bei mir nicht funktioniert. Stattdessen habe ich die folgenden Schritte ausgeführt: 1) Gehen Sie zu ANDROID_HOME \ sdk \ extras \ android \ support \ v7 \ appcompat. 2) Erstellen Sie eine Zip-Datei der gesamten Bibliothek und nennen Sie sie appcompat.apklib. 3) Öffnen Sie cmd an dieser Stelle und geben Sie "mvn install" ein : install-file -Dfile = appcompat.apklib -DgroupId = com.google.android -DartifactId = support-v7-appcompat -Dversion = r7 -Dpackaging = apklib "4) Gehe zu / libs 5) Geben Sie" mvn install: install-file "ein -Dfile = android-support-v7-appcompat.jar -DgroupId = com.google.android -DartifactId = support-v7-appcompat -Dversion = r7 -Dpackaging = jar "6) Fügen Sie die entsprechenden Abhängigkeiten hinzu
bentzy


4

Das ist meine Lösung:

  1. Kopieren Sie $ ANDROID_SDK / extras / android / support / v7 / appcompat und fügen Sie es in Ihr Projekt ROOT ein

  2. Öffnen Sie "Projektstruktur" auf Intellij, klicken Sie auf "Module" unter "Projekteinstellungen" und dann auf "Appcompat" -> "Android". Stellen Sie sicher, dass das Kontrollkästchen "Bibliotheksmodul" aktiviert ist.

  3. Klicken Sie unter "appcompat" auf "YOUR-PROJECT_NAME", entfernen Sie "android-support-v4" und "android-support-v7-compatible". Stellen Sie das Kontrollkästchen sicher, bevor "appcompat" aktiviert ist. Klicken Sie auf "OK", um den Dialog "Projektstruktur" zu schließen.

  4. Zurück zum Hauptfenster klicken Sie oben links im Projektbereich auf "appcompat" -> "libs". Klicken Sie mit der rechten Maustaste auf "android-support-v4", wählen Sie das Menü "Als Bibliothek hinzufügen" und ändern Sie "Zum Modul hinzufügen" in "Ihr Projekt". Gleiches gilt für "android-support-v7-compatible".

Danach sollte Intellij in der Lage sein, die Android-Support-XXXX-Module korrekt zu finden.

Viel Glück!


3

Eine andere, noch einfache Lösung besteht darin, diese Zeile in die Datei build.gradle einzufügen

dependencies {

    //import of gridlayout
    compile 'com.android.support:gridlayout-v7:19.0.0'
    compile 'com.android.support:appcompat-v7:+'
}

4
Es ist keine gute Idee, nach der neuesten Version von appcompat zu fragen. Verwenden Sie stattdessen Folgendes: compile 'com.android.support:appcompat-v7:{targetSdkVersion}.+'
Vikram Bodicherla

3

Eine andere Lösung für Maven (und zumindest für mich eine bessere Lösung) ist die Verwendung des Maven-Repositorys, das im lokalen Android SDK enthalten ist. Fügen Sie dazu einfach ein neues Repository in Ihr POM ein, das auf das lokale Android SDK zeigt:

<repository>
    <id>android-support</id>
    <url>file://${env.ANDROID_HOME}/extras/android/m2repository</url>
</repository>

Nach dem Hinzufügen dieses Repositorys können Sie die Standard-Google-Abhängigkeit wie folgt hinzufügen:

<dependency>
    <groupId>com.android.support</groupId>
    <artifactId>support-v13</artifactId>
    <version>${support-v13.version}</version>
</dependency>

<dependency>
    <groupId>com.android.support</groupId>
    <artifactId>appcompat-v7</artifactId>
    <version>${appcompat-v7.version}</version>
    <type>aar</type>
</dependency>

1

Als Bibliotheksprojekt

Sie sollten die Ressourcen in einem Bibliotheksprojekt gemäß http://developer.android.com/tools/support-library/setup.html hinzufügen

Abschnitt> Hinzufügen von Bibliotheken mit Ressourcen

Anschließend fügen Sie die android-support-v7-appcompatBibliothek in Ihren Arbeitsbereich ein und fügen sie als Referenz zu Ihrem App-Projekt hinzu.

Das Definieren aller Ressourcen in Ihrem App-Projekt funktioniert ebenfalls (es müssen jedoch viele Definitionen hinzugefügt werden, und Sie haben einige davon übersehen), und dies ist nicht der empfohlene Ansatz.


Beachten Sie auch, dass Sie, wenn Sie alle Ressourcen vom Appcompat-Projekt bis zu Ihrem Projekt definieren, überprüfen sollten, ob sich die von R.java generierte Datei im android.support.v7.appcompatPaket befindet. Andernfalls werden Ressourcen von android-support-v7-appcompat.jar
Antonio

1
Ich verwende IDEA. Sagen Sie mir bitte, wie Sie eine Bibliothek mit Ressourcen hinzufügen können. Ressourcen, die er sieht, werden ohne Fehler kompiliert, aber wenn Sie anfangen, den Fehler zu beseitigen
Alex Malkov

0

Dies ist meine Lösung, sie ist der vorherigen sehr ähnlich:

<dependency>
        <groupId>com.google.android</groupId>
        <artifactId>support-v7</artifactId>
        <scope>system</scope>
        <systemPath>${android.home}/support/v7/appcompat/libs/android-support-v7-appcompat.jar</systemPath>
        <version>19.0.1</version>
</dependency>

Dabei ist {android.home} das Stammverzeichnis des Android SDK und verwendet systemPath anstelle des Repositorys .


support-v7 ist nicht nur eine einfache JAR-Datei
Serob_b

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.