62

Google で検索しましたが、関連する結果が見つかりませんでした。

また、Android の公式ドキュメントも確認しましたが、このページ(利用可能なすべてのリソース) だけが見つかりました。このページで見つけた関連リンク(ディレクトリへの) は次のとおりです。res/values/

これらのページは、ファイルについて何も伝えませんres/values/public.xmlこのタイプのファイルで見つけ
を次に示します。

小さなスニペット

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <public type="attr" name="commentTextColor" id="0xAA010007" />
    <public type="drawable" name="add_icon_bl" id="0xAA020000" />
    <public type="layout" name="act_date_picker" id="0xAA030001" />
    <public type="anim" name="activity_slide_from_bottom" id="0xAA040000" />
    <public type="xml" name="pref_menu" id="0xAA050000" />
    <public type="raw" name="alert_bell_animation_bl" id="0xAA060000" />
    <public type="array" name="taskRepeat" id="0xAA070000" />
    <public type="color" name="theme_main_color_bl" id="0xAA080000" />
    <public type="string" name="no_internet" id="0xAA0a0001" />
    <public type="id" name="page1" id="0xAA0d0015" />
</resources>

属性からわかるように、通常はディレクトリの下の個別のディレクトリtypeに配置するほとんどすべての標準リソースタイプが含まれています...res


Android が提供するディレクトリを悪用し、単一のファイルを使用してすべての値を保存する必要があるのはなぜでしょうか? 誰かがこれについてもっと情報を提供できますか?

4

3 に答える 3

94

ファイルres/values/public.xmlは、固定リソース ID を Android リソースに割り当てるために使用されます。

res/values/strings.xmlの文字列リソースの次のセットを検討してください。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="string1">String 1</string>
    <string name="string3">String 3</string>
</resources>

Android Asset Packaging Tool (aapt) は、アプリのコンパイル時に、これらのリソースに次のリソース ID を割り当てる場合があります。

public final class R {
    // ...
    public static final class string {
        public static final int string1=0x7f040000;
        public static final int string3=0x7f040001;
    }
}

次に、文字列リソースのセットを次のように変更します

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="string1">String 1</string>
    <string name="string2">String 2</string>
    <string name="string3">String 3</string>
</resources>

@string/string3のリソース IDが変更されていることがわかります。

public final class R {
    // ...
    public static final class string {
        public static final int string1=0x7f040000;
        public static final int string2=0x7f040001;
        public static final int string3=0x7f040002; // New ID! Was 0x7f040001
    }
}

これを防ぐには、res/values/public.xmlを使用できます:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <public type="string" name="string3" id="0x7f040001" />
</resources>

これにより、次のようにリソース ID が割り当てられます。

public final class R {
    // ...
    public static final class string {
        public static final int string1=0x7f040000;
        public static final int string2=0x7f040002;
        public static final int string3=0x7f040001; // Resource ID from public.xml
    }
}

リソースに割り当てられたリソース ID は重要ではないため、アプリケーションがres/values/public.xmlを使用することはほとんどありません。それらが変更されると、とにかくアプリケーション全体が再構築されるため、Java コード内のリソース ID によるリソースへの参照はすべて更新されます。

res/values/public.xmlの最も重要なユーザーは、Android プラットフォーム自体です。古いバージョンの Android に対してビルドされたアプリケーションは、特定のリソースに特定のリソース ID があることを前提としています。たとえば、@android:style/Theme古いバージョンのプラットフォームに対してビルドされたアプリとの後方互換性を維持するには、Android リソースに常にリソース ID 0x01030005 が必要です。

リソース ID の割り当て方法について詳しく知りたい場合は、次の回答を参照してください: Android リソースとリソース ID 間のマッピングはどのように機能しますか?

于 2012-02-20T07:57:03.887 に答える
9

https://developer.android.com/studio/projects/android-library.html#PrivateResources

public.xml は、ライブラリ プロジェクト全般に役立ちます。public.xml を含めると、残りのリソースは非公開であると見なされます。

プライベート リソースは他のプロジェクトで引き続き使用できますが、リンターはそれらの使用について警告し、AndroidStudio のオートコンプリートには含まれません。

public.xml を自動生成するための要点は次のとおりです https://gist.github.com/HannahMitt/99922d4183bdb03356fd339413ba6303

于 2017-01-10T22:14:30.370 に答える
3

OSコードの作成者がシンボリック名とシステムリソースID間のマッピングを定義するためだけのファイルではありませんか?

SDK の YOUR_SDK_LOCATION\platforms\android-??\data\res\values にあります。

向いてる

このファイルは、プラットフォームによってエクスポートされるベース パブリック リソースを定義します。これは常に存在する必要があります。

警告があります:

このファイルを変更する人への重要な注意事項 変更を行う前にこれをお読みください

このファイルは、リソースのバイナリ互換性を定義します。そのため、ここで変更を行うときは十分に注意する必要があります。そうしないと、古いアプリケーションとの下位互換性が完全に失われます。

などの記載があります。

<public type="attr" name="smallScreens" id="0x01010284" />
<public type="attr" name="normalScreens" id="0x01010285" />
<public type="attr" name="largeScreens" id="0x01010286" />

その中に - すべてのシステム リソース ID があるため、エントリを変更すると、標準デバイスで実行されない限り、コードが壊れます。

于 2012-02-19T11:32:32.233 に答える