Domanda

In una classe appartenente a a Biblioteca progetto che chiamo:

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

Sfortunatamente, questo funziona solo se io duplicare il file info.html nel file Applicazione anche la cartella delle risorse del progetto.

C'è un modo per dire a un codice di libreria Android:"cerca questo file nella cartella delle risorse della libreria, non nella cartella delle risorse dell'applicazione" ?

È stato utile?

Soluzione

Dal Documenti Android:

I progetti di biblioteca non possono includere risorse grezze

Gli strumenti non supportano l'uso di file di risorse grezzi (salvati nelle attività/ directory) in un progetto di biblioteca. Eventuali risorse di attività utilizzate da un'applicazione devono essere archiviate nelle attività/ directory del progetto di applicazione stesso. Tuttavia, sono supportati i file di risorse salvati nella directory.

Se vuoi includere file di un progetto di biblioteca, dovrai inserirlo nelle risorse anziché nelle risorse. Se stai cercando di caricare i file HTML dal progetto della tua libreria in un WebView, ciò significa che dovrai seguire un metodo più rotondo rispetto al solito URL delle risorse. Invece dovrai leggere i dati delle risorse e utilizzare qualcosa di simile caricare dati.

Questa risposta è obsoleto, il Sistema di costruzione gradle e AAR Files Support Assets.

Altri suggerimenti

Questo è ora possibile utilizzando il sistema di build Gradle.

Testando con Android Studio 0.5.0 e v0.9 del plugin Android Gradle, ho scoperto che file come

MyLibProject/src/main/assets/test.html

sono correttamente impacchettati nell'applicazione finale e sono accessibili in fase di runtime tramite l'URL previsto:

file:///android_asset/test.html

Bene. Ho stressato e ho perso il sonno per un po '. Sono il tipo di persona che ama la creazione di API e odia una complicata integrazione.

Non ci sono molte soluzioni su Internet, quindi sono abbastanza orgoglioso di ciò che ho scoperto con un po 'di hackery di Eclipse.

Si scopre che quando si inserisce un file nella cartella /asset Android. L'APK target lo catturerà e lo posizionerà sulla radice dell'archivio APK. Pertanto, rendere fallito l'accesso generale. Questo può essere risolto semplicemente creando una libreria java grezza e posizionando tutte le risorse lì dentro, cioè (javalib) /assets/filex.txt.

A turno puoi quindi includerlo come sorgente di cartella percorso di build Java in Progetto> Proprietà> Percorso di build Java> sorgente> Link Source.

  1. Sorgente di collegamento
  2. Fai clic sulle variabili. e aggiungi nuova variabile, ie var_name_x. Posizione: ../../(relative_path_to_assets_project)
  3. Fare clic su OK

Ora, quando crei ed esegui la tua app, la cartella delle risorse nell'APK conterrà i tuoi file (libreria globale) come previsto.

Non è necessario riconfigurare gli interni Android o nulla. È tutto capace entro pochi clic di Eclipse.

Puoi raggiungere questo obiettivo creando un link simbolico nella cartella delle risorse del progetto che indica la directory nel progetto della biblioteca.

Quindi puoi accedervi come di seguito:

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

Confermo che l'approccio di Daniel Grant funziona almeno per la seguente situazione: Target Project non ha una cartella di risorse (o la cartella è vuota, quindi puoi eliminarla in sicurezza). Non ho configurato alcuna variabile. Basta configurare un LinkSource come segue (solo un esempio) LINKED Cartella Località:/Home/Matthew/WorksPace_MoonBlink/AssetsforadVocacy/Asset Nome cartella: Asset

"Assetsforadvocacy" è un progetto Java, (creato con New- Project - Java Project) con cartella SRC vuota e una nuova cartella denominata "Asset", che ora fornisce l'intera cartella delle risorse per il progetto target.

Questo è un modo abbastanza semplice all'interno di Eclipse per fornire un riutilizzo delle risorse in molti progetti diversi se non hanno già risorse, abbastanza buone da andare avanti. Probabilmente vorrei migliorarlo per diventare un fornitore di contenuti a lungo termine, ma è molto più sviluppo.

Il mio progetto accede alle risorse con il seguente codice: String AdvocacyFolderInASSET = "NO_SMOKING/"; // Una cartella sotto le risorse/stringa fn = advocacyFolderInASSET+ImageFileName; Bitmap pristinebitmapforadvocacy = getbitmapfromasset (contesto, fn);

Uso Motodev Studio 3.1.0 su Ubuntu. Non mi permetterebbe di "unire" una nuova cartella di risorse nel nuovo progetto solo a risorse in una cartella delle risorse esistenti nel progetto target.

Se desideri utilizzare una configurazione in cui vengono creati più prodotti derivati ​​da una libreria, potresti prendere in considerazione l'utilizzo di svn:externals o una soluzione simile nel tuo sistema SCM.Ciò farà anche sì che le risorse statiche come la guida in linea possano avere versioni separate dal codice sorgente di Android.

ho trovato questa domanda più vecchia, potrebbe anche aiutare te.

Questo è il modo ufficiale in cui Google utilizza per archiviare questo (dal post sopra): Collegamento

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top