6
4

More than 1 year has passed since last update.

Android Studio でプロジェクトを作成後にリネームする

Last updated at Posted at 2022-02-15

ささいなことではあるのですが
Android Studio でプロジェクト作成後に,
ちょっと気に入らないとか typo を後で発見したという理由で,
プロジェクト全体の名前をリネームしたいときがあるかもしれません.

実際,適当なプロジェクトをつくって
名前を変えたいなと後で思ったのですが,
実際のところ意外と面倒であるということが分かったので,
あまりオススメされないとは思うものの
どんなものかメモとして書き残そうと思います.

まず,そのままリファクタしてみよう

myproject1 というプロジェクトを mysuperproject1 にリネームすることを考えます.

プロジェクトとしてルートモジュールを Refactor > Rename... からリネームできそうなので試みるのですが,
実はこれはできないということがわかります:

myproject1_–MainActivity_kt__myproject1_app-2.png

Screen Shot 2022-02-14 at 20.33.42.png

Screen Shot 2022-02-14 at 20.33.48.png

Can't rename root module となり,
この方法でルートモジュールはリネームしてくれないのです.
(遊び半分で実行してほしくないのかもしれません)

プロジェクト名をリネーム

絶対リネームできないのかというと,実はそういうわけでもなくて,
いくつかのステップを踏めばリネームはできなくはないということです.

settings.gradlerootProject.name がプロジェクト名になるということで
(https://pleiades.io/help/idea/gradle.html#convert_project_to_gradle)
まずこれを変更します:

myproject1_–settings_gradle__myproject1.png

mysuperproject1_–settings_gradle__mysuperproject1.png

その後,Gradle 関連の変更を同期するために Sync Now します:

myproject1_–settings_gradle__myproject1-2.png

そうすると,プロジェクトツリーのルートの表示が変化して,
リネームされたのですよ,という感じになります:

mysuperproject1_–settings_gradle__mysuperproject1.png

ただし,表示からなんとなくわかるように,
この状態ではディレクトリ名は一致していません.

プロジェクト名を変更したいほどの人であれば
きっとディレクトリもリネームしたいと思いますから,
プロジェクトをクローズして mv なりでリネームし,
再度リネームされたプロジェクトを開きます.

そうすると,表示がいつもどおりになって一致します:

mysuperproject1_–settings_gradle__mysuperproject1-2.png

パッケージをリネーム

ここまでで満足した人はここまでで OK です.

お気づきだと思うのですが,
たいていパッケージ名にも含まれているプロジェクト名はそのままで,
きっとパッケージもリネームしたいと思うでしょう.

その場合は,ツリーからパッケージもリネームします:

mysuperproject1_–settings_gradle__mysuperproject1-4.png

ところで,このリネームにはこれくらいの影響があるということがわかりますので,
大丈夫そうであることを十分確認して実行します:

mysuperproject1_–settings_gradle__mysuperproject1-5.png

このリファクタを実行すればパッケージはリネームされ,
見えている範囲はおおむね良好になります:

mysuperproject1_–_MainActivity_kt__mysuperproject1_app__and_20220214.png

ほかをリネーム

ほかはプロジェクト名を含むリテラルであるとか,
テンプレートから生成されたコードの一部であったりします:

mysuperproject1_–_MainActivity_kt__mysuperproject1_app__and_20220214.png

たとえば生成されたテーマが MyAppTheme とかになっているのが例で,
ひょっとすると ここも変更したいと思うかもしれません.

プロジェクト名が fun みたいな
よく使われるキーワードだったらヒットしまくって厳しそうですが
Find in Files... で検索して
必要な箇所を同様にリファクタでリネームします.

build.gradleapplicationId は触ってよいのか不安だと思うのですが後述します.

慎重になるべきリネーム

よく認知されているように アプリケーション ID まで変えるのは
アプリケーション ID を設定する | Android Developers」にあるように,
アプリ自体が別物として扱われるというのが容易に想像できていると思います.

アプリケーション ID を変更すると、Google Play ストアは新しいバージョンのアプリをまったく別のアプリとして扱います。
そのため、アプリを公開したら、絶対にアプリケーション ID を変更しないでください

サンプルして含まれる Context.packageName
ハードコードされた名前を比較するインストゥルメント化テストを実行すると,
当然リネーム後は一致しなくなりますし:
(このためにあったのではないかと思うくらいピッタリなテストですね)

mysuperproject1_–ExampleInstrumentedTest_kt__mysuperproject1_app.png

mysuperproject1_–ExampleInstrumentedTest_kt__mysuperproject1_app-4.png

アプリとしても完全に別物になりますね:

mysuperproject1_–build_gradle___app-2.png
(区別できるように android:label を変更してあります)

なので,ここまでリネームするケースは,
まだ公開していないプロジェクトに限られると思います.
既存の公開済みアプリでこの影響を承知で
すべてを完璧にリネームしたい開発者はいないのではないかと思えます.

ところで一方,AndroidManifest.xmlpackage は変更できて
パッケージと一致していないといけないということです:

プロジェクトのパッケージ名は、デフォルトでアプリケーション ID と一致していますが、変更することもできます。ただし、パッケージ名を変更する場合は、以下の例に示すように(プロジェクトのディレクトリ構造で定義されている)パッケージ名が AndroidManifest.xml ファイル内の package 属性と常に一致する必要があることにご注意ください。

パッケージ名を完全にリファクタリングする場合は、必ず package 属性も更新してください。Android Studio のツールを使用してパッケージの名前を変更してリファクタリングすれば、パッケージは自動的に同期が維持されます

このように build.gradleapplicationId に限らず,
アプリケーション ID のような箇所は影響を調べて慎重になる必要があるでしょう.

最後に

僕はビルドシステムを理解しているとはいえないですし,
見様見真似でこれで本当にうまくいっているのかも謎なので,
この手順を行う場合は自己責任でお気をつけください.

名前をつけるのは難しいことだと思うのですが,
プロジェクト開始時に時間をかけてでも
気に入る名前やコードネームをつけておけるに越したことはないですね.

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4