AndroidプロジェクトでEclipseを使ってソース構成を変えずにパッケージ名のみサクッと変更する

同じAndroidソースを流用して、いくつかの別アプリとして運用したい、というケースがあります。その場合、アプリの識別子となるパッケージ名のみ変更する必要があります。

基本的にはAndroidManifest.xmlのpackage要素を変更するだけで良いのですが、R.javaなどはpackageに依存しているのでソース中の参照関係が崩れて、そのままだとビルドエラーになり、意外と面倒です。

手動でソースを一括置換するなどしてもよいのですが、Eclipseを使用しているならリネーム機能が備わっているので、以下の手順を踏めばサクッと変更できます。

ここでは例として以下のパッケージ名変更を行います。

jp.bpsinc.android.project -> jp.bpsinc.android.techracho

まずはビルドして、genディレクトリ以下を生成しましょう。以下のような構成になります。

gen以下を生成

パッケージエクスプローラ上のgen以下にある “jp.bpsinc.android.project” を右クリックし、Refactor -> Rename を選択します。変更内容を入力するダイアログが表示されるので、変更したいパッケージ名である “jp.bpsinc.android.techracho” を入力します。ここで、”Update references”を忘れずにチェックしておき、OKを選択してください。ソース中で “jp.bpsinc.android.project.R” を参照していた部分がすべて “jp.bpsinc.android.techracho.R” に置き換わります。

変更するパッケージ名を入力

これでソース中の参照関係は解決です。

あとはAndroidManifest.xmlを修正します。package要素を変更したいパッケージ名である “jp.bpsinc.android.techracho” へ変更しましょう。

[xml]
<manifest xmlns:android=”http://schemas.android.com/apk/res/android”
package=”jp.bpsinc.android.techracho”
android:versionCode=”1″
android:versionName=”1.0″ >
[/xml]

また、Activity名などを相対参照(”.”で始まる形)で指定している場合は、パッケージ名が基準となってしまいますので、実際のソース構成に合わせた絶対参照に変更します。

[xml]
<activity
android:name=”jp.bpsinc.android.project.MainActivity”
android:label=”@string/title_activity_main” >
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
[/xml]

上記では次のように変更しています。

.MainActivity -> jp.bpsinc.android.project.MainActivity

最終的に以下の形になります。

最終結果

これで完了です。念のためクリーンしてビルドしましょう。

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

satoshi

Androidいじりが多いです。iOS勉強したい。Windowsも。

satoshiの書いた記事

週刊Railsウォッチ

インフラ

Rubyスタイルガイドを読む

BigBinary記事より

ActiveSupport探訪シリーズ