Your SlideShare is downloading. ×
Androidアプリを作成・公開する話
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Androidアプリを作成・公開する話

143
views

Published on

Androidのアプリを作ったスライド

Androidのアプリを作ったスライド

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
143
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Androidのアプリを 作成・公開する話 京大マイコンクラブ nonylene
  • 2. 自己紹介 • nonylene (のにれん) ! ! • twitterとかGitHubとか • 使用言語:python, java (android), javascript など
  • 3. 今回の話 • 後期はAndroidばっかいじってた • 夏の終わりから作って冬ぐらいに公開し ました • ということでAndroidアプリのお話
  • 4. 目次 • 自己紹介 • Androidとは • 開発しましょう • hello world • アプリの仕組み • 作ったアプリ • アプリの公開
  • 5. Androidとは • Google様が開発なさったOS • スマートフォン、タブレット向け • linuxカーネルが使われてる • 大体2009年ぐらいから登場して今はシェア80% こえてる • 最新は5.0.2 (lolipop)
  • 6. Androidとは • 特徴 • 無料(特許料除く) • いろんなメーカー • Xperia (SONY), Galaxy (Samsung), Nexus(GoogleのOEM), HTC , etc • 比較的自由度が高い(スマートフォンの中では)
  • 7. 他のOS • iOS • 日本ではシェアでかい • androidの永遠のライバル
  • 8. 他のOS • Windows Phone • NOKIAとHTCぐらい… • 日本では東芝製がauで売られただけ • 最近マウスコンピューターとかが作るら しい
  • 9. 他のOS • firefox OS • ナウでヤングなイケイケのOS • auで最近出た • javascriptでがんばるらしい • 表示もHTMLで構成
  • 10. 他のOS • Tizen • 一時期は期待されてたけど… • ドコモは撤退。 • Windows Mobile・BlackBerry • iOSがある前はこれって感じだった • QWERTYキーが付いてるのが前提
  • 11. 開発しましょう • 開発費無料!!!! • iOSは12kぐらいお布施がいります
  • 12. 開発しましょう • ファイルから直接
 インストールできる!!!! • Playストア公開しなくてもOK • iOSはできません
  • 13. 開発しましょう • windowsでもmacでも
 linuxでも開発可能!!! • iOSはmac限定
  • 14. 開発しましょう • Java!!!! • JavaJavaしよう • 実際は一部apiつかえなくてAndroidJava とも呼ぶらしい
  • 15. 開発しましょう • 昔はeclipseが使われていた • 現在AndroidStudioが開発中 • こちらがサポート対象に • InteliJベースなので賢い • 無料
  • 16. hello world • IDEで適当にプロジェクト作成したらhello world してくれます public class MyActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); } … } ・setContentViewでレイアウトをxmlから表示してる
  • 17. hello world • layout/activity_my.xml <RelativeLayout … android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft=“@dimen/activity_horizontal_margin" … tools:context=".MainActivity"> ! <TextView android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content"/> ! </RelativeLayout> ・@string/hello_world をTextViewで表示してる
  • 18. hello world <resources> <string name="app_name">"TEST"</string> ! <string name="hello_world">Hello world!</string> <string name="action_settings">Settings</string> </resources> ・values/string.xml
  • 19. hello world • 基本実機でデバッグ • エミュレーターは動作が遅い • ほとんどの機種で開発可能 • 開発者メニュー(ビルド番号 連打で出現)
 からUSBデバッグをON
  • 20. hello world
  • 21. Androidアプリの仕組み
  • 22. Dalvik • Googleが作成した仮想マシン(プログラム の実行環境) • JVMっぽいけどJVMではない • Javaの互換性テストを通過してない • Android 5.0からはARTがデフォルトに なって将来は使われなさそう
  • 23. Activity • Androidにおける画面 • 基本一つの画面につき一つのactivity • プログラムはactivity上で動いてる • 何かしらのintent(後述)から起動する • 画面が遷移するとactivityも切り替わる
  • 24. Fragment • Android 3.0 から導入された • レイアウトに対するコントロール • activity間で同じレイアウト(の管理)を 使いまわすことが出来る!! • ダイアログとかをactivity間で持ち越す等
  • 25. intent • androidの重要な要素の一つ • intent(意志,目的) • 他のactivityを起動するための機能 • データも一緒に渡すことができる • 明示的intentと暗黙的intent
  • 26. intent • 明示的intent • はじめから渡すactivityが決まっている • activityによる画面遷移や、指定したアプリ を起動したいときに使う • 投げる Intent intent = new Intent(this, TOAuth.class); startActivity(intent);
  • 27. intent • 暗黙的intent • よく「共有」と言われているもの • 主に他のアプリでデータを渡す時に使う • 渡すactivityは決まってない • 選択ダイアログが開いてユーザーが選ぶ
  • 28. intent • 暗黙的intent • 実際のデータと、データの種類に関する 情報が含まれている • 受け取る側はAndroidManifestで
 どの種類のintentを受け取るか設定 • Activityごとに設定
  • 29. intent • 投げる側
 
 • 受け取る側 Uri uri = Uri.parse("http://nonylene.net"); Intent i = new Intent(Intent.ACTION_VIEW,uri); startActivity(i); <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" android:host="nonylene.net"/> </intent-filter>
  • 30. intent • 暗黙的intentの例 文字列 URL
  • 31. アプリの情報 • Android Manifest ファイル • アプリ/Activityの、他のアプリ向けの情報を 格納したファイル (xml) • アプリ名、アイコン • どんなactivityがあるか • intentの受信する種類 (後述)
  • 32. アプリの情報 • Android Manifest <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.nonylene.test" > <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> ! <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> ! </manifest>
  • 33. アプリの情報 • build.gradleファイル • gradle: ナウでヤングなビルドツール • AndroidStudioはgradleを採用している • ビルドするときのオプションを記述 • バージョン、アプリのIDなど
  • 34. アプリの情報 • build.gradleファイル apply plugin: 'com.android.application' ! android { compileSdkVersion 21 buildToolsVersion "21.1.2" ! defaultConfig { applicationId "net.nonylene.test" minSdkVersion 15 targetSdkVersion 21 versionCode 1 versionName "1.0" } …… } ……
  • 35. デザイン • Android 3.0 以上は holo と呼ばれてるデ ザイン • Android 5.0からは material
  • 36. デザイン • アプリのテーマ • 統一したいならholo, 端末の個性を出したい ならdevice default(端末純正) • holoに固定すると将来古臭く見える欠点 • すでにそうなりつつある感 • 自分でカスタマイズもできる
  • 37. デザイン material holo DeviceDefault
  • 38. デザイン • 画面の設計 • AndroidStudio、eclipseだとドラッグア ンドドロップで画面のパーツを追加可能 • xmlファイル • 結局直接xmlに書いたほうがはやい
  • 39. デザイン • 画面の設計2 • ベースとなるlayoutは主に3つ • RelativeLayout: 相対的に • LinearLayout: 上から/左から順番に • FrameLayout: 階層的に
  • 40. デザイン • 画像 • 画像ファイルは端末の解像度によって適した サイズをリサイズして入れていく • xxx-hdpi, … , hdpi, mdpi • IDEだと自動的にリサイズしてくれるけど… • 自分でちゃんとリサイズしたほうがきれい
  • 41. 設定・データベース • 軽い設定ならxml形式で保存される
 
 
 
 
 • rootを取らない限り他のアプリからは見れない <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <boolean name="adjust_zoom" value="false" /> <string name="download_file">mkdir</string> <string name="download_dir">PLViewer/</string> <string name="twipple_quality_3g">large</string> <string name="imgly_quality_3g">large</string> <boolean name="initialized19" value="true" /> <boolean name="disp_tweet" value="false" /> …… </map>
  • 42. 設定・データベース • データベースではSQLiteを使用 • 軽量・高速・1ファイルで済ませれる特徴 のデータベースシステム
  • 43. 設定・データベース • SQLite といえば database is locked • databaseの書き込みが重なるとエラー • 原因は、ひとつのdatabaseに対して複数の database管理クラスを立ち上げてるから • database管理クラス自体は書き込みが重 なってもキューにためてくれる
  • 44. 設定・データベース • 解決策 • 一つのdatabase管理クラスを使いまわす • 特定された場所でしか使わない場合楽 • database管理クラスをすぐ閉じる • contentsProviderの使用
  • 45. 機種依存のつらい話 • みんな違うから、開発はつらい。
  • 46. 機種依存のつらい話 • デザイン • 機種にフィットしたデザインにしたいなら DeviceDefaultというのを使うけど… • 例: GALAXY…backgroundを指定しな いとボタンが変に透過 • holoを使えば純正Androidデザインになる
  • 47. 機種依存のつらい話 • タッチの挙動が違う • ダブルタップした時に、二回目のタップでド ラッグせずにすぐに離した時の挙動 • Xperia/Galaxy: onScroll() が数回呼ばれる • LG: onScroll() が呼ばれる時もある • Nexus/HTC: onScroll() は呼ばれない
  • 48. 機種依存のつらい話 • 機種によって読み込める画像サイズが違う • ある機種では ImageView に読み込める 最大サイズが 2048 * 2048 • 新しい機種では 4096 * 4096 • 古い機種では 1024 * 1024
  • 49. 機種依存のつらい話 • 他にもいろんな要素が… • GALAXYのマルチ画面での挙動とか • メモリの違いとか • タブレットとか • Androidバージョンの違いとか
  • 50. アプリ作ろう
  • 51. 設計 • ターゲットOSの決定 • Androidは2→3、 3→4で大きく変化 • シェアを見ると今は 4.0以上がベタ 5.0 4.4 4.2 / 4.3 4.1 4.0 2.x 2015/03 時点
  • 52. 設計 • Android 2.3だとできないこと • fragment • activityでは一画面ごとに書き換える前提 • 画面パーツごとに設計できない • async task loader
  • 53. 設計 • できないことその2 • action bar • CSSが闇 • styleにholoもDeviceDefaultもない • 一部googleの互換性維持のツールはある
  • 54. 設計 • できてしまうこと • ネットワーク処理をUIスレッドで実行 • 動作が固まるやつですね • まだ2.3をお使いの方は早急な乗り換え を!!
  • 55. 作ったアプリ • まずはテストアプリを作ってみました • 適当にボタンとか置いたりして遊んでた • これが8月下旬 • その後、勉強がてらに作ることに
  • 56. PhotoLinkViewer • 後期に作ったアプリ • 画像見る機能がないtwitterクライアント向け • 画像のURLのintentを受け取って、画像を オーバーレイで表示する • できるかぎり最大のサイズで表示 • 保存もできる
  • 57. PhotoLinkViewer • スクショ
  • 58. PhotoLinkViewer • 評価4.9!!!!!!
 
 
 • 先日1Kダウンロード突破!!
  • 59. アプリの動き • オーバーレイ表示 • 背景、アクションバー無し、通知欄透過
 するように独自styleを使用 • ベースはDeviceDefaultだからダイアロ グ等は端末特有のデザインになる • キャッシュは10MB使用
  • 60. アプリの動き • ライブラリの使用 • ネットワーク関係はGoogle製ライブラリ
 volley を使用 • JSONの処理などが短いコードできるように • twitter関係は twitter4j • 公式はfabric(クロスプラットフォーム)
  • 61. アプリの動き • GIFの表示 • 標準のImageViewではGIF動画は再生で きない • Gyazo無理じゃん。。。。。。 • WebView(ブラウザ)を使うと見れる
  • 62. アプリの動き • GIFの表示2 • バイナリで数バイト読み込み • ヘッダーでファイルの形式を読み込む • GIFだったらWebViewが開くようにした
  • 63. アプリの動き • GIFの表示3 • 直接URL開いただけでも表示できる • でも大きさとか配置が不便 • 結局CSSで制御したほうが楽だった… • ライブラリを使うともっと簡単にいけそう
  • 64. アプリの動き • twitter GIFについて • twitterのGIFはmp4で降ってくる • VideoViewで表示 • URL設定するだけで読み込める • GLSurfaceView…
  • 65. アプリの動き • VideoView • 再生/停止用のコントローラーを出せる • 再生が停止したらコントローラーは隠れる ‣ 非常に短いGIF動画だと一瞬で隠れる • 永遠に一時停止できない!!! • 短いならGIFのほうが取り扱いしやすい。。。
  • 66. 公開までの道のり 1. 限定公開 • ベータ版のapkをグループに配布 • nonylene.netにjsonを置いてアプデ チェックを行うようにしてた • ここで機種依存とかのバグを潰したり
  • 67. 公開までの道のり 2. google Playへ登録 • 2kほどお布施 • 有料だと住所・名前が公開される!!! • 広告をつけるのもアレだから無料に • apkだけじゃなくスクショ撮ったり宣伝画像 うpしたり…
  • 68. 宣伝 • いつの間にか宣伝されてた • 公開当日に友達がブログで紹介 • 公開当日にフォロワーにレビューされる • 公開当日にアプリの特集サイトに紹介される • 公開翌日に2chに書かれる
  • 69. 宣伝 • その後も有名なアプリ紹介サイトに掲載され たり2chに4回ぐらい載ってる • 良い物作ったら勝手に紹介される? • フォロワー多い人がツイートしてDL増えたり • レビューが高過ぎるとそれはそれでいけない ので気をつけましょう
  • 70. 効能 • 知らない人にツイートされると嬉しい • どんどん公開していこう • 30分でアプリ作れるようになった • ほとんどさっきのアプリの流用
  • 71. 結論 • アプリ作りましょう • 欲しいのがなければつくろう • 日々を便利に