Androidでリソースファイルをフォルダで分ける方法

Androidでリソースファイルをフォルダで分ける方法

みなさんこんにちは

最近Android開発を始めた、最近サーバサイドエンジニアからiOSエンジニアになったエンジニアです。

RubyOnRailsでのサーバサイド開発、iOS開発と経験したので次はAndroid開発をやりたいと申し出たところ、少しずつ案件に参加させてもらえるようになりました。
ランチェスターという会社はエンジニアのやる気に応えてくれる懐の深い会社だなと思いました(エンジニア募集中!)

Androidのことはさっぱりわからなかったのですが、iOS開発をやっていたおかげでまっさらな状態に比べると少しはスムーズに学べているという感じはあります。

今回は、リソースを分ける場合にどうやって分けたらよいか、悩んだ末に1つの案を見出したのでそれをご紹介します。

見出したと言っても、基本的には以下のURLを参考にしました。
https://medium.com/google-developer-experts/android-project-structure-alternative-way-29ce766682f0

リソースファイルを分ける対象となったプロジェクトでは、ひとまとまりの機能単位にパッケージを分けていて、その機能単位にリソースも分けたかったというのが始まりです。

上記のURLではリソースを画面単位に分ける例ですが、画面単位ではなく、ひとまとまりの機能ごとにリソースをわけました。
「ひとまとまりの機能」とは、ざっくりいうとBottomNavigationViewのいち項目(iOSでいうところのUITabBarController)くらいの単位です。

リソースファイルをフォルダごとに分ける設定

リソースファイルをフォルダ階層でわける事を考えたときに、そもそもリソースファイルをフォルダ階層で分けることが可能なのかと言うのが問題になりました。
通常ではリソースファイルをそのまま分けると読み込みが出来なくてエラーになります。

その為、リソースファイルをフォルダ階層で分けるには、build.gradleで以下のように読み込みディレクトリの設定をする必要があります。

sourceSets {
    main {
        res.srcDirs = [
            'src/main/res-main',
            'src/main/res-module/module1',
            'src/main/res-module/module2;
            'src/main/res-module/module3';
            'src/main/res-module/module4',
            'src/main/res-module/module5',
        ]
    }
    develop {
        res.srcDirs = [
            'src/develop/res-main'
        ]
    }
    staging {
        res.srcDirs = [
            'src/staging/res-main'
        ]
    }
    production {
        res.srcDirs = [
            'src/production/res-main'
        ]
    }
}

タブのいち機能= モジュールと定義して、共通部分をres-main 以下に配置して、機能単位のリソースをres-module以下に配置しています。

このままだとBuildVariantsごとのリソースを同じディレクトリ階層で配置できないため、developstagingproductionと環境別にも同じ階層で読み込めるように設定しました。

これで、実現したかったリソースのディレクトリわけが実現できました。

TAG

  • このエントリーをはてなブックマークに追加
金子 将範
エンジニア 金子 将範 rubyist

新しいことや難しい課題に挑戦することにやりがいを感じ、安定やぬるい事は退屈だと感じます。 考えるより先に手が動く、肉体派エンジニアで座右の銘は諸行無常。 大事なのは感性、プログラミングにおいても感覚で理解し、感覚で書きます。