Это отлично работает для меня в API 23
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<item
android:icon="@drawable/ic_menu"
android:orderInCategory="100"
android:title="Option Menu"
app:showAsAction="always">
<menu>
<item
android:id="@+id/action_myorder"
android:icon="@drawable/ic_order"
android:title="My Order" />
<item
android:id="@+id/action_myaccount"
android:icon="@drawable/ic_account"
android:title="My Account" />
<item
android:id="@+id/action_share"
android:icon="@drawable/ic_share"
android:title="Share" />
<item
android:id="@+id/action_term_condition"
android:icon="@drawable/ic_terms"
android:title="Term and Conditions" />
<item
android:id="@+id/action_logout"
android:icon="@drawable/ic_logout"
android:title="Logout" />
</menu>
</item>
Это все один и тот же файл, поэтому du (1) не считает их несколько. (Это требуется в спецификации POSIX .) Вы увидите это, если запустите ls -i
в каталоге: у каждой команды будет один и тот же номер, где этот номер однозначно идентифицирует фактический основной файл в диск.
Как работает Busybox, есть один двоичный файл, который предоставляет все встроенные команды, и когда он запускается, он смотрит на имя, которое он запустил, чтобы решить, что делать. Команда ln (1) по умолчанию создаст жесткую ссылку или альтернативное имя для существующего файла:
# copy a to b1; if you delete a then b1 is still intact
cp a b1
# b has the name of a; if you delete a then b2 is "dangling"
ln -s a b2
# b3 is a; if you delete a then b3 is fine; if you change a you change b3 too
ln a b
ls -li
Так sh
, cp
, busybox
, [ 116] и т.д. это буквально все один и тот же (компактный) файл, и поэтому образ Docker (или загрузочный носитель) на основе Busybox такой крошечный.