2015-02-16 5 views
7

Opracowałem niestandardową preferencję dla aplikacji. Ma dwa niestandardowe atrybuty. Próbuję przenieść preferencję do projektu bibliotecznego, aby ponownie użyć go w innych projektach. Przeniosłem plik Java wraz z odpowiednimi plikami XML układu i attrasu. Oto plik attr w projekcie biblioteki:Nie można znaleźć identyfikatorów zasobów z AAR w 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> 

Oto manifest:

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

Dziwne wyglądające manifest na pewno. Kiedy wygenerowałem projekt biblioteczny, jedyną rzeczą, którą Android Studio umieścił w manifeście, były informacje SDK, które następnie wygenerowały ostrzeżenie o nim już określone w pliku build.gradle, więc usunąłem wpis w manifeście.

Generuję plik AAR za pomocą zadania bundleRelease i otrzymuję plik o nazwie androiduilibrary-release.aar. Następnie przechodzę do projektu, który musi korzystać z tej preferencji i wybierz "Nowy moduł | Importuj .JAR lub pakietAAAR", przejdź do AAR, a teraz jest w moim projekcie jako moduł o nazwie androiduilibrary-release. Tworzę zależność modułu w oknie dialogowym Struktura projektu i mogę teraz odwoływać się do kodu preferencji w Javie. Jak na razie dobrze.

Jednak, gdy próbuję odwołać się do preferencji w XML, pojawia się następujący błąd w moich niestandardowych atrybutach: "Błąd: (9) Nie znaleziono identyfikatora zasobu dla atrybutu" minValue "w pakiecie" com.mydomain.androiduilibrary " ". Oto 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" /> 

mogę zajrzeć do wnętrza AAR i zobaczyć, że wartości są wypełnianie w R.txt:

int attr maxValue 0x7f010001 
int attr minValue 0x7f010000 

i że jego manifest jest tworzony poprawnie:

<?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> 

Otrzymuję również ostrzeżenie podczas wywoływania niestandardowej preferencji: "Element com.mydomain.androiduilibrary.NumberPickerPreference nie jest tutaj dozwolona", więc przypuszczam, że będzie to również problem.

Czy brakuje mi kroku, który pozwoli mi na odniesienie elementów z AAR w moim XML? Używam Androida Studio 1.0.2. Z góry dziękuję.

Odpowiedz

5

Rozwiązano z posta this, na dole, gdzie mówi się o bibliotekach zewnętrznych. Zasadniczo, podczas odwoływania się do elementów AAR w kodzie robisz to za pomocą pakietu określonego w manifeście AAR, ale kiedy odwołujesz się do elementów AAR w XML, powołujesz się na przestrzeń nazw projektu (nie AAR).

+0

Wielkie dzięki! Działa to dziwnie. Próbowałem odwołać się do ciągu znaków w bibliotece aar, używając net.mydomain.mylib.R.string.foo, to nie zadziałało. Za twoją odpowiedź R.string.foo, która domyślna przestrzeń nazw jest tą z projektu, działa! – Hong

Powiązane problemy