2015-02-16 14 views
7

Ho sviluppato una preferenza personalizzata per un'applicazione. Ha due attributi personalizzati. Sto cercando di spostare la preferenza su un progetto di libreria da riutilizzare in altri progetti. Ho spostato il file Java con il layout corrispondente e attrito file XML. Ecco il file attr nel progetto di libreria:Impossibile trovare identificatori di risorse da AAR in XML

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <declare-styleable name="NumberPickerPreference" > 
     <attr name="minValue" format="integer" /> 
     <attr name="maxValue" format="integer" /> 
    </declare-styleable> 
</resources> 

Ecco il manifesto:

<manifest package="com.mydomain.androiduilibrary"> 
</manifest> 

Un dall'aspetto strano manifesto di sicuro. Quando ho generato il progetto di libreria, l'unica cosa che Android Studio ha inserito nel file manifest sono le informazioni su SDK, che hanno generato un avviso a riguardo già specificato nel file build.gradle, quindi ho eliminato la voce nel manifest.

Genero il file AAR utilizzando l'attività bundleRelease e ottiene un file denominato androiduilibrary-release.aar. Vado quindi al progetto che deve usare questa preferenza e selezionare "Nuovo modulo | Importa. JAR o. Pacchetto AAR", navigare fino alla RAA ed è ora nel mio progetto come modulo intitolato androiduilibrary-release. Apporto una dipendenza del modulo nella finestra di dialogo Struttura del progetto e ora posso fare riferimento al codice Preferenza in Java. Fin qui tutto bene.

Tuttavia, quando provo a fare riferimento alla preferenza in XML, ottengo il seguente errore sui miei attributi personalizzati: "Errore: (9) Nessun identificatore di risorsa trovato per l'attributo 'minValue' nel pacchetto 'com.mydomain.androiduilibrary' ". Ecco l'XML:

<PreferenceScreen 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:title="@string/location_service_settings_preference_header_title" 
    xmlns:custom="http://schemas.android.com/apk/res/com.mydomain.androiduilibrary"> 

<com.mydomain.androiduilibrary.NumberPickerPreference 
    android:title="@string/update_interval_preference_title" 
    android:key="@string/update_interval_preference_key" 
    android:defaultValue="@integer/update_interval_preference_default" 
    android:summary="@string/update_interval_preference_summary" 
    custom:minValue="@integer/update_interval_preference_min" 
    custom:maxValue="@integer/update_interval_preference_max" 
    android:dialogMessage="@string/update_interval_preference_dialog_message" 
    android:dialogTitle="@string/update_interval_preference_title" /> 

posso guardare all'interno della relazione annuale di attività e vedere che i valori sono popolando in R.txt:

int attr maxValue 0x7f010001 
int attr minValue 0x7f010000 

e che il suo manifesto è stato creato correttamente:

<?xml version="1.0" encoding="UTF-8"?> 

<manifest android:versionName="1.0" android:versionCode="1" 
    xmlns:android="http://schemas.android.com/apk/res/android" package="com.mydomain.androiduilibrary"> 

    <uses-sdk android:targetSdkVersion="21" android:minSdkVersion="11"/> 

</manifest> 

Viene visualizzato anche un avviso quando si chiama la preferenza personalizzata: "Elemento com.mydomain.androiduilibrary.NumberPickerPreference non è consentito qui", quindi suppongo che sarà anche un problema.

C'è un passaggio che mi manca che mi consenta di fare riferimento agli elementi dalla RAA nel mio XML? Sto usando Android Studio 1.0.2. Grazie in anticipo.

risposta

5

risolto da this post, in basso nella parte in cui si parla di librerie esterne. In sostanza, quando si fa riferimento agli elementi AAR nel codice lo si fa utilizzando il pacchetto specificato nel manifest di AAR, ma quando si fa riferimento agli elementi AAR in XML si cita lo spazio dei nomi del progetto (non l'AAR).

+0

Grazie mille! Questo funziona anche se strano. Stavo cercando di fare riferimento a una stringa in una libreria di aar utilizzando net.mydomain.mylib.R.string.foo, non ha funzionato. Come risposta R.string.foo, quale spazio dei nomi predefinito è quello del progetto, funziona! – Hong

Problemi correlati