Wie man ein APK und separate Bibliotheken erstellt, die die App dynamisch lädt

Die kurze Zusammenfassung lautet: Wie erstelle ich eine APK und separate Bibliotheken (womit ich Sätze von Klassen (und im Idealfall auch Ressourcen) in irgendeiner Form meine, z. B. JAR-, AAR- oder DEX-Dateien), binde diese Bibliotheken jedoch nicht in die APK; stattdessen lädt die App sie zur Laufzeit?

Detai

So ist meine Hauptfrage, wie man eine solche App erstellt (z. B. Gradle-Konfiguration). Wie gebe ich an, welche Klassen in welche JAR- oder DEX-Dateien abgelegt werden? Erstelle ich ein Android Studio-Modul für jede DEX-Datei, mit der ich enden möchte?

Eine eng verwandte Frage ist, wie der Java-Code dann die externen Bibliotheken laden und zur Laufzeit auf ihre Klassen zugreifen soll. Für letztere hoffe ich, dass der bei @ gezeigte Ansa Zugriff auf Klassen von App aus Dex-Datei von Classloader würde funktionieren

Ich habe die Anleitung bei @ ausprobiehttps: //developer.android.com/studio/projects/android-library.htm, aber das baut eine APK, die does Enthält die Abhängigkeitsbibliothek.

Ich habe auch versucht Multidex https: //developer.android.com/studio/build/multidex.htm), aber das scheint dem Entwickler keine Kontrolle darüber zu lassen, welche Klassen in welcher DEX-Datei abgelegt werden, und sie außerdem alle in eine einzige APK zu packen. AFAICT: Das Laden dieser DEX-Dateien zur Laufzeit kann nicht gesteuert werden.

Hintergrun

Es besteht die Möglichkeit des " X-Y Problem "hier, also erkläre ich besser den Hintergrund.

Ich erstelle eine App für einen Kunden. Es wird nicht über einen App Store vertrieben, daher hat es keinen Zugriff auf den normalen Mechanismus für Updates. Stattdessen möchte der Client, dass die App in der Lage ist, sich selbst zu aktualisieren, indem neue Komponenten von sich selbst heruntergeladen werden, um die alten Komponenten zu ersetzen, ohne dass ein neues APK manuell von der Seite geladen werden muss. Das Hauptmotiv dabei ist, dass die Updates für nicht technische Benutzer einfach sein müssen. Wenn die App den Aktualisierungsprozess steuern kann, kann sie ihn reibungslos gestalten und den Benutzer anleiten.

Darüber hinaus wird die App in Bereichen verwendet, in denen der Internetzugang knapp und teuer ist. Daher möchte der Client App-Updates in kleineren Teilen (z. B. 2 MB) bereitstellen können, anstatt den Benutzer zum erneuten Herunterladen der gesamten App zum Empfangen zu zwingen ein kleines Update.

Ein Aspekt der Anforderungen, die ich erwähnen sollte, ist, dass die zur Laufzeit zu ladenden Bibliotheken auf einer microSD-Karte gespeichert werden sollen. Dies kann auch bei der Verteilung von Updates ohne Internetzugang hilfreich sein.

Der aktuelle Status der App ist, dass sie zu etwa 50% geschrieben ist: Das heißt, einige frühere Versionen wurden veröffentlicht, aber die App muss jetzt geändert (umstrukturiert) werden, um den obigen und anderen Anforderungen gerecht zu werden.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage