
Kiyotaka Soranaka
エス・エム・エス
Actions
webフロント→webサーバー→Android→Server-Side Kotlinという経緯で、現在はwebアプリエンジニアやってます。
Links
WiFi Direct + VpnServiceでSIM無しAndroidをWeb世界に社会復帰させる話
前提1
AndroidにはWiFi DirectというAndroid端末同士でP2P通信ができる機能があります。
これを使うとAndroid端末間でByteStreamを使ってbyteデータをやり取りすることができます。
前提2
AndroidにはVpnServiceというサービスクラスがあります。
これはAndroidでVPNを繋ぐときに利用するサービスでVPNソフトを作りたいときなどに利用します。
このサービスにはAndroid端末で外部通信に流れるPacketデータが全て流れてきます。
さて、これらの前提を元に、ここにSIMが刺さっていないAndroid端末が一台あります。
さらにSIMの刺さったAndroid端末がもう一台あります。
もうわかりますね?
さあ、SIMの刺さっていないAndroid端末からHTTP通信を成功させてください。
・え?なんでWiFi Direct + VpnServiceなの?普通にテザリングでよくない?
・VpnServiceに流れてくるbyteデータは生のIP Packet
・HTTP通信はTCP通信というプロコトルの上で成り立っている
・TCP通信って?UDP通信ってのもあるの?
・Packetの構成
・TCP通信の仕組み
・AndroidでSocket通信する
・Socket通信で流れてくるbyteデータは生Packetではない
・足りないデータは作るしかない
・いろいろ頑張ったら〜、できた!
このセッションでは通信の低レイヤーの話が出てきますが、それを理解してもらうことが目的ではないです。
このセッションを聞いて「Androidではこういうことも出来るのか」という可能性を感じてもらえると嬉しいです。
ピュアJavaだと思った?残念Androidでした ~いつからAndroidをJavaだと錯覚していた?~
■概要:
AndroidのJavaとOracleのJavaは微妙に異なると言われていますが、普段その違いを意識することはあまりありません。
実際、「だいたいJava6ぐらいかなー」って思っていればうまくいくことが多いと思います。
そこで今回は「全く同じJavaコードを書いてもOracleのJVMとAndroid Runtimeで異なる動作をすることがある」っていうのを紹介したいと思います。
題材にするのはよく使われるArrayListです。
■対象者:
JavaでArrayListを使ったことがある。
if文やfor文、拡張for文、Iteratorなど、Javaの基本的構文を書いた or 読んだことがある。
世界にはJavaコードから生成されたプログラムを動かす実行環境がたくさんあるらしい(OracleのJVM、Dalvik仮想マシン、Android Runtime)
ことを知ってる。(これを読んだあなたはもう知っているので対象者です)
■目次
・普通に書けば、普通に同じ動作をする
・ArrayListを拡張for文で回す←ここまでは同じ
・for文中にあることをすると・・・おおっと
・大丈夫なこともある?
・なぜ大丈夫なこともあるのか?
・Javaは不思議だなぁ。AndroidもJavaだもんね、同じことが・・・
・ピュアJavaだと思った?残念Androidでした
・AndroidはJavaとAPIが同じなだけ ~いつからAndroidをJavaだと錯覚していた?~
・ネタばらし
・もちろん逆パターンもあるぞ
・その他の事例もあるぞ(先駆者紹介)
注意:このセッションは好奇心を満たすだけで、明日使えるテクニックは何もありません
DroidKaigi 2019 Sessionize Event
DroidKaigi 2018 Sessionize Event
Please note that Sessionize is not responsible for the accuracy or validity of the data provided by speakers. If you suspect this profile to be fake or spam, please let us know.
Jump to top