# Wie fügt man bei Android Studio .jar-Libraries zu einem Android-Java-Projekt hinzu?



## ruutaiokwu (19. Mai 2020)

Hallo zusammen!

Praktisch überall im Internet wird man auf ein Verzeichnis namens "libs" verwiesen, welches aber so in dieser Form bei meinem Projekt gar nicht existiert.

*Beispiel hier:*








						How to add a jar in External Libraries in Android Studio?
					

I am new to Android Studio. How can I add a few jar files in the External Libraries below the < JDK > folder?




					stackoverflow.com
				



*
Oder hier:*








						Android Studio - Add External Jar to Library/Dependencies
					

Android Studio – Add External Jar to Library (Project Dependencies) There are many external libraries available that make many specific tasks simple and easy with the APIs and Classes they provide. In this tutorial, we shall learn how to import an External Jar file to the Project Module...




					www.tutorialkart.com
				





*Oder müsste ich dieses selbst erstellen?


1.)* Es läuft letztendlich auf das gleiche Hinaus wie das hier bei Eclipse:


			https://i.ibb.co/TR63wkD/asef.jpg
		


*2.)* Der Inhalt der .jar-Datei sollte beim Builden ins .apk kopiert werden, damit diese Libraries letztendlich dann auch dort drin sind.


Evtl. weiss hier jemand was zum Thema? Vielen Dank für die Feedbacks!


----------



## mrBrown (19. Mai 2020)

*Immer* dafür gradle nutzen.









						Add build dependencies  |  Android Developers
					

Learn how to add build dependencies using the Gradle build system in Android Studio.




					developer.android.com


----------



## ruutaiokwu (19. Mai 2020)

Vielen Dank!

Es ist aber ne selbst programmierte Library, kann also nicht aus irgendwelchen Repos automatisch mit der neusten Version geholt werden. (Wie das heute halt so "in" ist... wie bspw. mit `npm` bei Node.JS oder dem Composer bei PHP...)

Gilt das denn aus für selbst entwickelte Sachen...?

Merke gerade dass Android ein Gebiet für sich ist, obwohl ich 1999 die ersten Java-Versuche gemacht habe und in der Zwischenzeit auch ein paar Java-Jobs hatte (inkl. J2EE) habe ich irgendwie "null Ahnung" von den Android-Sachen... aber was nicht ist, kann (wohl eher "muss") noch werden...;-)


----------



## kneitzel (19. Mai 2020)

Also wenn Du den Link anschaust von mrBrown, dann siehst Du, dass dieser auch "local binary dependencies" erläutert. Das ist das, was Du wohl auch schon gefunden hast.

Und ja - da legst Du das lib Verzeichnis selbst an.

Ein einfaches Beispiel aus einem meiner Projekte ist z.B. der Eintrag:
implementation files('libs/jar2exe_integrate.jar') 
innerhalb der dependencies im build.gradle file.

Und daher habe ich ein Verzeichnis libs und in diesem die jar2exe_integrate.jar Datei.


----------



## ruutaiokwu (19. Mai 2020)

Danke, war wohl ein wenig voreilig - wie schon oft! ;-)


----------



## ruutaiokwu (19. Mai 2020)

Nach dem Anlagen eines Verzeichnis "lib" ist dieses zwar vorhanden, aber nicht sichtbar. Wenn ich es noch mal kreieren will ("app" -> rechte Maustaste -> "New" -> "Directory") wird mir gesagt dass es bereits existiert. Gibt es da einen Filter, welche leere Verzeichnisse "per Default" ausblendet oder so?

P.S.: Habe auch kein Verzeichnis "src" wie in den obigen Screenshots ersichtlich. Bei mir sind die Packages irgendwie "direkt" drin, ohne ein src-Verzeichnis. (?)


----------



## ruutaiokwu (19. Mai 2020)

Aha, "Project"-Ansicht lässt es zum Vorschein bringen...


----------



## mrBrown (19. Mai 2020)

jmar83 hat gesagt.:


> Es ist aber ne selbst programmierte Library, kann also nicht aus irgendwelchen Repos automatisch mit der neusten Version geholt werden. (Wie das heute halt so "in" ist... wie bspw. mit `npm` bei Node.JS oder dem Composer bei PHP...)


Klar, aus deinem lokalen Repo  

"in" ist das bei Java übrigens seit fast 20 Jahren ;P


----------



## ruutaiokwu (19. Mai 2020)

...in `build.gradle` steht aber folgendes:



```
dependencies {
        classpath 'com.android.tools.build:gradle:3.6.3'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
```




> // NOTE: Do not place your application dependencies here; they belong
> // in the individual module build.gradle files



Hmmm…?




> `"in" ist das bei Java übrigens seit fast 20 Jahren ;P`



Evtl. seit "Maven"...?


----------



## ruutaiokwu (19. Mai 2020)

Weder das eine (auskommentiert) noch das andere geht:


```
buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.3'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        //implementation fileTree(dir: 'libs', include: ['AndroidCompatibleHTTPClient.jar'])
        implementation fileTree(dir: 'libs', include: ['*.jar'])
    }
}
```


Meldung:

`Caused by: org.gradle.internal.metaobject.AbstractDynamicObject$CustomMessageMissingMethodException: Could not find method implementation() for arguments [directory 'libs'] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.`

Steht aber hier so dass man es so tun sollte:








						Add build dependencies  |  Android Developers
					

Learn how to add build dependencies using the Gradle build system in Android Studio.




					developer.android.com
				




(???)


----------



## mrBrown (19. Mai 2020)

jmar83 hat gesagt.:


> ...in `build.gradle` steht aber folgendes:
> 
> 
> 
> ...



Der verweist doch extra auf eine build.gradle in den einzelnen Modulen, da sollte es eine weitere build.gradle geben 




jmar83 hat gesagt.:


> Evtl. seit "Maven"...?


Jap


----------



## ruutaiokwu (19. Mai 2020)

Es gibt nach der Suche mit "Agent Ransack" exakt 2 build.gradle-Dateien:

- Eine unter PROJEKT_VERZEICHNIS
- Die andere unter PROJEKT_VERZEICHNIS\app


----------



## mrBrown (19. Mai 2020)

- Eine unter PROJEKT_VERZEICHNIS -> die für das Projekt
- Die andere unter PROJEKT_VERZEICHNIS\app -> die für die App


----------



## ruutaiokwu (19. Mai 2020)

Danke, dann bin ich an sich schon mal an der richtigen Stelle, im app-Ordner ist ausreichend.


----------



## ruutaiokwu (19. Mai 2020)

"implementation" mit "compile" (wird zwar korrekt durchgestrichen da "deprecated") auszutauschen nutzt auch nix:


```
Caused by: org.gradle.internal.metaobject.AbstractDynamicObject$CustomMessageMissingMethodException: Could not find method compile() for arguments [directory 'libs'] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
```

...muss wohl wieder zurück in die J2EE-Welt, popelige Smartphone-Apps zu entwickeln ist wohl nix für "kernige Hacker" mittleren Alters! ;-) (Eher was für junge Hipster-Informatiker, denen das neuste Smartphone wichtiger als ein richtiger Computer/PC ist...;-) LOL...🤣)


----------



## ruutaiokwu (19. Mai 2020)

Na ja, man könnte die Libraries auch entpacken und als Quelltext reinnehmen, an der gleichen Stelle wie das eigentliche Programm ist. (Zumindest solange diese als Quelltext verfügbar sind, was bei mir aktuell ja der Fall ist.)


----------



## ruutaiokwu (19. Mai 2020)

Na ja, sonst werde halt einen Bug einreichen, spätestens dort wird man mir dann erklären dass es wohl (?) keiner ist und wie man das Problem bewerkstelligt...


----------



## ruutaiokwu (19. Mai 2020)

*Erledigt:*









						Could not find method compile() / Could not find method implementation() ... · Issue #13173 · gradle/gradle
					

Expected Behavior No error message like that, should end successfully after clicking "Sync Now"-Button in Android Studio Current Behavior Get the messages written in the issue's title...




					github.com


----------



## ruutaiokwu (19. Mai 2020)

Trotzdem vielen Dank euch allen, mal schauen was sich ergibt.

Problem soweit gelöst, Thread kann geschlossen werden.


----------



## mrBrown (19. Mai 2020)

jmar83 hat gesagt.:


> "implementation" mit "compile" (wird zwar korrekt durchgestrichen da "deprecated") auszutauschen nutzt auch nix:
> 
> 
> ```
> ...



Zeig mal die die *ganze* build.gradle (am besten beide), da ist wahrscheinlich irgendwo ein Fehler drin.



jmar83 hat gesagt.:


> ...muss wohl wieder zurück in die J2EE-Welt, popelige Smartphone-Apps zu entwickeln ist wohl nix für "kernige Hacker" mittleren Alters! ;-) (Eher was für junge Hipster-Informatiker, denen das neuste Smartphone wichtiger als ein richtiger Computer/PC ist...;-) LOL...🤣)


Man muss halt mit professionellen Tools klar kommen. LOL. nichts daran is Android-spezifisch. LOL.


----------



## ruutaiokwu (20. Mai 2020)

Build.gradle:


```
// Top-level build file where you can add configuration options common to all sub-projects/modules.



buildscript {
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.3'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files

        implementation fileTree(dir: 'libs', include: ['AndroidCompatibleHTTPClient.jar'])
        compile fileTree(dir: 'libs', include: ['AndroidCompatibleHTTPClient.jar'])
        classpath fileTree(dir: 'libs', include: ['AndroidCompatibleHTTPClient.jar'])

        implementation fileTree(dir: 'libs', include: ['*.jar'])
        compile fileTree(dir: 'libs', include: ['*.jar'])
        classpath fileTree(dir: 'libs', include: ['*.jar'])
    }
}



allprojects {
    repositories {
        google()
        jcenter()
    }
}



task clean(type: Delete) {
    delete rootProject.buildDir
}
```



*"Man muss halt mit professionellen Tools klar kommen. LOL. nichts daran is Android-spezifisch. LOL."*


Dann kann ich ein .apk also "ganz normal"wie ein .jar builden, über `javac.exe`....? Falls ja werde ich mir das gerne anschauen. Dann kann ich ja geradesogut das ganz gewöhnliche "Eclipse Java" nehmen wenn ich dazu gar keine Android Studio brauche!?


----------



## ruutaiokwu (20. Mai 2020)

Und dann kann ich mit Android also auch AWT oder Swing verwenden, statt die Sachen aus dem android.xxx-Package??


----------



## kneitzel (20. Mai 2020)

jmar83 hat gesagt.:


> // NOTE: Do not place your application dependencies here; they belong
> // in the individual module build.gradle files



Das wäre das Wichtige aus meiner Sicht.

Die Abhängigkeiten deiner Applikation gehören in das build.gradle File, welches Du in app finden solltest. (So heisst der Ordner meistens).

Und bezüglich dem Bauen von Applikationen: Bitte beschäftige Dich mit den Grundlagen. Javac baut kein jar File. Und AWT / Swing stehen unter Android erst einmal so nicht zur Verfügung. Aber da das Projekt von gradle gebaut wird, ist vollkommen egal, welche IDE du nutzt.


----------



## ruutaiokwu (20. Mai 2020)

*"Javac baut kein jar File."*

Oh ja, klar...🙄 habe das Zeugs schon so lange nicht mehr gebraucht (dank Eclipse und Konsorten)... `javac` macht nur .class- aus .java-Files. Habe das komplett vergessen...

Dass Swing und/oder AWT unter Android nicht zur Verfügung steht, davon bin ich eigentlich auch ausgegangen, aber nur habe ich die Bestätigung "schwarz auf weiss"!! Vielen Dank!!!


----------



## mrBrown (20. Mai 2020)

Die Dependencies müssen wie von @JustNobody gesagt in die andere build.gradle. Wie sieht die denn aus?




jmar83 hat gesagt.:


> Dann kann ich ein .apk also "ganz normal"wie ein .jar builden, über `javac.exe`....? Falls ja werde ich mir das gerne anschauen. Dann kann ich ja geradesogut das ganz gewöhnliche "Eclipse Java" nehmen wenn ich dazu gar keine Android Studio brauche!?


Per Hand mit javac bauen ist bei sowas aber auch eher das Gegenteil von professionell...

Aber ja, Android-Projekte laufen üblicherweise mit gradle, das kannst du mit nahezu jeder IDE nutzen. Man hat dann halt deutlich weniger IDE-Unterstützung. 
Man kann auch auf gradle verzichten und alles per Hand machen.

Aber das ist dann halt vergleichbar mit ein Hochhaus bauen, nur völlig ohne Strom und jegliche Werkzeuge aus Metall.


----------



## ruutaiokwu (20. Mai 2020)

```
// Top-level build file where you can add configuration options common to all sub-projects/modules.



buildscript {
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.3'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files

        implementation fileTree(dir: 'libs', include: ['AndroidCompatibleHTTPClient.jar'])
        //compile fileTree(dir: 'libs', include: ['AndroidCompatibleHTTPClient.jar'])
        //classpath fileTree(dir: 'libs', include: ['AndroidCompatibleHTTPClient.jar'])

        //implementation fileTree(dir: 'libs', include: ['*.jar'])
        //compile fileTree(dir: 'libs', include: ['*.jar'])
        //classpath fileTree(dir: 'libs', include: ['*.jar'])
    }
}



allprojects {
    repositories {
        google()
        jcenter()
    }
}



task clean(type: Delete) {
    delete rootProject.buildDir
}
```


----------



## ruutaiokwu (20. Mai 2020)

Im byte-welt-Forum wurde mir gesagt ich solle den Menüpunkt File -> Project Structure -> ... anwählen: https://forum.byte-welt.net/t/wie-f...-zu-einem-android-java-projekt-hinzu/21915/16

Klappt aber nicht so wie versprochen mit der oben geposteten Datei.


----------



## mrBrown (20. Mai 2020)

Zeig einmal *alle* gradle-Dateien, die in deinem Projekt existieren. (und die bitte in Code-Tags posten)


----------



## ruutaiokwu (20. Mai 2020)

Oh...!!

Problem gefunden: .gradle-Dateien gibt es ja mehrfach!!! (Schon wieder vergessen) Im Projekt- sowie im `app`-Ordner!!

Nun war der. jar-Eintrag am falschen Ort und musste gar nicht von Hand gemacht werden sondern übers Menü...

Dann geht auch automatisch das hier in die .gradle-Datei im Verzeichnis `app` rein:

*`implementation files('libs\\AndroidCompatibleHTTPClient.jar')`*


----------



## ruutaiokwu (20. Mai 2020)

Vielen Dank nochmal euch allen!!


----------



## mrBrown (20. Mai 2020)

jmar83 hat gesagt.:


> Problem gefunden: .gradle-Dateien gibt es ja mehrfach!!! Im Projekt- sowie im `app`-Ordner!!


Liest du eigentlich das, was du selbst schreibst? 



jmar83 hat gesagt.:


> Es gibt nach der Suche mit "Agent Ransack" exakt 2 build.gradle-Dateien:
> 
> - Eine unter PROJEKT_VERZEICHNIS
> - Die andere unter PROJEKT_VERZEICHNIS\app


----------



## ruutaiokwu (20. Mai 2020)

Beitrag editiert: *"Problem gefunden: .gradle-Dateien gibt es ja mehrfach!!! (Schon wieder vergessen) Im Projekt- sowie im `app`-Ordner!!"*

Stress, Stress und noch mal Stress... aber irgendwie wär mir sonst langweilig und öde wenn's nicht so wäre! ;-)

Das kommt halt davon, wenn man quasi "Junge für alles" (quasi-IT-Verantwortlicher (das letzte Wort hat immer der Chef und Inhaber), Entwickler, Projektleitung innerhalb der Entwicklung, ab und zu geht's auch mal auf die Baustelle in entsprechender "Montur" da Bereich Gebäude-/Hausautomation ;-)) in einem KMU ist... zumindest auf technischer Ebene ist es interessant mit allem möglichem in Berührung zu kommen. Und mit dem Chef kann ich es soweit ja auch gut.

Hingegen 8 Stunden introvertiert vor den Rechner zu sitzen - da könnte man sich zwar auf das Thema konzentrieren. Aber das könnte ich mir heutzutage nicht mehr wirklich vorstellen.


----------



## mihe7 (21. Mai 2020)

jmar83 hat gesagt.:


> quasi-IT-Verantwortlicher (das letzte Wort hat immer der Chef und Inhaber), Entwickler, Projektleitung innerhalb der Entwicklung, ab und zu geht's auch mal auf die Baustelle in entsprechender "Montur" da Bereich Gebäude-/Hausautomation ;-)


Du könntest doch eigentlich noch Vertrieb, Produktion und Buchhaltung übernehmen. Sonst wird das schnell einseitig


----------



## ruutaiokwu (26. Mai 2020)

*"Du könntest doch eigentlich noch Vertrieb, Produktion und Buchhaltung übernehmen. Sonst wird das schnell einseitig "*

Ja, am besten dem Chef komplett alle Tasks abnehmen (kleine Firma, wir sind beide quasi "Junge für alles" da wir uns u.A. schnell in verschiedene Themen einarbeiten können. Die anderen MA arbeiten eigentlich aber immer in ihrem Gebiet) und das selbstverständlich zum gleichen Gehalt wie vorher... 

Was hast du dir denn sonst gedacht? ;-)


----------

