狠狠撸

狠狠撸Share a Scribd company logo
Lightweight-Stream-API
のあるAndroidアプリ開発
第1回スタートアップAndroid勉強会
About Me
Shinobu Okano
@operandoOS
Mercari, Inc.
Souzoh, Inc.
尝颈驳丑迟飞别颈驳丑迟-厂迟谤别补尘-础笔滨のある础苍诲谤辞颈诲アフ?リ开発
Lightweight-Stream-API?
"Stream API from Java 8 rewritten
on iterators for Java 7 and below."
https://github.com/aNNiMON/Lightweight-Stream-API
Lightweight-Stream-API?
Androidでも使える!!
Lightweight-Stream-API?
ヤター?
Lightweight-Stream-API Includes
? Functional interfaces
? Stream/IntStream
? Optional class
? Exceptional class
? Objects from Java 7
Streamだけじゃないんやでー!!
Lightweight-Stream-API Includes
ちなみに...
? Lightweight-Stream-APIって名前が長い...
? LSAって訳すっぽい
? READMEにLSAって記述があった
? 資料ないでLSAと書いてあるのは?
Lightweight-Stream-APIという意味です
Stream
Stream?
Java 8で導入されたAPI
Stream?
"A sequence of elements
supporting sequential and
parallel aggregate operations."
Stream(正しくはないけど雑に...)
繰り返し処理のforやwhileをStreamにして
パイプライン的に処理する
Lightweight-Stream-API
? "without parallel processing but with a variety
of additional methods and with custom
operators"
? parallelは提供されていない
Lightweight-Stream-API ≠ Java 8 Stream
? イコールではない
? Java 8 Stream APIのようなインターフェイス
もったもの
Streamの流れ
? Streamの生成
? 中間操作 (map,?lter,etc.)
? あるストリームを別のストリームに変換する操作
? 終端操作 (forEach,count,collect,etc.)
? 結果または副作用を生成する操作
Java 8 Stream
? スコアのListから30点以上のものを表示する
? Java 8のCollectionにStreamに変換するメソッドがある
List<Integer> scores = Arrays.asList(100, 30, 35, 20);
scores.stream() // Streamの生成
.filter(score -> score >= 30) // 中間操作
.forEach(System.out::println); // 終端操作
for
? スコアのListから30点以上のものを表示する
for (Integer score : scores) {
if (score >= 30) {
System.out.println(score);
}
}
Java 8 Parallel Stream
? parallelStream()で並列処理
? 並列で処理するので結果の順番は変わる可能性がある
List<Integer> scores = Arrays.asList(100, 30, 35, 20);
scores.parallelStream()
.filter(score -> score >= 30)
.forEach(System.out::println);
Lightweight-Stream-API
? スコアのListから30点以上のものを表示する
? Stream.ofでStreamを作る
List<Integer> scores = Arrays.asList(100, 30, 35, 20);
Stream.of(scores) // Streamの生成
.filter(score -> score >= 30) // 中間操作
.forEach(System.out::println); // 終端操作
出力じゃなくてListにしたい!(Lightweight-Stream-API)
? 終端操作をcollectにするだけなので簡単!
List<Integer> scores = Arrays.asList(100, 30, 35, 20);
List<Integer> filteredScores = Stream.of(scores)
.filter(score -> score >= 30)
.collect(Collectors.toCollection(ArrayList::new));
中間操作、終端操作のメソッドは色々ある!
? 全部説明できないので、javadocとかみて試してね!
? 大体ほしいと思う機能は ってるはず
? Stream - Lightweight-Stream-API javadoc
? http://static.javadoc.io/com.annimon/stream/
1.1.3/com/annimon/stream/Stream.html
Lightweight-Stream-API
? AndroidでJava 8のStreamっぽいものが使える!
? 中間操作と終端操作は同じで書ける
? 流れるように処理を書けるので気持ちいい!
? Java力 UP ?
? Java 9でStreamに追加されるfunctionも使える!
? good-bye for??
Optional
Optional?
"A container object which may or
may not contain a non-null value."
Optional?(雑)
値をラップしてnullかもしれない
ことを表現するクラス
good-bye NullPointerException?
NO ?
Optional - Java 8
Optional<String> optional = Optionalを返すメソッド();
// nullでなければ表示される
optional.ifPresent(System.out::println);
Optional - Lightweight-Stream-API
Optional<String> optional = Optionalを返すメソッド();
// nullでなければ表示される
optional.ifPresent(System.out::println);
同じや?
Optional + Android
? Android SDKのAPIって思った以上にnullを返すものが多い
? ドキュメント読んで「え?null返るの?」と知るものも度々
? FragmentねーgetContextとかgetActivityとか…
? コードレビューでつっつかれたくない…
? Fragment#getResourcesもmHostがnullだと
IllegalStateException
Fragment#getContext()
"Return the Context this fragment is
currently associated with."
https://developer.android.com/reference/android/support/v4/app/Fragment.html#getContext()
Fragment#getContext()
? null返るやん?
public Context getContext() {
return mHost == null ? null : mHost.getContext();
}
Fragment + Optional
public static Optional<Context> getOptionalContext(Fragment fragment) {
if (fragment.isDetached()) {
return Optional.empty();
}
return Optional.ofNullable(fragment.getContext());
}
// 安全!
FragmentUtil.getOptionalContext(this)
.ifPresent(context -> {
Toast.makeText(context, "Optional", Toast.LENGTH_SHORT).show();
});
Fragment + Optional
public static Optional<FragmentActivity>
getOptionalFragmentActivity(Fragment fragment) {
if (fragment.isDetached()) {
return Optional.empty();
}
return Optional.ofNullable(fragment.getActivity());
}
// menuの更新
// 安全!
FragmentUtil.getOptionalFragmentActivity(this)
.ifPresent(FragmentActivity::supportInvalidateOptionsMenu);
Fragment + Optional
public static Optional<Bundle> getArguments(Fragment fragment) {
return Optional.ofNullable(fragment.getArguments());
}
// 安全!
FragmentUtil.getArguments(this)
.ifPresent(bundle -> {
// bundleから値を取り出す
});
複数のOptionalを扱う
? Optional AとOptional Bの両方がnullでなければ...みたいなパターン
? そもそもこれで正しいのかわからない...
Optional<FragmentActivity> optionalFragmentActivity =
FragmentUtil.getOptionalFragmentActivity(this);
Optional<String> titleOptional = titleOptional();
optionalFragmentActivity.ifPresent(fragmentActivity -> {
titleOptional.ifPresent(title -> {
fragmentActivity.setTitle(title);
});
});
複数のOptionalを扱う
? 2つのOptionalに値が入っていれば?
TupleをOptionalでラップして返す
? これならどうだ?
複数のOptionalを扱う
public static <T, R> Optional<Pair<T, R>> flatMapPair(Optional<T> a, Optional<R> b) {
if (a.isPresent() && b.isPresent()) {
// 2つのOptionalに値が入っていればTupleをOptionalでラップして返す
return Optional.ofNullable(Pair.create(a.get(), b.get()));
} else {
// そうでないならempty
return Optional.empty();
}
}
OptionalUtil.flatMapPair(optionalFragmentActivity,titleOptional)
.ifPresent(pair -> {
pair.getFirst()setTitle(pair.getSecond());
});
複数のOptionalを扱う???
public static <F, R, T> Optional<Triplet<F, R, T>>
flatMapTriplet(Optional<F> a,
Optional<R> b,
Optional<T> c) {
if (a.isPresent() && b.isPresent() && c.isPresent()) {
return Optional.ofNullable(
Triplet.create(a.get(), b.get(), c.get()));
} else {
return Optional.empty();
}
}
?
でも
JavaにTupleないやん...
Guild
? ?
? Simple java tuples.
? https://github.com/operando/Guild
LSAのOptionalにしかない便利なメソッド
? Optional.stream()
? OptionalからStreamに変換できる
? 他にもいくつかある…
Optional.ofNullable(integers)
.stream()
.forEach(System.out::println);
Java 8で同じことをすると
? 一手間必要
Optional.ofNullable(integers)
.map(integers1 -> integers1.stream())
.orElse(Stream.empty())
.forEach(System.out::println);
Optionalにも中間操作、終端操作的なのがある
? 中間操作?的なの
? map,?agMap,?lter,etc…
? 終端操作?的なの
? ifPresent,orElse,etc…
? Optional javadoc - Lightweight-Stream-API
? http://static.javadoc.io/com.annimon/stream/1.1.3/com/
annimon/stream/Optional.html
Optional
? AndroidでJava 8のOptionalと同じようなものが使える
? Java力 UP?
? ifでnullチェックするより自然な感じでプログラムが書ける
? nullがなくなるわけではない
? 扱いが難しいこともある
? Optionalのラップしてる値がnullだった時の処理を忘れるとか...
Objects
Objectsもいいぞ!
? Java 7から追加されたAPI
? AndroidではminSdkVersion 19以上じゃない
とJava 7のAPIは使えないはず
Objectsもいいぞ!
? 2つの文字列を比較したい
String s1 = String返すメソッド();
String s2 = String返すメソッド();
// s1はnullかもしれない...
s1.equals(s2);
// Objects - Lightweight-Stream-API
// どちらかがnullでも安全!
Objects.equals(s1,s2);
Andorid N minSdkVersion 24
? Java 8のAPIがいくつか入ってる
? StreamとOptionalは入ってる
? 他にもいくつか…
? Lightweight-Stream-API使わなくてもよい
? minSdkVersion 24...何年先?
Android-Java-8-Stream-Example
? Lightweight-Stream-APIの作者がAndroidで
Java 8っぽく書くサンプルを書いてる
? https://github.com/aNNiMON/Android-
Java-8-Stream-Example
まとめ
? Lightweight-Stream-APIを使えば?
AndroidでもStreamっぽいものとOptionalが使える
? Java力 UP?につながる
? Android開発のJavaだとJava 6,7で技術が止まってしまう可能性も…
? 僕と一緒に開発する人にはJavaの力もつけてほしい?
? Java 9も来年出るのでJava自体に関心を!
Links
? Lightweight-Stream-API version 1.1.3 javadoc
? http://static.javadoc.io/com.annimon/stream/1.1.3/overview-summary.html
? Stream - Java 8
? https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html
? Java 8 Stream Tutorial
? http://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/
? Optional - Java 8
? https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html
? Optionalの取り扱いかた
? http://irof.hateblo.jp/entry/2015/05/05/071450
Thanks
Ad

More Related Content

What's hot (14)

SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
?
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
Masashi Shinbara
?
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
TanUkkii
?
Behat Driven Development
Behat Driven DevelopmentBehat Driven Development
Behat Driven Development
Ryo Tomidokoro
?
动的な滨尝の生成と编集
动的な滨尝の生成と编集动的な滨尝の生成と编集
动的な滨尝の生成と编集
terurou
?
Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点) Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点)
Norito Agetsuma
?
尝补谤补惫别濒とテストについて
尝补谤补惫别濒とテストについて尝补谤补惫别濒とテストについて
尝补谤补惫别濒とテストについて
Takeo Noda
?
中?大规模で尝补谤补惫别濒を导入する罢颈辫蝉
中?大规模で尝补谤补惫别濒を导入する罢颈辫蝉中?大规模で尝补谤补惫别濒を导入する罢颈辫蝉
中?大规模で尝补谤补惫别濒を导入する罢颈辫蝉
Kenjiro Kubota
?
H2O and php
H2O and phpH2O and php
H2O and php
Junichi Ishida
?
Javaアプリケーションサーバ 構築?運用の勘所
Javaアプリケーションサーバ 構築?運用の勘所Javaアプリケーションサーバ 構築?運用の勘所
Javaアプリケーションサーバ 構築?運用の勘所
Takahiro YAMADA
?
尝补谤补惫别濒で蹿补肠补诲别を使わない开発
尝补谤补惫别濒で蹿补肠补诲别を使わない开発尝补谤补惫别濒で蹿补肠补诲别を使わない开発
尝补谤补惫别濒で蹿补肠补诲别を使わない开発
Kenjiro Kubota
?
Java SE 9の紹介: モジュール?システムを中心に
Java SE 9の紹介: モジュール?システムを中心にJava SE 9の紹介: モジュール?システムを中心に
Java SE 9の紹介: モジュール?システムを中心に
Taku Miyakawa
?
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4cCDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
Norito Agetsuma
?
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~Entity Compon...
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~Entity Compon...【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~Entity Compon...
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~Entity Compon...
Unity Technologies Japan K.K.
?
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
?
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
Masashi Shinbara
?
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
TanUkkii
?
动的な滨尝の生成と编集
动的な滨尝の生成と编集动的な滨尝の生成と编集
动的な滨尝の生成と编集
terurou
?
Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点) Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点)
Norito Agetsuma
?
尝补谤补惫别濒とテストについて
尝补谤补惫别濒とテストについて尝补谤补惫别濒とテストについて
尝补谤补惫别濒とテストについて
Takeo Noda
?
中?大规模で尝补谤补惫别濒を导入する罢颈辫蝉
中?大规模で尝补谤补惫别濒を导入する罢颈辫蝉中?大规模で尝补谤补惫别濒を导入する罢颈辫蝉
中?大规模で尝补谤补惫别濒を导入する罢颈辫蝉
Kenjiro Kubota
?
Javaアプリケーションサーバ 構築?運用の勘所
Javaアプリケーションサーバ 構築?運用の勘所Javaアプリケーションサーバ 構築?運用の勘所
Javaアプリケーションサーバ 構築?運用の勘所
Takahiro YAMADA
?
尝补谤补惫别濒で蹿补肠补诲别を使わない开発
尝补谤补惫别濒で蹿补肠补诲别を使わない开発尝补谤补惫别濒で蹿补肠补诲别を使わない开発
尝补谤补惫别濒で蹿补肠补诲别を使わない开発
Kenjiro Kubota
?
Java SE 9の紹介: モジュール?システムを中心に
Java SE 9の紹介: モジュール?システムを中心にJava SE 9の紹介: モジュール?システムを中心に
Java SE 9の紹介: モジュール?システムを中心に
Taku Miyakawa
?
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4cCDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
Norito Agetsuma
?
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~Entity Compon...
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~Entity Compon...【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~Entity Compon...
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~Entity Compon...
Unity Technologies Japan K.K.
?

More from Shinobu Okano (20)

OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!
OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!
OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!
Shinobu Okano
?
碍辞迟濒颈苍て?マッチョする话
碍辞迟濒颈苍て?マッチョする话碍辞迟濒颈苍て?マッチョする话
碍辞迟濒颈苍て?マッチョする话
Shinobu Okano
?
Android Framework Code Readingのしおり ver 1.2
Android Framework Code Readingのしおり ver 1.2Android Framework Code Readingのしおり ver 1.2
Android Framework Code Readingのしおり ver 1.2
Shinobu Okano
?
まったりAndroid Framework Code Reading #4
まったりAndroid Framework Code Reading #4まったりAndroid Framework Code Reading #4
まったりAndroid Framework Code Reading #4
Shinobu Okano
?
shinobu.apk #3
shinobu.apk #3shinobu.apk #3
shinobu.apk #3
Shinobu Okano
?
Android + JSON-RPC
Android + JSON-RPCAndroid + JSON-RPC
Android + JSON-RPC
Shinobu Okano
?
Inside Android N
Inside Android NInside Android N
Inside Android N
Shinobu Okano
?
Gradle PluginとCIと俺
Gradle PluginとCIと俺Gradle PluginとCIと俺
Gradle PluginとCIと俺
Shinobu Okano
?
shinobu.apk #2
shinobu.apk #2shinobu.apk #2
shinobu.apk #2
Shinobu Okano
?
まったりAndroid Framework Code Reading #3
まったりAndroid Framework Code Reading #3まったりAndroid Framework Code Reading #3
まったりAndroid Framework Code Reading #3
Shinobu Okano
?
Android Framework Code Readingのしおり ver 1.1
Android Framework Code Readingのしおり ver 1.1Android Framework Code Readingのしおり ver 1.1
Android Framework Code Readingのしおり ver 1.1
Shinobu Okano
?
碍辞迟濒颈苍にお触り
碍辞迟濒颈苍にお触り碍辞迟濒颈苍にお触り
碍辞迟濒颈苍にお触り
Shinobu Okano
?
顿谤辞颈诲碍补颈驳颈アフ?リを厂辫辞辞苍て?全画面スクショするそ?い\(镑辞镑)/
顿谤辞颈诲碍补颈驳颈アフ?リを厂辫辞辞苍て?全画面スクショするそ?い\(镑辞镑)/顿谤辞颈诲碍补颈驳颈アフ?リを厂辫辞辞苍て?全画面スクショするそ?い\(镑辞镑)/
顿谤辞颈诲碍补颈驳颈アフ?リを厂辫辞辞苍て?全画面スクショするそ?い\(镑辞镑)/
Shinobu Okano
?
Gradle PluginとTwitterとス?ン ト?コ キ?ヨ?シ!
Gradle PluginとTwitterとス?ン ト?コ キ?ヨ?シ!Gradle PluginとTwitterとス?ン ト?コ キ?ヨ?シ!
Gradle PluginとTwitterとス?ン ト?コ キ?ヨ?シ!
Shinobu Okano
?
颁丑谤辞尘别と础苍诲谤辞颈诲の过去?现在?未来
颁丑谤辞尘别と础苍诲谤辞颈诲の过去?现在?未来颁丑谤辞尘别と础苍诲谤辞颈诲の过去?现在?未来
颁丑谤辞尘别と础苍诲谤辞颈诲の过去?现在?未来
Shinobu Okano
?
Android Dev Tools Knowledge
Android Dev Tools KnowledgeAndroid Dev Tools Knowledge
Android Dev Tools Knowledge
Shinobu Okano
?
shinobu.apk #1
shinobu.apk #1shinobu.apk #1
shinobu.apk #1
Shinobu Okano
?
ChromeとAndroidの 過去?現在?未来 ver 0.1
ChromeとAndroidの 過去?現在?未来  ver 0.1ChromeとAndroidの 過去?現在?未来  ver 0.1
ChromeとAndroidの 過去?現在?未来 ver 0.1
Shinobu Okano
?
5分で资料作って厂濒颈诲别厂丑补谤别にアップロードする錬金术
5分で资料作って厂濒颈诲别厂丑补谤别にアップロードする錬金术5分で资料作って厂濒颈诲别厂丑补谤别にアップロードする錬金术
5分で资料作って厂濒颈诲别厂丑补谤别にアップロードする錬金术
Shinobu Okano
?
尝辞驳肠补迟の话
尝辞驳肠补迟の话尝辞驳肠补迟の话
尝辞驳肠补迟の话
Shinobu Okano
?
OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!
OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!
OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!
Shinobu Okano
?
碍辞迟濒颈苍て?マッチョする话
碍辞迟濒颈苍て?マッチョする话碍辞迟濒颈苍て?マッチョする话
碍辞迟濒颈苍て?マッチョする话
Shinobu Okano
?
Android Framework Code Readingのしおり ver 1.2
Android Framework Code Readingのしおり ver 1.2Android Framework Code Readingのしおり ver 1.2
Android Framework Code Readingのしおり ver 1.2
Shinobu Okano
?
まったりAndroid Framework Code Reading #4
まったりAndroid Framework Code Reading #4まったりAndroid Framework Code Reading #4
まったりAndroid Framework Code Reading #4
Shinobu Okano
?
Gradle PluginとCIと俺
Gradle PluginとCIと俺Gradle PluginとCIと俺
Gradle PluginとCIと俺
Shinobu Okano
?
まったりAndroid Framework Code Reading #3
まったりAndroid Framework Code Reading #3まったりAndroid Framework Code Reading #3
まったりAndroid Framework Code Reading #3
Shinobu Okano
?
Android Framework Code Readingのしおり ver 1.1
Android Framework Code Readingのしおり ver 1.1Android Framework Code Readingのしおり ver 1.1
Android Framework Code Readingのしおり ver 1.1
Shinobu Okano
?
碍辞迟濒颈苍にお触り
碍辞迟濒颈苍にお触り碍辞迟濒颈苍にお触り
碍辞迟濒颈苍にお触り
Shinobu Okano
?
顿谤辞颈诲碍补颈驳颈アフ?リを厂辫辞辞苍て?全画面スクショするそ?い\(镑辞镑)/
顿谤辞颈诲碍补颈驳颈アフ?リを厂辫辞辞苍て?全画面スクショするそ?い\(镑辞镑)/顿谤辞颈诲碍补颈驳颈アフ?リを厂辫辞辞苍て?全画面スクショするそ?い\(镑辞镑)/
顿谤辞颈诲碍补颈驳颈アフ?リを厂辫辞辞苍て?全画面スクショするそ?い\(镑辞镑)/
Shinobu Okano
?
Gradle PluginとTwitterとス?ン ト?コ キ?ヨ?シ!
Gradle PluginとTwitterとス?ン ト?コ キ?ヨ?シ!Gradle PluginとTwitterとス?ン ト?コ キ?ヨ?シ!
Gradle PluginとTwitterとス?ン ト?コ キ?ヨ?シ!
Shinobu Okano
?
颁丑谤辞尘别と础苍诲谤辞颈诲の过去?现在?未来
颁丑谤辞尘别と础苍诲谤辞颈诲の过去?现在?未来颁丑谤辞尘别と础苍诲谤辞颈诲の过去?现在?未来
颁丑谤辞尘别と础苍诲谤辞颈诲の过去?现在?未来
Shinobu Okano
?
Android Dev Tools Knowledge
Android Dev Tools KnowledgeAndroid Dev Tools Knowledge
Android Dev Tools Knowledge
Shinobu Okano
?
ChromeとAndroidの 過去?現在?未来 ver 0.1
ChromeとAndroidの 過去?現在?未来  ver 0.1ChromeとAndroidの 過去?現在?未来  ver 0.1
ChromeとAndroidの 過去?現在?未来 ver 0.1
Shinobu Okano
?
5分で资料作って厂濒颈诲别厂丑补谤别にアップロードする錬金术
5分で资料作って厂濒颈诲别厂丑补谤别にアップロードする錬金术5分で资料作って厂濒颈诲别厂丑补谤别にアップロードする錬金术
5分で资料作って厂濒颈诲别厂丑补谤别にアップロードする錬金术
Shinobu Okano
?
尝辞驳肠补迟の话
尝辞驳肠补迟の话尝辞驳肠补迟の话
尝辞驳肠补迟の话
Shinobu Okano
?
Ad

尝颈驳丑迟飞别颈驳丑迟-厂迟谤别补尘-础笔滨のある础苍诲谤辞颈诲アフ?リ开発