Lib für (Desktop-)Java und Android schreiben

daybyter

Aktives Mitglied
Hallo!

Ich hab eine Java Lib geschrieben, die ich in Desktop und Server Anwendungen benutze.

Diese möchte ich nun auch unter Android benutzen.

Problem: die Lib lädt Treiber aus Jarfiles nach, was unter Android so nicht funktioniert. Also füge ich momentan diese Treiber direkt zum Buildpath hinzu, checke den Classpath und instantiiere die Objekte dann, wenn ich im Classpath eine passende Klasse finde. Dieses ist nicht so schön und ausserdem brauch ich nun Klassen wie DexFile oder PathClassLoader, die es unter Java ja nicht gibt. Also muss ich das Android.jar für meinen API Level zum Java-Projekt hinzufügen.

Keine schöne Lösung...

Alternativ könnte man z.B. noch bedingte Compilierung benutzen, aber dann wäre zumindest das Compilat ja wiederum nur auf dem Zielsystem lauffähig.

Hat jemand von euch schonmal sowas in der Art entwickelt? Wie habt ihr die Android Abhängigkeiten gehandhabt?

Vielen Dank im Voraus für jeden Antwort,
Andreas
 

dzim

Top Contributor
Vielleicht verstehe ich nur nicht dein konkretes Problem (da hier anscheinend JNI-Calls auf andere(?) libs gemacht werden).
Ich verwende in meiner App Jackson zum parsen von JSON und SimpleXML zum parsen von - guess what!? - XML... Beide liegen einfach nur im dafür vorgesehenen lib-Ordner. Die libs haben keine spezielle Anpassung (sind also keine Android-Library-Projekte), um zu funktionieren. Kannst du das Problem noch einmal etwas genauer spezifizieren???
 

daybyter

Aktives Mitglied
Erstmal vielen Dank für Deine Antwort!

Meine Desktop Version lädt zur Laufzeit Klassen aus jar Files nach, um bestimmte Webseiten anzusprechen. Quasi so eine Art 'Treiber' für die jeweilige Website. Das klappt aber unter Android nicht, weil ja der Java Bytecode zu Dalvik compiliert wird, was ja aber das Smartphone nicht kann, sondern nur der PC, auf dem entwickelt wird. Also müsste ich quasi alle 'Treiber' auf dem Desktop PC compilieren und dann auf dem Smartphone per speziellem Code nachladen. Das gibt aber wiederum in der Desktop Version Probleme, weil ja 'normales' java keine DexFile Klasse usw. kennt. Diesen Code könnte ich mit nem normalen JDK nicht compilieren.

Ich weiss...ziemlich spezielles Problem...

Ich hab mir aktuell mit einem Hack beholfen, der Klassen auf dem Handy aus dem Classpath nachladen kann. So muss ich halt alle Jars fest in den Buildpath einbinden...nicht sehr schön...
 

dzim

Top Contributor
Ok, ich versteh das Problem wohl immer noch nicht ganz, denn: Wenn du eine reguläre Bibliothek (also ideal ein in Java6 kompiliertes .jar-File, für alles unter API-Level 19; ab 19 kannst du IMHO Java7 nutzen) in dein libs-Verzeichnis wirfst, wird der Build-Prozess von Android dieses .jar auspacken und - wie er es auch für deine Klassen tut - die .class-Files in das dex-Format umwandeln. Wichtig ist einfach die Kompatibilität der Bibliotheken und dass sie halt keine Features aus den neueren Java-Versionen nutzen können.
 

daybyter

Aktives Mitglied
Ist schon klar...

Aber ich hab ja _viele_ jar Files. Und ein Jar File lädt zur Laufzeit die anderen nach. Je nachdem, welche Funktionen gerade gebraucht werden. Und das klappt halt nicht.
 

dzim

Top Contributor
Verstehe, aber da musst du dir jetzt diese Frage gefallen lassen: Wieso?
Also im normalen Java Umfeld ist das sicher noch in Ordnung, aber Android ist nun mal ein embedded-System. Resourcen sollten (auch wenn es bei den aktuellen Geräten echt schräg klingt) geschont werden. Und das nachladen könnte teuer werden denke ich. Lieber alle Libs drin und die notwendigen Klassen können dann schnell angesprochen werden.

Ich weiss nicht, ob man libs einfach nur für sich dexen kann... Wenn ja, dann wäre es sicher möglich, sie inm assets-Verzeichnis zu hinterlegen und dann irgendenwie zu laden, aber das sind sachen, die ich noch nie verwenden musste. Lieber würde ich mir OSGi im Android-Umfeld antun als zu versuchen, deinen Ansatz aus der Java-Welt aufrecht zu erhalten.
 

Tobse

Top Contributor
Also wenn die Libs doof genug sind, um die Sachen nachzuladen anstadt sie in den Classpath zu tun (was ja bei den aktuellen PCs praktisch keinen Unterschied macht was RAM-Verbrauch und Performance angeht), wirst du auch nicht drum rum kommen das wieder zu berichtigen.
Je nachdem mit welcher IDE du arbeitest kannst du in den Build-Process nen eigenen Code einbauen, der die .java Dateien zu .class compiliert, in dein assets oder lib Verzeichnis kopiert und schließlich zum Classpath hinzufügt (wobei das mit dem Classpath je nach IDE auch schwieriger werden kann wenn bei den Libraries Klassen dazukommen/verschwinden).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Java-Programme für Handy auf Desktop-PC ausführen Android & Cross-Platform Mobile Apps 4
Kazudemruzo Android API/Library für externe Entwickler zur Verfügung stellen Android & Cross-Platform Mobile Apps 7
C Consent für Admob mit ump / funding choices Android & Cross-Platform Mobile Apps 6
B Was fehlt mir hier für diese Klasse? ich habe es mit (>>> ... <<<) markiert. Android & Cross-Platform Mobile Apps 4
J SharedPreferences für User-Session Android & Cross-Platform Mobile Apps 2
M Barrierefreie Appentwicklung für Android - Suche Codebeispiele Android & Cross-Platform Mobile Apps 8
I App für Fire HD entwickeln Android & Cross-Platform Mobile Apps 3
T Bringen mir die Java-Basics irgendetwas für die Android-Programmierung Android & Cross-Platform Mobile Apps 4
L Textfeld für Dezimalzahl mit Vorzeichen Android & Cross-Platform Mobile Apps 2
J Android Datenbank Klasse nur für CRUD-Operation, oder auch mehr ? Android & Cross-Platform Mobile Apps 8
B Android Projekt für Android und IOS erstellen? Android & Cross-Platform Mobile Apps 5
J Impressumspflicht für App, wenn ich kein Unternehmer bin? Android & Cross-Platform Mobile Apps 13
T Android Equalizer für Android Android & Cross-Platform Mobile Apps 3
L Zeitstempel für Sensordaten bekommen Android & Cross-Platform Mobile Apps 3
L Android Texterkennung für Android? Android & Cross-Platform Mobile Apps 1
L Android Chart API für Android Android & Cross-Platform Mobile Apps 0
T Android Datenbankverbindung in Service für Push Notification Android & Cross-Platform Mobile Apps 0
R Android USB Treiber für Huawei Android & Cross-Platform Mobile Apps 1
M Hilfe bei App Programmierung für Android Android & Cross-Platform Mobile Apps 1
B Script für Android Android & Cross-Platform Mobile Apps 1
H Datenprotokoll für Graphview Android & Cross-Platform Mobile Apps 2
M Android Obfuscation für Strings Android & Cross-Platform Mobile Apps 8
S Bilder mit fester grösse für verschiedene Android Endgeräte Android & Cross-Platform Mobile Apps 2
D Android Layout für alle Geräte Android & Cross-Platform Mobile Apps 4
A String[] für Lisadapter Android & Cross-Platform Mobile Apps 4
J MySQL Simulation für Android App Android & Cross-Platform Mobile Apps 2
kaoZ Tutorial .xml Layouting für z.B ListView elemente Android & Cross-Platform Mobile Apps 7
W Java Editor für Android +Emulator Android & Cross-Platform Mobile Apps 7
M 20 Image Button für jede Auflösung positionieren Android & Cross-Platform Mobile Apps 3
L Android ActionBar mit unterschiedlichen Farben für Tabs Android & Cross-Platform Mobile Apps 3
S Voraussetzungen für Android-Apps Android & Cross-Platform Mobile Apps 7
R Sinnvoller Ablageort für Leveldaten Android & Cross-Platform Mobile Apps 8
B App bei Play-Store für bestimmte auflösungen anbieten? Android & Cross-Platform Mobile Apps 3
G extends Activity für Berechnungen? Android & Cross-Platform Mobile Apps 7
H Progrämmchen für Symbian Android & Cross-Platform Mobile Apps 4
G wiederkehrenden Wert für Design in XML ablegen Android & Cross-Platform Mobile Apps 2
L Android SearchBox für Custom Listview Android & Cross-Platform Mobile Apps 5
T Android KontrollApp für Nitrado Server Android & Cross-Platform Mobile Apps 2
L Android Eine Kleinigkeit für Profis Android & Cross-Platform Mobile Apps 2
G Android C++ Quellcode für Android Geräte compilieren Android & Cross-Platform Mobile Apps 2
T Zeit in zwei Zahlen für Widget zerlegen Android & Cross-Platform Mobile Apps 2
J Apps für Android programmieren - Android Handy notwendig oder reicht Simulator? Android & Cross-Platform Mobile Apps 3
A Android SimpleDateFormat gibt für Date unter android anderes Datum zurück als in Std. Java Android & Cross-Platform Mobile Apps 2
H Android Landscape Modus für App dektivieren Android & Cross-Platform Mobile Apps 3
M Frage zu Java Programm für Windows Mobile 6.5 Android & Cross-Platform Mobile Apps 2
H Welches JDK für Huawei G7002? Android & Cross-Platform Mobile Apps 6
C Panel/View für Android Android & Cross-Platform Mobile Apps 3
C Sanke für Android Android & Cross-Platform Mobile Apps 3
Kukulkan Welche Mindestanforderungen (JDK) für Android und BB? Android & Cross-Platform Mobile Apps 8
G Views für verschiedenen Bildschirmgroeßen Android & Cross-Platform Mobile Apps 2
thE_29 Widget für verpasste Anruf + SMS Android & Cross-Platform Mobile Apps 2
A Android Android Parameter für VM Android & Cross-Platform Mobile Apps 7
O Entwickler für Java Anwendungen auf Handy gesucht! Android & Cross-Platform Mobile Apps 3
S JButton in GUI für Handys? Android & Cross-Platform Mobile Apps 3
M Welche Datenbank für J2ME? Android & Cross-Platform Mobile Apps 5
D Event für Tastensperre? Android & Cross-Platform Mobile Apps 3
G WTK für Nokia Android & Cross-Platform Mobile Apps 2
P bestimmte API für XDA ORBIT2 Android & Cross-Platform Mobile Apps 3
S Idee gesucht für ein kleines Programm Android & Cross-Platform Mobile Apps 3
M ein image pixel für pixel aufbauen : setPixel() ? Android & Cross-Platform Mobile Apps 1
M Handyprogramm für U-Bahn-Fahrplan für Siemens SK65 Android & Cross-Platform Mobile Apps 2
J Empfehlungen für ME-Anfänger Android & Cross-Platform Mobile Apps 2
K Anwendung für Handy programmieren Android & Cross-Platform Mobile Apps 1
P Java für PDA DELL Axim 51 Android & Cross-Platform Mobile Apps 4
M Virtuelle Machiene für PDA Android & Cross-Platform Mobile Apps 8
B Programm für NokiaComunicator erstellen Android & Cross-Platform Mobile Apps 2
K Programme für Handy erstellen Android & Cross-Platform Mobile Apps 3
T Für Handy Game die Sprache umschreiben? Android & Cross-Platform Mobile Apps 24
M java game für handy mit grahi. oberfläche Android & Cross-Platform Mobile Apps 1
D java.security.MessageDigest (für ME?) Android & Cross-Platform Mobile Apps 1
N Unser Team such Coder für Spieleprojekte Android & Cross-Platform Mobile Apps 8
B WTK für Sony Ericsson? Android & Cross-Platform Mobile Apps 7
S JAVA für java-mobiltelefone Android & Cross-Platform Mobile Apps 14
B Android App debugen auf Handy, Handy-Desktop auf PC anzeigen Android & Cross-Platform Mobile Apps 1
S Desktop Anwedung ( Java 6 ) auf android zu greifen. Android & Cross-Platform Mobile Apps 6
M Browsererkennung mobil oder desktop Android & Cross-Platform Mobile Apps 4
AllBlack Suche Programmierer in Java und Kotlin mit dem ich mich Selbstständig machen kann Android & Cross-Platform Mobile Apps 23
W Netzwerk Verbindungen Java Android Android & Cross-Platform Mobile Apps 107
Adem61 Flutter Frontend und Java Backend möglich ? Android & Cross-Platform Mobile Apps 2
M Repository bei Room-Database in Android Studio (Java) Android & Cross-Platform Mobile Apps 2
T Android Android Augmented Faces in Java. Neue Landmarks erstellen Android & Cross-Platform Mobile Apps 1
rafi072001 Java API um HTML Elemente von externen Websiten zu bekommen Android & Cross-Platform Mobile Apps 2
N Android java.lang.IllegalStateException: No host Android & Cross-Platform Mobile Apps 22
A Mit Java neues item in ein string-array einer Strings.xml schreiben Android & Cross-Platform Mobile Apps 4
ruutaiokwu Wie fügt man bei Android Studio .jar-Libraries zu einem Android-Java-Projekt hinzu? Android & Cross-Platform Mobile Apps 33
M Gradle sync failed: Could not determine Java version using executable Android & Cross-Platform Mobile Apps 5
J AndroidStudio Login.Java Android & Cross-Platform Mobile Apps 0
O Web API in Android (JAVA) einbinden Android & Cross-Platform Mobile Apps 3
N Wie kann ich mein Handy mit Java rooten? Android & Cross-Platform Mobile Apps 38
T Fehler Android Studio: java.net.MalformedURLException: no protocol: http%3A%2F%2Fwww.mal ..... Android & Cross-Platform Mobile Apps 2
C Android Programmierung speziell oder einfach Java Buch kaufen? Android & Cross-Platform Mobile Apps 3
L Android RadioButtonGroup innerhalb der JAVA Android & Cross-Platform Mobile Apps 4
L Android Java scheint XML nicht zu finden Android & Cross-Platform Mobile Apps 11
J Android String in andere Java-Dateien überführen Android & Cross-Platform Mobile Apps 1
J Android Java Packet in Android Java ide hinzufügen. Android & Cross-Platform Mobile Apps 3
T Usage: java ZipInfo zfname Android & Cross-Platform Mobile Apps 2
P Android App - Java Android & Cross-Platform Mobile Apps 1
S Android Android java onclick listener Problem Android & Cross-Platform Mobile Apps 9
P Android JUnit Testprojekt warum keine Java Klassen Android & Cross-Platform Mobile Apps 1
J Plötzlich "java.lang.String cannot be converted to JSONObject" Android & Cross-Platform Mobile Apps 9

Ähnliche Java Themen

Neue Themen


Oben