ぼくのかんがえたふつうのあんどろいどかいはつ
-
Upload
yukiya-nakagawa -
Category
Technology
-
view
1.591 -
download
2
description
Transcript of ぼくのかんがえたふつうのあんどろいどかいはつ
ぼくのかんがえたふつうのあんどろいどかいはつ
ウォーターセル株式会社 中川 幸哉
2012.11.3
新潟オープンソースセミナー 2012
自己紹介• 中川幸哉
– @Nkzn / なかざん– 0x19 歳– 上越市出身– 新潟市在住– 日本 Android の会
新潟支部 支部長– ウォーターセル株式会社
取り締まられ役– アグリノート forAndroid
開発担当
• 経歴– 〜 2010 年
• 会津大学• 株式会社 GClue
– 2010 年〜• JCC ソフト株式会社 PG• コミュニティ活動開始
– 2011 年秋〜• ウォーターセル株式会社• アグリノート
Android Bazaar&Conference2012 東北 (2012.10.20)
動員 300 名超の懇親会を仕切らせていただきました
OSC2012Aizu開催おめでとうございます!
って @Nkzn が言ってるって#osc12az タグ付けてつぶやいておいてください
その他• ここ1年でお邪魔してる界隈– 長岡 IT 開発者勉強会( NDS )• http://nagaoka.techtalk.jp/• 11/17 に MS の中の人が Azure のセミナーしにく
るってよ– Niigata.pm• http://niigata.pm.org/
– ギークハウス新潟• http://www.geek-niigata.com/• 住んでます
おしながき• 自己紹介 ←イマココ !
• 前置き• アグリノートにおける Android
• Android とは• いろんな「ふつう」を見てみよう
– プログラミングの「ふつう」– デザインの「ふつう」– セキュリティの「ふつう」– 収益化の「ふつう」
• おまけ:アプリをトコトン簡単に作る普通じゃない方法
「凄い人にしかできないこと」は話さないよ
前置きPrelude
前置き
※ 「ふつう」の話をしたいだけで、基礎や基本の話は少なめです
※ あくまで中川の独断と偏見による「ふつう」であり
業界標準と必ずしも一致するものではありません
AndroidとはIntroduction: What’s Android?
聞いたことある人
端末持ってる人
端末何台か持ってる人
アプリ書いてる人
説明不要ですかね
( ゚ Д ゚ )y─┛~~
Android とは• 米 Google 社が中心となって作った Open
Handset Alliance (OHA) という組織が管理しているモバイルデバイス向けプラットフォーム。
• Web フレームワークっぽい開発環境で、 Javaで携帯電話向けアプリが作れる
• OSS な組み込みプラットフォームなのでいろんなところに入れられる→電子レンジとか
• OS 扱いされることが多いけど、厳密には OSじゃないよ!
Linux カーネル:↑のスタックとハードウェアの仲立ちをする
C++ ライブラリ群:高速動作や、ハードウェア操作を求められる機能のライブラリ
ランタイム環境:DalvikVM と
各種 JavaSE6 準拠ライブラリ
アプリケーションフレームワーク:アプリケーションへ様々な機能を提供するクラス群
自作アプリ
NDK SDK
日本の Android 端末
の、前に
日本のスマートフォン (2009 年秋 )
2009.Oct Aizu.LT SP より
日本の Android 端末 (2010 年 10 月 )
2010.Oct OSC2010Niigata より
日本の Android 端末 (2011 年 4 月 )
2011.Apr 長岡 IT 開発者勉強会 #21 より
この辺で数えるのやめました
いま累計何機種あるんだろう・・・
ちゃんとまとめるとこうなるらしい
出典:Androidにおけるテストに関して〜デバイスをどう選択するか〜
アグリノートにおける AndroidIntroduction: Agri-Note for Android
アグリノート forAndroid のミッション
Web アプリケーションとしてのアグリノートに
「現場で即座に入力」
「写真を手軽に記録」
「現在地と圃場の照らし合わせ」
などの付加価値を与えること
実際大事。• 一日中農作業をして疲れて帰ってきた農家
さんの中には、パソコンの電源を入れること自体がストレスになる( だんだんと≒記録をつけなくなる)人が普通にいる
• なら現場で作業が終わった時に直接入力してもらえばいいじゃん?という発想– 自宅で一気に作業すると大変だけれど、圃場
1つ分の作業を付ける分にはそこまで苦ではない(はず)
技術の粋を集めたアプリ # ではない
• 機能要件だけで言えば、かなり簡単な作り–サーバーからマスタを引っ張ってきて– 入力欄作って– 入力された情報をサーバーにポイする
一番大事にしていること• できるだけ色んな端末で動くこと– アグリノートそのものは限りなく BtoC なサービス
–農家さんが使う端末をこちらから制限することはできるだけ避けたい
– そもそも制限をかけられるほどの検証端末を用意できる財政ではない• 検証端末を 10 機種程度に減らす方法はあるらし
いAndroidにおけるテストに関して〜デバイスをどう選択するか〜
色んな端末で動かすために• ドキュメントやリファレンスを読ん
で、 JavaAPI の正しい使い方を守る• ドキュメントを読んで、リソースファイル
の正しい用意の仕方、振り分け方を守る• ドキュメントやサンプルでサポートされて
いるカスタム UI 作りの仕組みを使う• 充分に効用やリスクが検証されていない黒
魔術は避ける• etc.
_人人人人人_> ふつう < ̄^Y^Y^Y^Y ̄
今日はこの1年間の
アプリ開発で培った「ふつう」の話をします
Androidのいろんな「ふつう」Ordinaries for Android App Development
いろんな「ふつう」
• プログラミング
• デザイン
• セキュリティ
• 収益化
• おまけ
プログラミングの「ふつう」Ordinary for Android App Programming
Android プログラミング• とりあえず今回は Java の話で。– 本当は C++ でも画面作れる
• イベント駆動モデルのフレームワーク–適切なクラスやインターフェースを extends
したり implements しながら @Overrideメソッドを実装していけば OK
• レイアウトや各種リソースは原則 XML で管理(しなくてもいいけどやったほうが管理しやすくて楽)
Activity = 画面
Activity = 画面
レイアウト XML を登録
レイアウト XML
Java⇔XML
• XML に書いた各種オブジェクト( TextView とか Button とか)を Javaから触るには、 setContentView より後で findViewById(int) を呼ぶ
Web 出身者に易しい• JavaScript から DOM を触る感覚• ほぼ全ての画面要素の一番上の概念であ
る View クラスがView#setOnClickListener を持っているので、どんな画面部品にでもクリックイベントは持たせられたり
さて基本はこのへんにいたしまして
3つの「ふつう」
1. 非同期処理
2. Intent を使えば自分で作るものが減る
3. Fragment でスマホ・タブレット両対応
非同期処理が必要な理由• Android の UI はシングルスレッドモデル– ボタンの場合、「ボタンが凹むエフェクトを描画」
「 onClick を呼び出す」「ボタンが戻るエフェクトを描画」がシステム側の一連の動作として呼び出される
– onClick内に重い操作(ネットワーク接続とか)を書くと、ボタンが数瞬戻ってこないなどの問題が起こり、ユーザーが気持ちの悪い思いをする
– かといって別の Thread を立ててそこから UI オブジェクトを触るとエラーになる
• UI の操作をロックせず、かつ処理を行う仕組みが必要
非同期処理の仕組み• 大きく分けて2種類– UI スレッドの処理キューに処理を依頼だけし
て、 UI が暇な時に処理してもらう• Handler クラス• 結局 UI スレッドが処理するのであまりオススメし
ない– タイミングは Android側に完全に任せる形で別スレッドを作成する• AsyncTask クラス:途中経過を通知してくれる• AsyncTaskLoader クラス:データロード中心
3つの「ふつう」
1. 非同期処理
2. Intent を使えば自分で作るものが減る
3. Fragment でスマホ・タブレット両対応
Intent
• インテントとは– アプリの各画面及びバックグラウンドプロセ
スの間を取り持つメッセージング機能
Intent の例• 明示的インテント– 「 Activity 1から Activity2へ遷移したい」
というメッセージを Android側に渡すと画面遷移が発生する(アプリを跨いでも OK )
– 「写真を撮影してほしい」というメッセージをカメラアプリに渡すと、写真を撮影した上で撮影済みの画像のパスを返してくれる
• 暗黙的インテント– 「誰か画像を扱えるアプリいませんか」
3つの「ふつう」
1. 非同期処理
2. Intent を使えば自分で作るものが減る
3. Fragment でスマホ・タブレット両対応
Fragment
• Android 3.0 から追加された、(主に)画面の分割と再利用を目的としたコンポーネント
• 画面を持ち、 Activity に配置されるが、特定の Activity に依存しない(下手な作り方をすると密結合する)
• Activity とほぼ同じイベントハンドラを持つため、各種ボタン類などの初期化などもFragment内だけで行うことができる
04/12/2023
スマホ版
遷移
MenuActivity BrowserActiviity
MenuFragment BrowserFragment
04/12/2023
タブレット版
BrowserActiviity
MenuFragment BrowserFragment
アグリノートもそんな感じ
タブレット版 スマホ版
サイドメニューとタブの共通化は自前で頑張りました
参考書籍• http://amzn.to/SlO7Ph
• 「入門」と銘打ってますが、実際には API の使い方解説書みたいな本
• 仕事で使うレベルでAndroid を学ぶなら必携
• 初心者が一番最初に買うとちょっとグロッキーになる本
番外編• ActionBarSherlock
– http://actionbarsherlock.com/
– Android 2.x な端末で ActionBar が使えるようになるライブラリ
– Google I/O 2012公式アプリに採用されているので、デファクトスタンダード化
– アグリノート、ラーメンバトル両方に採用• android-menudrawer
– https://github.com/SimonVT/android-menudrawer
– ラーメンバトルアプリに試験採用
デザインの「ふつう」Ordinary for Android App Design
アプリを残念にしないために
http://www.ladybeetle-design.com/androidappdesigns/
• Android のデザインを実装する部分– XML– 9-patch Format Image (hoge.9.png)– カスタム UI
エンジニアの領分になってしまっているが、デザイナーが「何ができるか」を知っていれば、互いに幸せになれる
デザイナーがコードから読み解く、Android アプリのデザインの幅を広げるコツと Tips
スライドが公開されてます• XML がわからなくても聞ける編(入門):全 4回
– 第 1回:導入と 9-patch編• http://www.slideshare.net/toooommmmmmmmy/1androidtips
– 第 2回:より凝ったグラフィック編• http://www.slideshare.net/toooommmmmmmmy/2androidtips
– 第 3回:全力でカスタム UI• http://www.slideshare.net/toooommmmmmmmy/2androidtips-14596126
– 第 4回:レイアウト編• http://www.slideshare.net/toooommmmmmmmy/4androidtips-14883482
デザインを気にしたいアプリ開発者は必読!
リソース振り分けは自動に任せる
• drawable:画像など– ピクセルの大きさ次第
• layout: レイアウト– サイズ , 縦横– dp/dip
→Density Independent Pixel
→ 現実の大きさを優先する単位
– values• 文字列とか言語コード入れると多言語対応が自動
• style(CSS的な )
参考書籍• http://amzn.to/TA6H9x
• これからの時代の UIの組み合わせ方とか
• カスタム UI の作り方とか
セキュリティの「ふつう」Ordinary for Android App Security
結論から言うと
これ読んでください• http://amzn.to/QbAhmq• 数少ないセキュリティ本• どんなセキュリティホールを
作ってしまいやすいか• どんなリスクがあって、どん
な回避をすればよいか(もしくは回避できないことを考慮しなければならないか)
• みたいなことが書いてあります。
セキュリティの話題にも色々• 端末機能へのアクセス権限(パーミッ
ション)• 各アプリが持つデータベースへのアクセス権限– Skype アプリが平文でパスワードを保存して
いた上にデータベース設定をミスっていて凄いことになってた
• アプリの逆コンパイルによる情報流出
パーミッション:アグリノートアプリの場合
• 完全なインターネットアクセス– クライアントですし
• ストレージ– 写真機能
• 現在地– 現在地機能
_人人人人_> 健全 < ̄ ^Y^Y^Y^  ̄
パーミッション:某音楽アプリの場合
• Gmail の読み取り• 完全なインターネットアク
セス• 機密ログデータの読み取り• 端末のステータスと ID の読
み取り• USB ストレージのコンテンツの変更 /削除、 SD カードのコンテンツの変更 /削除
• 実行中のアプリの取得• システム全般設定の変更• etc.
/ ////////////////////////// ヽ////////////////////////////// ヘ/////////////////////  ̄ ̄⌒ヽ // ヘ//,─────--- ー '''' ⌒ /⌒ヽ ゝ //|/ ─― - 、 / /三三\ //|l /⌒ヽ、 ' __/三ー 、 /⌒ ヽノ //|ヽ/ ヘ三 `ニ '''--| ヽ三三三 i|==== ゝミミ/| \三三 / \{ . o __ ノ . |./ 〈 ̄ o ̄ヽ≡ . ヽ ̄ ̄ ´ |ヽ ` ──= / ー | ⌒ . -. 、 .|│ / .| . \ |
ミヘ / / ヽ、 _| ` .|', ミヘ . / i/ ヽ . , ノ二 |. ', ミヘ / /ソ ', ミヘ _.. ^ ^――ヽ、 ミ ./\ .', ミ .| (  ̄ ̄ ̄ ̄ ニニ / | | ´ \ / ,⌒ ヽ / / . \、 リ ./ ゝ ` / /. / / | ` '= ──、 - / /圭i フ ./.l `、 ''──── ゛ /圭圭圭圭ヽ_________/圭圭圭圭圭圭圭圭/ :::::: \圭圭圭圭圭圭ミ/圭圭圭圭/ ::::::::::::::::::. \圭圭圭圭 /ミ圭圭圭/ :::::::::::::::::::::::::::/' ヽ、 . 圭圭/圭圭/ ヽニ :::::::::::::::::: /圭圭\/圭/`─ /:::::::::::::::::::::|, 圭圭圭/圭圭 /::::::::::::::::::::::::| 圭圭/圭圭ミ /:::::::::::::::::::::::::::| 圭/ /圭圭 /:::::::::::::::::::::::::::::| / /
有罪・・・!
ギルティ
パーミッション問題の焦点• ユーザー情報を不正に入手しようとする
ような輩はそもそもこの場にいないと信じていますが
• それはそうとして、ユーザーを不安がらせるようなパーミッションをうっかり付けてしまうことは避けましょう
• ひろみちゅ先生に目をつけられたら(ry
アプリの逆コンパイル問題
大前提:Android アプリ( .apk )の展開・逆コンパイル手法は、随分と前から完全に確立されています。src フォルダの中身も res フォルダの中身も復元可能です
獲られたら困るものをアプリに入れない。もちろんユーザビリティとのトレードオフが発生するので、何を諦めるか判断する必要は出てくる。
秘密鍵の類を持たせるのは論外です。
いちおうアグリノートアプリの中には読まれても困らないものしか入ってません
(※ただし僕の汚い設計を除く)
収益化の「ふつう」Ordinary for Android App Monetization
コインが好きで!ーフジタク談話室: 金の基礎知識と雑学 Ⅰ
ああ・・・それにしても金がほしい・・・!
誰でも一度は考える
有料アプリで一攫千金
ヘ(^o^) ヘ いいぜ |∧ / / (^o^) / てめえが有料アプリで / ( ) 儲けられるってなら (^o^) 三 / / > \ ( \\ 三 ( / o^) < \ 三 ( / / く まずはそのふざけた 幻想をぶち殺す
スマートフォンに関する調査 |ソフトバンク・ヒューマンキャピタル株式会社(2011 年 3 月 )
そもそもみんな有料アプリなんて
ダウンロードすらしない
有料アプリのダウンロード実態
スマートフォンに関する調査 |ソフトバンク・ヒューマンキャピタル株式会社(2011 年 3 月 )
無料アプリのダウンロード実態
無料なら DL してもらえる可能性が微粒子レベルで
存在する・・・?
よしんば売れたとしても• 例えば2人月 (140万くらい? ) かけて
作った 100円のアプリがあったとして– 1本あたりの実入りは 70円– 1,000 本売れて 70,000円– 10,000 本売れて 700,000円
_人人人人人人人人人_> ようやく1人月 < ̄^Y^Y^Y^Y^Y^Y^Y^ ̄
競争率とか最大数とか• Google 「 Play ストアのアプリ数が70万本に到達しました」– http
://www.businessweek.com/news/2012-10-29/google-says-700-000-applications-available-for-android-devices
• 2011 年 5 月時点で日本で最も売れたアプリの本数5000 〜 10000 本 ×600円– マーケットの現状 - 日本Androidの会 2011年5月定例会– よくて 420万円– ちなみに5万本以上売れた有料アプリは世界で 73 本( 2011 年当時)
有料アプリは諦めよう• 無料アプリで広告収入狙い–ぐんまのやぼう , なめこみたいな定期的に何度も見るアプリがオススメ
• 受託– アプリ自体は売れなくても問題ない
• メーカーやキャリアに近づいてプリイン– 単価× 出荷端末数とかでもらえるらしい
• 儲かる Webサービスのクライアント作る– アグリノート ← イマココ !
アプリをトコトン簡単に作るふつうじゃない方法
Extraordinaries for Android App Development
アプリで儲けるのは難しい• 売り上げが上がらない→開発工数分の人件費をペイできる可能性が少ない
工数の方を減らすことはできないか?対象の市場を増やせば売上も少しは上がらないか?
クロスプラットフォーム• 1セットのソースから複数プラットフォー
ム(主に iOS と Android )向けのアプリをビルドできる系ツール
• 本来の開発環境では複数の手順を踏まないといけないはずの機能を1メソッドで実現するなど、簡略化が図られている
Titanium Mobile
Corona SDK Adobe AIR
Unity
Adobe AIRThis is the Flash.
Adobe AIR
• HTML, JS, Action Script
• iOS, Android, Blackberry
– PC 上でも動作する• AIR ランタイム上で動作• まだちょっと重いらしい• CS5 でも作れちゃう
UnityFor 3D Games.
Unity
• JS, C#, Lua, などなど• iOS, Android, Xbox 360, PS3, PC–ペケ箱で動く=Windows Phone でも動く
• Flashばりの至れり尽くせり環境
Titanium MobileJS & Native UI
Titanium Mobile
• JavaScript オンリー• オープンソース• CSS ならぬ「 JSS 」• iOS, Android
• 各プラットフォームの本来の UI をそのまま使用→ユーザーが使い慣れた UI
Native UI
Corona SDKCode Less, Play More.
Corona SDK
• Lua• iOS, Android• OpenGLベース• ビルドはサーバーで。• API は ActionScript2 ライク– 一昔前の Flash からの移植性がすごい
どのくらい「 Code Less 」?
このくらい。
仕組み
昨年 本出しました• 電子書籍• Corona SDK の入門
本• 達人出版会のサイト
から PayPal で購入できます
• http://bit.ly/CoronaNkzn01
使い分け案
• サクッと2 Dゲーム→ Corona
• ユーティリティツール→ Titanium
• 3 Dゲーム→ Unity
• ガチのクロスプラットフォーム→ AIR
まとめ• 公私混同しながら Android技術の勉強とアグリ
ノートアプリ製作を進めているのは、このスライドのカオスっぷりを見ての通り (; ´Д` )
• だんだんと Android 界隈が広がりすぎて自分では追いきれなくなってきてるので、誰か僕らの団体に JOIN して一緒に Android 関連技術を追いかけませんか。– メーリングリストへの加入お待ちしております– http://bit.ly/jagniigata
ご清聴ありがとうございました