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ę.
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