2015-02-16 37 views
7

Tôi đã phát triển Tùy chọn ưu tiên cho một ứng dụng. Nó có hai thuộc tính tùy chỉnh. Tôi đang cố di chuyển Tùy chọn đến một dự án thư viện để sử dụng lại trong các dự án khác. Tôi đã di chuyển tệp Java cùng với bố cục tương ứng và lấy các tệp XML. Dưới đây là file attr trong dự án thư viện:Không thể tìm thấy mã định danh tài nguyên từ AAR trong 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> 

Dưới đây là các biểu hiện:

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

Một lẻ tìm manifest cho chắc chắn. Khi tôi tạo dự án thư viện, thứ duy nhất mà Android Studio đưa vào tệp kê khai là thông tin SDK, sau đó tạo cảnh báo về nó đã được chỉ định trong tệp build.gradle, vì vậy tôi đã xóa mục nhập trong tệp kê khai.

Tôi tạo tệp AAR bằng cách sử dụng tác vụ bundleRelease và nhận tệp có tên androiduilibrary-release.aar. Sau đó tôi đi đến dự án cần sử dụng Tùy chọn này và chọn "Mô-đun mới | Nhập .JAR hoặc .AAR Gói", điều hướng đến AAR và bây giờ trong dự án của tôi là một mô-đun có tên androiduilibrary-release. Tôi tạo phụ thuộc vào mô-đun trong hộp thoại Cấu trúc dự án và bây giờ có thể tham khảo Tùy chọn trong mã Java. Càng xa càng tốt.

Tuy nhiên, khi tôi cố gắng tham chiếu Tùy chọn trong XML, tôi nhận được lỗi sau về thuộc tính tùy chỉnh của mình: "Lỗi: (9) Không tìm thấy định danh tài nguyên cho thuộc tính 'minValue' trong gói 'com.mydomain.androiduilibrary' ". Đây 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" /> 

tôi có thể nhìn vào bên trong các AAR và thấy rằng các giá trị được đưa vào các R.txt:

int attr maxValue 0x7f010001 
int attr minValue 0x7f010000 

Và đó biểu hiện của nó đã được tạo ra một cách chính xác:

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

Tôi cũng nhận được cảnh báo khi gọi tùy chọn tùy chỉnh: "Element com.mydomain.androiduilibrary.NumberPickerPreference không được phép ở đây" vì vậy tôi đoán rằng đó cũng là một vấn đề.

Tôi có thiếu một bước nào để cho phép tôi tham chiếu các phần tử từ AAR trong XML của tôi không? Tôi đang sử dụng Android Studio 1.0.2. Cảm ơn trước.

Trả lời

5

Giải quyết bài đăng từ this bài đăng, ở cuối trang nơi thư nói về thư viện bên ngoài. Về cơ bản, khi tham chiếu các phần tử AAR trong mã bạn làm như vậy bằng cách sử dụng gói được chỉ rõ trong tệp kê khai của AAR, nhưng khi tham chiếu các phần tử AAR trong XML, bạn trích dẫn không gian tên của dự án (không phải là AAR).

+0

Cảm ơn rất nhiều! Điều này làm việc mặc dù kỳ lạ. Tôi đã cố gắng tham chiếu một chuỗi trong một thư viện aar bằng cách sử dụng net.mydomain.mylib.R.string.foo, nó đã không hoạt động. Theo câu trả lời của bạn R.string.foo, không gian tên mặc định nào là của dự án, hoạt động! – Hong

Các vấn đề liên quan