イモケンピウスの辞書

脳の記憶容量がフロッピーディスク2枚分しかないのでここに残しておくことにしました。Android、Unityについての記事が多いです

retro lambdaとData Bindingの設定がこんなに簡単だとは思わなかった

Android Studioを起動して新しくアプリでも作ろうかなと思いまして。

全然触ったことないけど気になってたライブラリや設定を試してみようかと思いまして。

設定周りと言えば、毎回バージョン管理しなくていいファイルをgitignoreするときは下記を参考にしてます。

【Android】もっと先へ「加速」したくはないか、少年 〜gitignore編〜

retro lambda (レトロラムダ)導入

retro lambda (レトロラムダ)はAndroid開発では使えないJava8の機能を使えるようにしたライブラリ。

setOnClickListenerメソッドなどを簡単に書けるようになる。

ただ先日Android Studio 2.2 が正式に発表されたけど、2.2にアップデートしたらJava8の機能が使えるみたい。

今後retro lambda (レトロラムダ)はなくなっていくかもしれぬな。

  • 下記サイトに従って導入

RetroLambda 導入手順

すげー簡単、超分かりやすい。

Data Binding Library (データ バインディング)導入

公式ガイド

データバインディングは正直、

findViewByIdメソッド地獄から抜け出すためのもの

くらいにしか認識してなかった。

でも下の記事を見るとかなりいろんな事が出来そうです。(ちょっと内容が古い部分があります)

ちなみに他の「findViewByIdメソッド地獄抜け出しライブラリ」はButter Knifeがあるけど使ってないです。

では導入。

導入条件

  • Android 2.1 以降(API level 7+)
  • Android Plugin for Gradle が 1.5.0-alpha1以上

設定

  • appモジュールのbuild.gradleに下記、追加
android {
    ....
    dataBinding {
        enabled = true
    }
}

これだけ。うそだろ!!

おしまい

Unityを使ってAndroid用のカジュアルゲームを開発しました

アプリ公開したってよ

このたび、趣味で開発していたアプリが無事完成し、先日PLAYストアに公開しました。

と言っても、公開からすでに1か月ほど経ってます。

忘れないうちに開発環境等をまとめておきます。

アプリ紹介

まずは完成したアプリのお披露目をさせてください。

アプリ名:ZOROME

play.google.com

どんなゲームかと言いますと、

「サイコロを転がしてゾロ目が出たらクリア!」

というシンプルでいて、しつこくなく、口どけさわやかな内容に仕上がってます。

↑のリンクを開くとGoogle Playのページに飛ぶんですが、

アプリのタイトルが「運だめしゾロ目サイコロアプリ。今日の運勢を占おう!」と結構長かったりします。

これはいわゆるASO(App Store Optimization)、要はストアで見つけてもらいやすくするための対策です。

この辺りも後ほど書きたいなと、おもてます。

開発環境

では、お次は開発環境をば。

人数

人数は一人です。つまり僕だけ。

企画、デザイン、開発、リリース、運営、全部ひとり。

ぼっちでも、ゲームは作れる

ちなみに僕は社会人になって独学でプログラミングを覚えたへっぽこプログラマーです。

プログラミング以外は初心者!

環境

まさかの2台使い、基本はWindowsですが素材作りはソフトの問題でMacを使用しました

  • Unity ver 5.3

スマホゲームを作るなら、Unityがないと始まりません。

料金無料のパーソナルを使ってます。

  • Affinity Designer

UIやストア用の素材はこのソフトを使用して作りました。Macのソフトです。

もうね、イラストの才能がない自分にとって素材作りは地獄そのもの。

頭の中のイメージと出来上がった成果物のギャップがありすぎて枕を濡らした夜は数え切れません。

こちらは以前セールの時に購入した(3000円くらいだったかな)のを思い出し使用。

Windows版も見つけたのですが、わざわざ買ったものを使用しないのもアホなので、

このソフトを使用するときだけはMBPを開きましたとさ。

Affinity Designer

これがあったからアプリ全体の見た目レベル(=プロっぽさ)はかなり上がりました。

結構おすすめです。

  • Git

ぼっち開発ですが一応バージョン管理してます。 Bitbucketにレポジトリを作成してます。

収益形態

これですよ。

アプリを作る以上、夢見てしまいますよね。

収益形態はいくつかあると思います。

  • 有料アプリとして公開

  • アプリ内課金

  • 広告

などですかね。

ZOROMEは無料アプリです。

有料アプリにして売れる自信がまったくないからです。

アプリ内課金もありません。

というか、アプリ内で課金するほどのコンテンツもありません!

なので、

広告収益で一攫千金を目論んでいます。

広告の種類も様々あるようですね。

こちらのサイト様の記事が参考になるかと。

このうち、ZOROMEでは

  • バナー広告
  • オファーウォール広告
  • ビデオ広告

を採用しました。

ビデオ広告は上記の記事には入ってないですが

全画面広告の仲間になるのかな?わからん

それぞれ別のプロバイダーの広告を使用してます。

バナー広告:Admob

AdmobはGoogleのサービスの一つ。

ZOROMEはゾロ目が出るまでサイコロを振り続けます。もちろんゾロ目はすぐには出ません。

ゆえに一度始めるとなかなかやめられない = 滞在時間が長めなので、プレイ中画面下で表示し続けるバナー広告は相性が良いと判断しました。

オファーウォール広告:GAME FEAT

GAME FEATさんのオファーウォール広告。

こちらの会社のオファーウォール広告を使うのには大きな理由があります。

それは、「相互送客」機能が利用できること。

この機能を使用すれば、

他のGAME FEATさんのオファーウォール広告を実装しているアプリでウォールが表示されたとき、無料枠に自分のアプリが表示されます。

しかも、無料。(有料枠もあり)

無料で広告枠をもらえるってすごくないですか。

ありがたや。

動画広告:Unity Ads

Unity純正の動画広告です。

unityads.jp

純正だけあって、実装が恐ろしいほど簡単です。

ほんの2~3ステップで動画広告がアプリに実装されるって・・・。まじかよ。

以上。

とりあえず簡単なまとめは以上です。

次はより掘り下げて記事にしてみます。

もし「ここもう少し詳しく知りたい」と感じた方は遠慮なくお知らせください。

SwipeRefreshLayoutを引っ張ったとき以外も出したい

画面を下に引っ張ったら出てくる"ぐるぐる"を引っ張らなくても出したいとき

setRefreshing()でいけそうだが、それだけではダメみたい

swipeRefreshLayout.post(new Runnable() {
    @Override
    public void run() {
        swipeRefreshLayout.setRefreshing(true);
    }
});

こんな感じで囲んであげるといけました。

参考 SwipeRefreshLayout setRefreshing not showing indicator initially

AndroidSupportLibraryを23.2.0にしたらRecyclerViewのアイテムの間に大きなスペースができる不具合

どうやらリストのアイテムのViewがmatch_parentなのがいけないようで

wrap_contentにしたら正常に表示されました。

どうやら今回のアップデートでおかしくなったのではなく 以前までの挙動がおかしくて、それが正常にFIXされた感じみたいですね。

参考: * Android recylerview v.23.2.0 & design library v.23.2.0 are broken

Typetalk用Botを作成する ~hubot入門その3 古いパソコンの復活~

これまでのあらすじ

前回の続きです。

前回までで目標であった「Typetalk用Botを作成しHeroku上で実行する」は一応達成しました。

が、不十分不完全燃焼の結果と言わざるを得ませんでした。

なぜならHerokuの無料プランの制限(6時間スリープ問題)に引っかかり「毎朝起こさないと起きない低血圧hubot」が爆誕してしまったからです。

今回、解決策を模索し、いっそレンタルサーバーを借りてそこでBotを実行しようかとも思ったのですが 昔のパソコンにubuntuぶちこんだことを思い出しました。

古くて使わなくなったパソコンをhubotサーバーとして使えばいいんじゃね?と。

そこでメリットデメリットを洗い出すことにしました。

メリット

  • お金かからない
  • 24時間稼働
  • 好きに使える

デメリット

  • 少し動作が重たい
  • 時間が経つと電源アダプターがあっつい

アダプターの熱以外で、やらない手はないかなと。

早速導入してみました。

続きを読む

Typetalk用Botを作成する ~hubot入門その1~

環境 Mac OS X 10.10.5

備忘録です。 Typetalkとはメッセージのやり取りを行うチャットサービスです。

Botとは人間に変わって作業を定期実行してくれるプログラムのことで Twitterなんかでは定期的になにかしらつぶやくアカウントのことをBotと呼びます。

今回はGit hub が公開しているチャットBot作成フレームワークhubotを使用して、

  • 9時に「おはよう」
  • 5時半に「お疲れさまでした」
  • 毎週月・木に「今日は燃えるゴミの日です」

と、Typetalkに書き込みをするBotをHeroku上に作成します。 今回はTypetalk上で書き込みをするとローカルで実行したBotが反応してくれるところまで。

続きを読む

Picassoでストレージから画像読み込む

こんばんわ

今回は備忘録です。

Android開発者にとって頼もしい存在Square大先生のライブラリ「Picasso

ImageViewを使用した画像を表示する過程をすんげえ簡単にしてくれます。 すんげえ簡単になるし、めんどくさい手間みたいなのを代わりに背負ってくれるのですんげえです。

サーバー上の画像を非同期で表示するのが一般的な使用法っぽいのですが 向き先はサーバー以外にも自身のストレージに保存された画像もOKみたいです。

忘れないようにメモメモ。。

// ContentResolverを使用してストレージにアクセス
ContentResolver resolver = context.getContentResolver();
Cursor cursor = resolver.query(
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
        null, null, null, null);
cursor.moveToFirst();

ArrayList<Uri> list = new ArrayList<>();
// 一枚一枚見ていく
for (int i = 0; i < cursor.getCount(); i++) {
    long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media._ID));
    // 画像のURIを取得
    Uri imageUri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, String.valueOf(id));
    
    // URIをリストに追加
    list.add(imageUri);

    cursor.moveToNext();
}
cursor.close();

あとはリストの中のURIをPicasoインスタンスのloadメソッドに渡すだけ。

Picasso.with(context).load(imageUri).fit().into(imageView);

すんげえ簡単

AndroidStudioでGreenDaoジェネレーター作成

はじめに

AndroidでDBを操作する時に使用するSQLite。 普通に使うと管理とか色々面倒です。 そこでGreenDao。いわゆるORMってやつです。

今回はAndroidStudioのプロジェクトにGreenDaoを導入してみます。 GreenDaoでDBを操作する段階に進む前に、 まずジェネレーターを作成して、 ジェネレーターにDBのテーブル内容に合わせたORMを作成させねばなりません。 逆に言えばジェネレーターを作成して、ORMを作ってしまえば導入完了どっからでもかかってこいや状態になるわけですね。 では、導入です。

続きを読む