やまものブログ

メモ書きブログです (^_^;A

The Public type MainActivity must be defined in its own file

ADT (Android Developer Tools) は SIGSEGV の問題はあるものの、とりあえず設定は終ったことにしたので、いよいよ、
の内容に着手することにします。

CHAPTER 01 と 02 は、ADT の環境設定や使い方(デバッグ含む)なので、アプリ開発の題材としては、
CHAPTER 03 メモ帳アプリを作ろう
が最初になります。

この CHAPTER 03 は LESSON 11~13 で構成されています。
さらに、次の CHAPTER 04 も
CHAPTER 04 メモ帳アプリに機能を加えよう
ということで、同じ「メモ帳」を題材として、LESSON 14~17 で構成されています。

「メモ帳」を一気に完了、つまり、LESSON 17 まで完了したいと思ったのですが、現時点では、LESSON 11 だけで精一杯でした

LESSON 11 はそれらしく実施できました。内容は、ADT にて Layout の XML を作成して、テキストとかボタンを並べます。XML は概ね本に掲載されたコードと同じように作ることができたのですが、結果のレイアウトが本に掲載されたものとなんか違いました。

LESSON 11 では上述のサイトからダウンロードしたファイル android10.lzh から、サンプルのプロジェクトを import  して作業を始めます。なお、android10.lzh  の解凍作業については、前回のブログで記載しています。

この本、3年以上以前に出版されたものなので、ダウンロードしたプロジェクトもそのままでは import できず、下記3つの変更が必要でした

1) androidmanifest.xml のファイル名変更
【変更後のファイル名】 AndroidManifest.xml (’A'と’M'を大文字に変更)

2) AndroidManifest.xml  の SDK バージョンを変更(22行目)
【変更前】  android:minSdkVersion="9" />
【変更後】  android:minSdkVersion="16" />

3) src/jp/co/se/android/chapter03/mainactivity.java のファイル名変更
【変更後のファイル名】 MainActivity.java (’M'と’A'を大文字に変更)


各変更内容について補足です。

1) の変更が無いと、import する際に、Android プロジェクトとして認識されません。

2) は、import で下記の警告がでるので、その対策です。
Unable to resolve target 'android-9'
SdkVersion を 16 に変更したのは、
Android 4.1.2 (API 16)
を意味しています。このバージョンを選んだ理由は、この書籍には第二版
があって、そのサンプルが対応しているバージョンだからです。第二版は購入していません(翔泳社さん、ゴメンナサイ)が、ファイル Android2.zip はダウンロードできて、プロジェクトもいくつか試した範囲では import できます。なので、初版での import エラーを対策する際に、参考にできると期待してバージョンを合わせてみました。このために、SDK Manager で API 16 のパッケージもインストールしました。なお、書籍の内容について、目次を見る限りは、作成するアプリは初版と異なっています。ですので、初版の本を、第二版のダウンロードファイルを題材に進めることはできません。

3) はこのブログ記事のタイトルにしました
The Public type MainActivity must be defined in its own file
の対策です。このエラーメッセージ自体は、 Java では Public なクラスは1ファイルに1つしか定義できないという意味です。しかし、今回、問題になった MainActivity.java にはクラスが1つしか定義されていません。そもそもこのエラーになるはずがなかったのです。そこで、当てずっぽうで、ファイル名の大文字・小文字をクラス名に合わせてみたところ解決した次第です。多分、ADT が裏でせっせと働いてくれている結果なのでしょう。


以上のとおりで無事に import ができたので、LESSON 11 の本題である Layout ファイルの作成作業を実施しました。とりあえず、
・ADT(Eclipse) のメニューがやや異なる
XML にいくつか警告が出たので対策した
・結果の Layout がなんだか違う
といった微妙な差異はあるものの、概ね記載された手順は実施することが出来ました

この後、LESSON 17 まですんなり進めるといいなぁ~