10-1. Android

Android の開発

Android は Linux 上に Javaの仮想マシンである Dalvik仮想マシンを載 せたものです。 GUI は Activity というタッチパネルを活用したもので、Swing や JavaFX とは違います。 定数などはリソースとして定義できるため、プログラムに定数を置く必要 がありません。

開発は基本はPCなどを使うクロス環境で、エミュレータも配布されてます ので、実機がなくても開発できます。 ただ、様々な画面サイズやOSのバージョンがあります。 これに対して様々な組み合わせでエミュレータを起動できます。 動作できる装置が多い程よいので、可能な限り古いバージョンで製作します。 但し、端末の性能が

android.support.v7.app.AppCompatActivity

AppCompatActivity のドキュメント は公式ページにあります。 FragmentActivityを継承し、 AppCompatCallback, TaskStackBuilder.SupportParentable, ActionBarDrawerToggle.DelegateProvider を実装しています。 マニュアルによると大量のメソッドを実装しているので、単一クラスでプログ ラムを作成することもできますが、プログラムが複雑になります。

プログラムが実行される際、次のようにメソッドが呼び出されますので、 適宜オーバライドしてプログラムを作成します。

  1. 起動時に onCreate() メソッドが一回だけ起動されます。
  2. 次に onStart() メソッドが呼び出されます。 これは、他のアプリケーションに切り替えたときにonStop()が呼ばれ、 再度このアプリケーションに切り替えられた時、onRestart()が呼び出 された後にも呼び出されます。
  3. onResume()が呼び出されます。これは、画面の一部が隠され、アプリケー ションの操作ができなくなるときに onPause()が呼び出され、再度操作 が戻ってきたときにも呼び出されます。
  4. さらに、アプリケーションが破棄される時に呼び出される onDestroy() もあります。

このすべてのメソッドをオーバライドする必要はありません。 リアルタイム性のあるゲームなどでは、 onResume でゲームを動かし、 onPause で止めるようにします。 また、他のアプリに移った後、メニューに戻るなどの操作をするときは、 onRestart, onStart を使います。

演習10-1

AdventureSample を取得し、シーンを追加する

プログラムの取得

  1. File→New→Project From Version Control→Gitを選ぶ
  2. URLにgit://edu.net.c.dendai.ac.jp/git/spro/10/1を入れ、Clone ボタンを押す

テスト

プログラムを起動し、正常に表示されるかを確認する。 また、途中で Home ボタンを押し、再度プログラムを起動し、 「続きから」を押して元のシーンに戻ることを確認する。 また、言語を英語にして、正常に動作することを確認する。

文字列リソースの追加

Android を Packages に切り替えて、以下のファイルに追記する。

app/values/strings.xml
<string-array name="message3">
  <item>Even though I studied hard, it is still difficult for me to understand.</item>
  <item>I wander it may turn out bad, if I leave this.</item>
</string-array>
<string-array name="question3">
  <item>Ask the teacher.</item>
  <item>Still study hard by myself.</item>
</string-array>
<string name="date3" translatable="false">12/18/2014</string>
app/values-jp/strings.xml
<string-array name="message3">
  <item>まじめに勉強したけどすっごい難しい。</item>
  <item>このままじゃまずいかも</item>
</string-array>
<string-array name="question3">
  <item>先生に聞きに行く</item>
  <item>それでも一人で頑張る</item>
</string-array>
  

画像リーソスの追加

画像ファイル third.pngをダウンロードする。

Packages の画面にし、 app/drawable-hdpi フォルダにコピーする。

scene/GameState.java

second と ending の間に third を入れる。

scene/Third.java

Packages を再び Android に変更して以下の手順を行う。

  1. scene/Second.java をコピーする
  2. scene パッケージにペーストするとクラス名を聞かれるので、 Third を指定する(その後 Git に追加するか聞かれるのでyes を選択す る)
  3. 下記のようにプログラムを変更する。
    
    package jp.ac.dendai.c.jtp.adventuresample.scene;
    import android.app.Activity;
    import jp.ac.dendai.c.jtp.adventuresample.R;
    public class Third extends AbstractScene {
        public Third(Activity _activity) {
            super(_activity);
        }
        @Override
        public GameState next(int no) {
            switch(no){
                case 0:
                    return GameState.ending;
                case 1:
                    return GameState.ending;
            }
            return null;
        }
        @Override
        public int getImageId() {
            return R.drawable.third;
        }
        @Override
        public int getMessageId() {
            return R.array.message3;
        }
        @Override
        public int getQuestionId() {
            return R.array.question3;
        }
        @Override
        public int getDateId() {
            return R.string.date3;
        }
    }
    

scene/Second.java

switch文の中の return GameState.ending;return GameState.third; にする。

Game.java

slist の定義の中で、 new Second(mainActivity), の次の行に new Third(mainActivity), を追加する。 この時、scene.Third をimport するか聞かれるので alt+Enter を押して import jp.ac.dendai.c.jtp.adventuresample.scene.Third; をファイル冒頭に追加する。

テスト

プログラムを起動し、追加したシーンが正常に表示されるかを確認する。 また、追加したシーンで Home ボタンを押し、再度プログラムを起動し、 「続きから」を押して元のシーンに戻ることを確認する。 また、言語を英語にして、正常に動作することを確認する。

Android Studio が git のプログラムを認識しない

未解決だが、下記のようにすると解決する場合がある

  1. project window のタブで project を選ぶ
  2. AdventureSample フォルダの直下に new→File で reimport.bat という名前で新しいファイルを作成する
  3. 以下を記入する
          
    del *.iml
    del .idea
    echo include ':app' > settings.gradle
    
  4. AdventureStudio を右クリックして open in terminalを選ぶ
  5. reimport.bat を開いたterminalで実行し、 .imlファイル、 .idea フォルダを消し、 settings.gradle ファイルを作る
  6. プロジェクトを閉じる
  7. new→import project で再び AdventureStudio フォルダを選ぶ