2015-04-14 8 views
20

Ho lavorato su come accedere al file di risorsa di terze parti (file xml, immagini, riferito a here) da un modulo Android. È possibile farlo?in titanio, è possibile accedere ai file di risorse in bundle di terze parti (xml) da un modulo Android?

Poiché questi file di risorse sono chiamati con i file jar compilato-3rd-party, il che significa, io non sono in grado di utilizzare TiRHelper.getApplicationResource metodo nel codice Java nativo a meno che:

  1. de-compilo il vaso file in codice java.
  2. sostituire tutto il riferimento di risorsa nativo a TiRHelper.getApplicationResource
  3. ricompilare il codice sorgente java di terze parti nel file jar.

(Questo terzo progetto partito è https://github.com/ShareSDKPlatform/ShareSDK-for-Android/tree/master/Sample, posso facilmente compilare & eseguirlo. Si può vedere ci sono file di risorse nella cartella/res, e uno dei file jar utilizzati questi file di risorse.)

Ho cercato per un giorno intero ma non ho trovato risposta.

Ho ricevuto alcuni indizi dallo document ufficiale, provato ma non riuscito. l'errore mostra che la risorsa non è accessibile dal codice java del modulo in titanio.

inoltre, questa stessa domanda (http://developer.appcelerator.com/question/178857/unable-to-load-resources-from-3rd-party-librarys-resourced-in-android-module) non ha risposta.

questa risposta (http://developer.appcelerator.com/question/49671/android-r-references-in-appcelerator-module#answer-266726) mi dà un indizio che i metodi:

getResource() gives an Error 
getAndroidResource() gives an Error 
but getApplicationResource() DOES work 

e c'è un indizio che il 'apklib' può essere utile, ma dopo di leggere alcuni post, ho trovato è stato eliminato dal sito ufficiale di Maven. e ora Google consiglia di utilizzare il file 'aar'. Ma secondo questo numero ufficiale di Titanium (https://jira.appcelerator.org/browse/TIMOB-18565), non è ancora supportato dal titanio.

quindi, voglio sapere, è possibile lasciare che il codice java (ad esempio un'attività) acceda ai suoi file di risorse in bundle di terze parti (valore/string.xml o così) dal modulo Titanium? se è così, c'è qualche codice di esempio a cui posso fare riferimento?

grazie mille!

+0

Un file JAR NON contiene le risorse dalla cartella/res. Un file AAR (o apklib ai vecchi tempi) contiene anche le risorse come parte del pacchetto. Quando ricompilate il codice sorgente java di terze parti in un file jar, probabilmente state perdendo le risorse. – gkee

+0

@androidLearner yes, jar non contiene file di risorse e l'apklib funziona solo nella vecchia versione di Maven e il file aar non è ancora supportato da Titanium. Tuttavia, i file di risorse che sto menzionando sono i file nella cartella 'android/res' di un progetto Android nativo. Ho trovato la risposta. comunque, grazie per l'attenzione! –

risposta

9

(veloce & risposta breve:.. Inserire i file di risorse come parte del progetto "Titanium", ma non metterli nel "modulo" Se insisti mettendoli in "modulo", continuate a leggere)

Infine, ho ricevuto la risposta.

Il documento ufficiale è corretto, è sufficiente mettere i file di risorse di terze parti (cartella res di un progetto Android nativo) nella cartella android/platform/android del modulo in titanio. questo è tutto!

ad es. la mia struttura di progetto del modulo viene visualizzato come di seguito:

# name: test_ti_module_qq_login: 
android 
    \--assets 
    \--build 
    \--dist 
    \--lib 
    \--libs 
    \--src 
    \--platform 
    \--android 
     \--res # just put the resources here in your module! 
      \--drawable 
      \--drawable-hdpi 
      \--drawable-xhdpi 
      \--layout 
      \--values 
assets 
documentation 
example 
LICENSE 
... 

e Cordiali saluti, la cartella delle risorse nativo Android si presenta come:

# A native Android project structure 
▸ assets/   
▸ bin/    
▸ gen/    
▸ libs/   
▾ res/  # these are the bundled resource files 
    ▸ drawable-hdpi/  
    ▸ drawable-xhdpi/  
    ▸ layout/  
    ▸ values/  
    ▸ src/  

La causa principale che il motivo per cui titanio mantenuto mostra la resource files missing è che ho perso un po 'di i file di risorse. (Ma è un po 'dritto che il codice nativo demo può essere eseguito senza errori, qualunque sia, finalmente ho avuto la soluzione)

Inoltre:

Sembra che molte persone incontrate lo stesso problema? Aprirò il mio progetto in questi giorni.

+0

Ciao, hai un'idea su come lavorare con il file Manifest.xml di Android che è entrato nel file AAR? –

+0

Unisci quel file nel tiapp.xml del titanio. leggi di più sul suo documento ufficiale. –

3

Aggiornamento basato sulle nuove informazioni. Per farlo funzionare devi solo unire la cartella res da github alla tua piattaforma/cartella android/res. Quindi quando si compila il modulo normalmente.

===========================

Se accedi dal modulo in Java, provare a utilizzare TiRHelper.getApplicationResource per le cose che stai fornendo.

Così, per esempio se avete aggiunto:

piattaforme/android/Valori/strings.xml ciao!

La chiamata sarebbe

TiRHelper.getApplicationResource("string.helloworld"); 

Class Srouce

Javadoc

Se hai trovato questo, per favore up voti utili. Se no fammelo sapere, così posso adeguarmi.

+0

grazie Brad, la risorsa viene chiamata dai file jar di terze parti, ma non dai file java generati da Ti. Funziona bene nella sua Demo (progetto Android nativo). ma quando eseguo la migrazione al mio progetto ti, si lamenterà "nessuna risorsa trovata". –

+0

le risorse sono in bundle con i file jar di terze parti. –

+0

Hai accesso all'origine del modulo di terze parti? Se è così, vorresti compilarlo come una libreria e quando tutto è costruito dovrebbe essere analizzato. In caso contrario potrebbe essere necessario aggiungere le stringhe nei file delle risorse. –