10

アプリケーションのカスタム設定を開発しました。2 つのカスタム属性があります。プリファレンスをライブラリ プロジェクトに移動して、他のプロジェクトで再利用しようとしています。Java ファイルを、対応するレイアウトおよび属性 XML ファイルと一緒に移動しました。ライブラリ プロジェクトの attr ファイルは次のとおりです。

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

マニフェストは次のとおりです。

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

確かに奇妙に見えるマニフェスト。ライブラリ プロジェクトを生成したとき、Android Studio がマニフェストに入れる唯一のものは SDK 情報であり、build.gradle ファイルで既に指定されているという警告が生成されたので、マニフェストのエントリを削除しました。

bundleRelease タスクを使用して AAR ファイルを生成し、androiduilibrary-release.aar という名前のファイルを取得します。次に、この設定を使用する必要があるプロジェクトに移動し、[New Module | Import .JAR or .AAR Package] を選択して AAR に移動すると、androiduilibrary-release という名前のモジュールとしてプロジェクトに含まれるようになりました。プロジェクト構造ダイアログでモジュールの依存関係を作成し、Java コードで設定を参照できるようになりました。ここまでは順調ですね。

ただし、XML でプリファレンスを参照しようとすると、カスタム属性で次のエラーが発生します。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" />

AAR の内部を見ると、値が R.txt に取り込まれていることがわかります。

int attr maxValue 0x7f010001
int attr minValue 0x7f010000

そして、そのマニフェストが正しく作成されていること:

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

カスタム設定を呼び出すと、「要素 com.mydomain.androiduilibrary.NumberPickerPreference はここでは許可されていません」という警告も表示されるので、それも問題になると思います。

XML で AAR の要素を参照できるようにするために、欠けている手順はありますか? Android Studio 1.0.2 を使用しています。前もって感謝します。

4

1 に答える 1

6

外部ライブラリについて説明している下部のこの投稿から解決しました。基本的に、コードで AAR 要素を参照する場合は、AAR のマニフェストで指定されたパッケージを使用しますが、XML で AAR 要素を参照する場合は、プロジェクトの名前空間を引用します (AAR ではありません)。

于 2015-02-17T02:25:22.317 に答える