ラベル Development の投稿を表示しています。 すべての投稿を表示
ラベル Development の投稿を表示しています。 すべての投稿を表示

2015年5月27日水曜日

shibuya.apk の雑なメモ

shibya.apk 行ってきました!

※当日の内容は網羅してません。気になったトコだけメモしてたものにちょっと毛を生やした記事です。

日付: 2015-05-22
場所: DeNA

発表1. それwebでよくない?

Webアプリを普通のアプリと同じように動かす仕組みが出来てきている。
なので、Webでよくない?という話。APKじゃねぇ

  • Web App Manifest
    • locationバー非表示にする設定とかできる
    • Chromeで「ホーム画面に追加」したアイコンから起動すると、Overview screen(Recent Apps)でアプリかのように表示される
      ※ Chromeの「タブとアプリの統合」をOFFにしていても、別のアプリのように振る舞う
  • Service Worker
    • WebアプリとNativeアプリとの差を埋めるためのもの
    • オフラインでもキャッシュを返したりとか
    • サービスワーカーでfrontに返すデータをinteruptしたり、キャッシュしたり
  • WebPush
    • Chrome 42からWebでも通知出したりできる
  • Web App Install Banner
    • Web標準仕様ではない
    • Web App Manifestが条件に合致すると、Chromeがホームへの追加をサジェストする

発表2. Meets Jack and Jill

「全部qiitaに書いておいたからメモ取らなくていいよ!」

Android - Meets Jack and Jill - Qiita
http://qiita.com/calciolife/items/faf6affc0f8cf70c4af9

  • 最適化しつつコンパイルするよ!
  • ARTにとって良くなるようにバイトコードを最適化とか

発表3. fabricの話

wasabeefさんに代わり、Flockで来日していた@romainhuetさんが発表することに。

https://get.fabric.io/

  • FlockでiOS向けに話した内容をAndroidに向けに変えて話してくれた
  • fabricは、Twitter社が提供するアプリを作るための色々なサービスを含むブランド?みたいなものらしい
  • ClashlyticsとかMoPubとか
  • Digitsがちょっと気になった
    • SMSによるユーザ認証の仕組みを提供するものっぽい
    • SMSの送信数に制限無く、現状無料で使えるらしい。まじで!?

懇親会

LTしたらTwitterのTシャツ貰えました!(ジャンケン大会で配られたものと同じ)
でも、飯食いそこねました!

アプリの通知をLollipop対応しよう / shibuya.apk 2015-05-22 LT // Speaker Deck
https://speakerdeck.com/mstssk/shibuya-dot-apk-2015-05-22-lt

LTの内容は、C87で甘味アンドロイドパークに書いたのをまとめたもの。
テクブ本のお求めはBOOTHCOMIC ZINで。
関係者を倒してもドロップはしません。

2014年2月24日月曜日

Androidが4.4で絵文字にちゃんと対応した

というわけで、随分前のことなんですが、

絵文字を入力できるマッシュルームアプリを作りました!

絵文字マッシュ - Google Play の Android アプリ
https://play.google.com/store/apps/details?id=jp.mstssk.emoji_mush
公開したのは2013年11月18日なんですが、サボってblog書いてませんでした。

※以下、絵文字について知ってることをつらつら書いています。間違ってたら、Twitterかコメント欄でツッコんでください。

KitKatで絵文字を改めてサポートした

2013年10月31日にリリースされた Android 4.4 KitKat にて、絵文字への対応が一新され、カラフルな絵文字がしっかり表示されるようになりました。
Android - 4.4 KitKat
http://www.android.com/versions/kit-kat-4-4/
4.3 Jelly Bean 以前でも絵文字は表示できていましたが、いくつかのものが白黒で表示されるのみで、殆どが表示できていない状態でした。
※メーカーのカスタムにより絵文字フォントがなくなってしまっている機種もあります。

ガラケーの絵文字に対応したわけではない

KitKatで対応したのは、Unicode 6で定義された絵文字です(最終的にUnicodeに含まれなかったものもサポートされています)。
ガラケーの絵文字については、各キャリアから販売されているAndroid端末は元々対応しています。

今回の絵文字対応というのは、ざっくり言ってしまえば「iPhoneで使ってる絵文字がAndroidでも表示されるようになったよ」という事だったりします(絵は違っています,後述)。
元々、iPhoneの方が先行してUnicodeの絵文字を表示・入力できるようにはなっていました。
そもそもUnicodeの絵文字は、ガラケーの絵文字を元にGoogleとAppleが共同でUnicodeに提案したものが元になっているのです。
絵文字の符号化提案は Google および Apple 社によって共同提案され、2009 年 2 月 6 日に Unicode 技術委員会にて正式に了承されました。

Google Japan Blog: 絵文字の Unicode 符号化に関するアップデート
http://googlejapan.blogspot.jp/2009/03/unicode.html

そのため、iPhoneではUnicodeの絵文字(最終的にUnicodeに含まれなかった物も含めて)をサポートしており、遅れながらもAndroidも対応するようになりました。

勿論、ガラケーの絵文字をそのまま国際的な規格に持っていけるわけがありません。
そのゴタゴタについて特集したコラムがあります。読み物としても面白いのでオススメです。
特集 : 絵文字が開いてしまった「パンドラの箱」 - CNET Japan http://japan.cnet.com/sp/column_emojipandora/

ガラケーの絵文字は?

国内のJelly Bean以前のAndroid端末では、ATOK for Androidなどの絵文字入力機能を使うことで、従来のガラケーの絵文字を入力できていました。
実はこの時入力しているの絵文字は、Unicodeのものではなく、Googleが独自に定義したコードポイントだったりします。これは、Unicodeへの提案より前にGmailでガラケーの絵文字を相互置換するようにした際の、中間コードとして定義されたコードポイントです。
相互置換機能の成果物が emoji4unicode として公開され、それを元にUnicodeへの提案も行われました。

emoji4unicodeによる、各キャリアとGoogleの定義したコードポイントの対応表は、Unicodeコンソーシアムのサイト上で公開されています。
Emoji Symbols: Background Data
http://www.unicode.org/~scherer/emoji4unicode/snapshot/full.html
※サイズが大きいページなので注意!

ちなみに、キャリアメールソフト上での絵文字入力機能については、手元に環境が無いし普段使ってないので調べてません。
同様にGoogleのコードポイントで入力しているか、何かゴニョゴニョしてるんでしょう。いずれにせよ、メールサーバ側で各キャリアの絵文字の相互置換が必要なので、あまり変なことはしていないと思います。

デザインしたのは日本の会社

Googleが Googleハングアウト で使われていた絵文字を AOSP にポーティングしたことで、Androidでこんなに綺麗な絵文字が使えるようになりました。
そして、このハングアウトの絵文字は日本の IC4DESIGN という会社が作ったものでした。すごい!
日本の絵文字を世界へ: 日々の日記
http://ic4design.cocolog-nifty.com/ic4design/2013/05/post-f655-5.html
google hongout of IC4DESIGN'S WORKS
http://ic4design.com/top4/Coner/pg839.html

ちゃんと表示されない絵文字もある

至れり尽くせりかと思った絵文字対応ですが、「数字の囲み文字」と「国旗絵文字」はまだちゃんと表示されない様です。

「数字の囲み文字」と「国旗絵文字」自体については、下記ページを読んでいただければ面倒くさいことがわかると思います。
絵文字だョ! 符号化文字集合(後編) | mixi Engineers' Blog
http://alpha.mixi.co.jp/2012/10663/

つまりは、特別な文字の組み合わせで1つの絵文字を表すものが軒並みちゃんと表示されていないんです。
Nexus5(4.4.2 KitKat)で実際どのようになっているかちょっと調べてみました。
Unicode 文字 数値参照 期待している表示 実際の表示 期待している表示が実際に割り当て
られている文字(Googleによる独自定義)
U+0031 U+20E3 1⃣ 1⃣







U+FE82E
U+1F1EF U+1F1F5 🇯🇵 🇯🇵







U+FE4E5
※画像はNexus5(4.4.2 KitKat)でのハングアウトアプリ上の表示のキャプチャ。日の丸のみWebのハングアウトのキャプチャ。

囲み文字はちゃんと直前の文字と結合していないし、国旗も Regional Indicator Symbol の代替アルファベット表示になっています。
その代わり?に、本来表示されて欲しい文字シンボルはGoogle独自定義のコードポイントに割り当てられています。
かと言って、Google独自定義のコードポイントの方ならすべてちゃんと表示されるかというと、そうではありません。Nexus 5で試したところ、Google独自定義のコードポイントで表示されるのは、この囲み文字と国旗絵文字だけでした。

ちなみに、問題の絵文字はKitKatのデフォルトのキーボードの絵文字パレットにも含まれていません。「あぁ、結合文字対応するの諦めたんだろうなー」と思ったりしましたが、ちゃんと表示されてくれないのはやっぱり嫌なのでAOSPにチケットは投げておきました。是非皆さん★を付けましょう。
Issue 66045 - android - Several emoji symbols(Keycap numbers and Regional flags) are not correctly with KitKat. - Android Open Source Project - Issue Tracker - Google Project Hosting
https://code.google.com/p/android/issues/detail?id=66045

アプリ作成時の愚痴



参考

  • List of iOS Emoji http://www.grumdrig.com/emoji-list/
  • Emoji unicode characters for use on the web http://apps.timwhitlock.info/emoji/tables/unicode
  • emoji4unicode - Emoji for Unicode: Google Emoji private use mapping data and tools - Google Project Hosting https://code.google.com/p/emoji4unicode/
  • Emoji Symbols - Unicode Symbols https://sites.google.com/site/unicodesymbols/Home/emoji-symbols
  • Unicode絵文字とキャリア絵文字 http://www.slideshare.net/hiroakiohashi148/unicode-24674603
  • NotoColorEmoji.ttf - platform/external/noto-fonts - Git at Google https://android.googlesource.com/platform/external/noto-fonts/+/kitkat-release/NotoColorEmoji.ttf

    ↓サイズが大きいページなので注意
  • Emoji Symbols: Background Data http://www.unicode.org/~scherer/emoji4unicode/snapshot/full.html
  • Emoji unicode characters for use on the web http://apps.timwhitlock.info/emoji/tables/unicode

    変更履歴

    修正 2014-04-11
    Nexus 5のAndroidのバージョンを間違えていたので修正。
    4.4.3 -> 4.4.2
  • 2013年7月26日金曜日

    gitはじめて勉強会

    先日、内輪でgitの勉強会で講師をやってきました。

    資料

    当日使ったスライド。
    あまりgitはどうだなんだという説明はせず、とにかくハンズオンでやってみる事が目的でした。


    反省点

    講師っていうのは初めてだった事もあり、諸々反省点がありました。
    • 内容が参加者に合っていなかった
      講師の都合でterminal上での操作前提の内容にしていたけど、慣れていない人に教えるにはやはりSourceTreeなど使った方がいいかもしれない。
      自分では commit や diff 見る程度はEclipse上でやるけど、その他はterminal上でばっかり操作していて、他のやり方を教えられるほど知らないのがネック。

    • つめこみ過ぎた
      git init から push まで粗方詰め込んだ上で、その他のコマンドの説明も諸々…という内容にしたら、目的が何処かに行ってしまった感じになった。
      色々やるより、必要最低限をしっかりやる方が最初のとっかかりとしては良さそう。
      細かい説明はいちいちせずに「○○をするにはどうするか」という目的ベースで進めた方が覚えやすいかな。

    • 脱線し過ぎた
      ただでさえ詰め込みすぎて時間の余裕があまり無いのに、途中途中の質疑応答に時間をかけすぎた。push の話をする頃にはタイムオーバーだった…
      場合によってはバッサリ時間を切って進めて、時間配分をずらさないようにしないと、なかなか話が進まない。

    第2回があるかどうかは皆の声援次第。

    2011年2月7日月曜日

    FindBugs with Android app developing

    EclipseのFindBugsというプラグイン。
    その便利さは言わずもがな。
    Androidアプリ開発でも必要だろ、というわけで導入手順メモ。

    環境:
    ・Thinkpad X201s
    ・Ubuntu 10.04 LTS Lucid Lynx
    ・Eclipse 3.5 Galileo
    ・Android SDK revision 8

    インストール

    update siteでFindBugsをeclipseにインストール
    http://findbugs.cs.umd.edu/eclipse
    参考(http://findbugs.sourceforge.net/downloads.html

    文字化け

    これだけで、あとはeclipseを再起動して使用可能になるが、FindBugsのメッセージが文字化けしてしまっている。
    eclipseのインストールディレクトリ/plugins/edu.umd.cs.findbugs.plugin.eclipse_****/findbugs-plugin.jar の中にあるmessages_js.xmlがsjisになってしまっているから。

    Ubuntuであれば、findbugs-plugin.jarを直接書庫マネージャで開き、中のmessages_js.xmlをUTF-8指定して改めて上書いて保存すれば、ちゃんと元のjarファイルにも反映してくれる。

    Rクラスを除外

    Android SDKによって自動生成されるリソースクラスにはキャメルケースじゃないものがあるので、FindBugsに引っかかってしまう。
    以下の内容で設定xmlファイルを作成し、eclipseの設定からFindBugsのExclude filter filesにそのファイルを指定してやると、以降のビルド時にはR以下のクラスを除外してくれる。

    <FindBugsFilter>
        <Match classregex="\w+(\.\w+)+\.R\.\w+" />
    </FindBugsFilter>

    ただし、どうも手元の環境だとビルド時にちゃんと除外してくれない場合があった。全体の設定で指定するか、プロジェクト個別の設定で除外するかによっても、ちょっと挙動が変わっている気がするがちゃんと原因を切り分けられていない… orz

    2010年12月4日土曜日

    Android app's selector.xml

    Androidアプリで自前でボタン用の画像なんかを用意した場合に、
    ・フォーカスがあった状態
    ・押された状態
    ・通常の状態
    を定義するのには、以下の様なXMLファイルを作ってやったりします。
    <?xml version="1.0" encoding="UTF-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- bad order -->
        <item android:state_focused="true" android:drawable="@drawable/item_focused" />
        <item android:state_pressed="true" android:drawable="@drawable/item_pressed" />
        <item android:drawable="@drawable/item_normal" />
    </selector>

    そして、ここで落とし穴。

    ファイル中のitem要素はボタンの状態が変化した際に上から順に評価されていき、状態に合致するものを見つけたら、それ以降のitemは見に行きません。

    http://developer.android.com/intl/ja/resources/tutorials/views/hello-formstuff.html
    Note: The order of the elements is important. When this drawable is referenced, the s are traversed in-order to determine which one is appropriate for the current button state. Because the "normal" image is last, it is only applied when the conditions android:state_pressed and android:state_focused have both evaluated false.

    具体的には、上のitemの順序の場合には、「フォーカスがあった状態で押す」という事をした時には、state_focusedが選択されてしまい、「押してんのに押した場合用のエフェクトにならない」という不具合が起きてしまいます。
    対応策としては、state_pressedの優先順位を上げたいので、まぁ順序を変えてやればいいだけの話。
    <?xml version="1.0" encoding="UTF-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- correct order -->
        <item android:state_pressed="true" android:drawable="@drawable/item_pressed" />
        <item android:state_focused="true" android:drawable="@drawable/item_focused" />
        <item android:drawable="@drawable/item_normal" />
    </selector>