Frage

In einer Klasse, die zu a gehört Bibliothek Projekt, das ich rufe:

webview.loadUrl("file:///android_asset/info.html", null);

Leider funktioniert dies nur, wenn ich Duplikat die Datei info.html in die Anwendung Projekt Asset -Ordner auch.

Gibt es eine Möglichkeit, einen Android -Bibliothekscode zu mitteilen: "Suchen Sie nach dieser Datei im Ordner Assets der Bibliothek? nicht im Ordner der Anwendung "Vermögenswerte"?

War es hilfreich?

Lösung

Von dem Android -Dokumente:

Bibliotheksprojekte können keine rohen Vermögenswerte enthalten

Die Tools unterstützen nicht die Verwendung von Rohinstitatdateien (im Vermögen/ Verzeichnis gespeichert) in einem Bibliotheksprojekt. Alle von einer Anwendung verwendeten Vermögensressourcen müssen im Vermögen/ Verzeichnis des Anwendungsprojekts selbst gespeichert werden. Ressourcendateien, die im RES/ Verzeichnis gespeichert sind, werden jedoch unterstützt.

Wenn Sie Dateien aus einem Bibliotheksprojekt aufnehmen möchten, müssen Sie sie anstelle des Vermögens in die Ressourcen einfügen. Wenn Sie versuchen, HTML -Dateien aus Ihrem Bibliotheksprojekt in ein WebView zu laden, müssen Sie eine Kreisverkehrsmethode als die übliche URL der Asset -USET -Methode durchführen. Stattdessen müssen Sie die Ressourcendaten lesen und so etwas wie verwenden lade Daten.

Diese Antwort ist veraltet, das Gradle -Build -System und AAR -Dateien unterstützen Vermögenswerte.

Andere Tipps

Dies ist jetzt mit dem Gradle Build -System möglich.

Testen mit Android Studio 0.5.0 und V0.9 des Android Gradle Plugin habe ich festgestellt, dass Dateien wie z.

MyLibProject/src/main/assets/test.html

werden in der endgültigen Anwendung korrekt verpackt und können zur Laufzeit über die erwartete URL zugegriffen werden:

file:///android_asset/test.html

Okay. Ich habe mich schon eine Weile betont und den Schlaf verloren. Ich bin die Art von Person, die die API -Erstellung liebt und eine komplizierte Integration hasst.

Es gibt nicht viele Lösungen im Internet, also bin ich ziemlich stolz auf das, was ich mit ein bisschen Sonnenfinsternis entdeckt habe.

Es stellt sich heraus, dass wenn Sie eine Datei in den Ordner Android Libs /Assets einstellen. Das Ziel -APK wird dies erfassen und auf die Wurzel des APK -Archivs platzieren. Daher fehlschlägen allgemeiner Zugriff. Dies kann gelöst werden, indem einfach eine Roh -Java -Bibliothek erstellt und alle Vermögenswerte dort platziert werden, dh (Javalib) /assets/Filex.txt.

Sie können dies wiederum als Java Build -Pfad -Ordnerquelle in Projekt> Eigenschaften> Java -Build -Pfad> Quelle> Link -Quelle einbeziehen.

  1. Linkquelle
  2. Klicken Sie auf Variablen. und fügen Sie eine neue Variable hinzu, dh var_name_x. Ort: ../../(relative_path_to_assets_project)
  3. OK klicken

Wenn Sie Ihre App erstellen und ausführen, enthält der Ordner assets in der APK Ihre (globalen Bibliotheks-) Dateien, die Sie beabsichtigt haben.

Keine Notwendigkeit, Android -Interna oder nichts neu zu konfigurieren. Es ist alles in wenigen Klicks von Sonnenfinsternis.

Sie können dies erreichen, indem Sie einen symbolischen Link im Asset -Ordner des Projekts erstellen, der auf das Verzeichnis im Bibliotheksprojekt hinweist.

Dann können Sie wie unten zugreifen:

webview.loadUrl("file:///android_asset/folder_in_a_libary_project/info.html", null);

Ich bestätige, dass Daniel Grants Ansatz zumindest für die folgende Situation funktioniert: Das Zielprojekt hat keinen Asset -Ordner (oder der Ordner ist leer, sodass Sie es sicher löschen können). Ich habe keine Variable eingerichtet. Richten Sie einfach eine LinkSource wie folgt ein (nur ein Beispiel) Linked Ordner Standort:/home/matthew/workspace_moonblink/assetsforAdvocacy/assets Ordner Name: Assets

Das "AssetsforAdvocacy" ist ein Java -Projekt (erstellt mit New -Project - Java -Projekt) mit leerem SRC -Ordner und einem neuen Ordner mit dem Namen "Assets", der jetzt den gesamten Assets -Ordner für das Zielprojekt bereitstellt.

Dies ist ein ziemlich einfacher Weg innerhalb der Eclipse, um Vermögenswerte in vielen verschiedenen Projekten wiederzuverwenden, wenn sie noch keine Vermögenswerte haben, gut genug, um mit zu beginnen. Ich möchte es wahrscheinlich verbessern, um auf lange Sicht ein Inhaltsanbieter zu werden, aber das ist viel mehr Entwicklung.

Mein Projekt greift mit dem folgenden Code auf die Assets zu: String AdvocacyFolderinassets = "No_smoking/"; // Ein Ordner unter Assets/String fn = AdvocacyFolderinassets+ImageFileName; Bitmap PristineBitMapForAdvocacy = getbitMapFromasset (Kontext, fn);

Ich benutze Motodev Studio 3.1.0 auf Ubuntu. Es würde mich nicht dazu bringen, einen neuen Vermögensordner im neuen Projekt nur in einem vorhandenen Vermögensordner im Zielprojekt zu verschmelzen.

Wenn Sie ein Setup verwenden möchten, bei dem aus einer Bibliothek mehrere Derivatprodukte aus einer Bibliothek erstellt werden, können Sie in Ihrem SCM -System SVN: EXTERNALS oder eine ähnliche Lösung in Betracht ziehen. Dies wird auch den Trick machen, dass statische Assets wie Online -Hilfe separat aus dem Android -Quellcode versioniert werden können.

ich fand Diese ältere Frage, Es könnte Ihnen auch helfen.

Dies ist die offizielle Art und Weise, wie Google dies archiviert (aus dem obigen Beitrag): Verknüpfung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top