読者です 読者をやめる 読者になる 読者になる

【Android/ShellScript】material-design-iconsからmipmapへコピーするスクリプト

Material iconsのアイコンを使うにあたり、 Androidのプロジェクトのmipmapにコピーをする必要がありますが、 種類やサイズがあって手動では少々面倒です。

アイコンのファイル名には規則があるため、シェルスクリプトを使うと便利です。

material-design-icons/[type]/*/ic_[name]_[color]_[dp].png

例えば、"hdpi"の"Action"の"3d rotation"のアイコンの"white", “24dp"にする場合、

material-design-icons/action/drawable-hdpi/ic_3d_rotation_white_24dp.png

となります。

これをもとに、スクリプトを使用してdrawable-を一通りmipmap-へコピーする場合、

type="action"
for name in {"delete","done"}; do
    copy $name $type $size white 24
done

のように指定します。

colorやdpの指定は以下から選びます。

  • color
    • black
    • white
  • dp
    • 18dp
    • 24dp
    • 36dp
    • 48dp

スクリプトは以下の通りです。

INPUT_DIR=${1}
OUTPUT_DIR=${2}

if [ $# -ne 2 ]; then
    echo "usage: ${0} [input directory path] [output directory path]"
    echo "ex) ${0} path/to/material-design-icons path/to/app/src/main/res"
    exit 1
fi

function copy(){
    #name, type, size, color, dp

    cp ${INPUT_DIR}/${2}/drawable-${3}/ic_${1}_${4}_${5}dp.png ${OUTPUT_DIR}/mipmap-${3}/ic_${1}_${4}.png
}


for size in {hdpi,mdpi,xhdpi,xxhdpi,xxxhdpi}; do
    
#   type="action"
#   for name in {"delete","done"}; do
#       copy $name $type $size white 24
#   done

#   type="content"
#   for name in "add"; do
#       copy $name $type $size white 24
#   done

done

コメント(#)の部分にコピーしたいアイコンを羅列していき、

./script.sh path/to/material-design-icons path/to/app/src/main/res

で実行するとコピーできます。

なお、mipmap側のファイル名にdpを省いています。必要であれば適宜書き換えてください。