---
# System prepended metadata

title: 'Shibuya.apk #36'
tags: [Shibuya.apk]

---

# Shibuya.apk #36

###### tags: `Shibuya.apk`

## Android QのNavigation Barについて
フルスクリーンのアプリを作るとQから対応したナビゲーションバーをiPhoneみたいに表示・管理できるようになった．
昔からNavigation barの領域までアプリケーションを描画する事はできて，それをEdge to Edgeとよんでいた．

### Window Inset
Window Insetを使って，Qから追加された左右のEdgeのGestureが有効化されている端末の場合，アプリの挙動を編集できる．

#### オプトアウトの利用ケース
ガイドラインが存在する．
全画面のジェスチャーをアプリで上書きするのはやめてほしいらしい．

### トラブルシューティング
- スクロール対応
    - アプリを全画面表示するのでアイテムが切れてしまうことがあるらしい
    - コードでパディングを剽窃する処理を挿入する．
- ドロワー対応
    - 方針がフラフラ・・・
    - 現状Beta 5と組み合わせると上のハンバーガーを押さないとだめになった．
    - 祈って待つ
- ボトムシート対応
    - ホームジェスチャとバッティング
    - ボトムシートの背を高くする！（ジェスチャ領域にかぶらなければOK）

## まとめ
Gesture使いたいユーザが一般的には多い．
Gesture選ぶのはユーザなのでそれを邪魔しないようにしないとだめ
フルスクリーンのアプリのほうが体験が良くなるので，できれば対応したいよね．

## Play Billing Library 2.0
https://speakerdeck.com/syarihu/play-billing-library-2-dot-0
Googe Playの課金サービスを提供するためのもの
AIDLとかいうやつはライブラリの中身に隠蔽されているのでいい感じに使うことができる！

### I/O 19での発表
ロードマップ
- AIDL，PlayBillingLibrary 1.0のサポートは2.0のリリースまで．

### 2.0の概要
- acknowledge
    - 支払ってから3日以内に承認しないと払い戻しされる
    - 実際に自分で承認する必要があるのは2.0から
    - テスト用のライセンスアカウント購入を行った場合は，いい感じにお金が帰ってくる！
    - 今まではアプリからレシートをサーバに贈り，決済が成功したかどうかを認識していた．これを使えば，サーバから承認されているかどうかを受け取ることが可能である！
- Pending transactions
    - コンビニとかで現金払いをしてその後にアプリがいで下記人ができる
    - 遅延支払いできる→店舗での現金支払い
    - 定期購入では使えない．そもそも出てこないので間違えづらい
    - 日本ではまだ使えない

`enablePendingPurchases`を入れるとPending Transactionsをサポートしていることになる
PurchaseStateで支払い状態を取る

### しったこと
`not()`というメソッドが存在
論理否定．`!`よりこっち派の人がいるらしい
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/not.html

## Gradle Custom Tasks
開発ワークフロー
- Feature Development
    - Merging feature branch
- QA
    - デプロイ

とかいろいろ複雑なことしてる．
CIはCircle CIを使っている．
nightly buildとかもCircle CIの設定ファイルだけでできるらしい．
いくつかワークフローがあって複雑．

しかもこの人達はBitriseからCircle CIに引っ越してる．やはりyamlでいじれないのはつらいのか・・・

### Custom Task
- プルリク開く
- バージョン書き換える
- マージとプッシュする
- Slackとかに通知をとばす

### 実際にどうやって書くのか
- buildSrcを作る
- build.gradleにbuildSrcを登録
- KotlinDSLでCustom Taskをsakuseisuru
    - classはopenでないとだめ！
    - DefaultTaskを継承する．
    - 入力が欲しい場合は，@Inputというアノテーション付きのプロパティを定義
    - @TaskActionアノテーションで実際のタスクを定義する
- Custom Taskを登録する
    - build.gradleで登録しないと認識されない．
    - tasks.register()で登録する
    - グループとか入れないとだめ

### 例:aggregateLintReport
複数モジュールのLintの結果をまとめたい
java.io.filesとかを使ってゴリゴリ書くっぽい？
ゴリゴリ書いてますね・・・
見た感じ結構罠多いのかな？踏み抜いてなんとか戦って頑張った記録という感じがした．

でもこれ使えばかんたんにアプリのバージョン番号管理とかできそう．walkではRubyのなんとかを使っていたが，間違いなくこっちのほうが良いね！

### 発展
- ネットワークIOも使える．
- Gitのコマンドも叩ける．

### DroidKaigi 2020
五反田だって

## コード解析でFlutterのプロジェクトを見える化する
https://speakerdeck.com/syarihu/play-billing-library-2-dot-0 ←byたかひろむさん
https://pub.dev/packages/analyzer ←公式サイト
コード量は少なくて住むが，大きくなってくると，かんたんに構成とかをわかってもらえるようにならない．
Androidだとモジュールの関係図とか作れる．そういうことをしたいっぽい．

analyzerとか言うパッケージが標準でサポートされており，これを使うといい感じになりそう．ソースコードの解析をしてくれる．

### 流れ
- AnalysisContextを作成
    - AnalysisContextCllectionを使う．
    - いい感じに解析してContextを作ってくれる．
- 解析結果を得る．
    - Contextの中にAnalyseFilesがあるので，それを回すと解析したファイルのパスが分かる．
    - LibraryElementがもらえる．
- ClassElementを得る．
    - ClassElementはクラスに入ってるメソッドとか
    - LibraryElementのElementVisitorを使ってClassElementを得る
    - ここまでくれば欲しい情報を持ってきてMarkdownとかにできる．
    - Graphvizを使ってグラフ化するとかもここまでくれば余裕そう．

これはVisitorパターンの実装らしい．
https://www.techscore.com/tech/DesignPattern/Visitor.html/

## Coroutines Flow
コールドストリーム

ワンショット戻り地ありなし、ホットストリームが今まで存在。

ホットストリームは受信者の有無に関わらず動作。コールドストリームは受信者がいないと動作しない。

ホットストリームは容易にメモリリークする
→コールドストリームほしい！

Flowつくる！
最新のCoroutineですでに使える
ブロックを作り、その中はsuspend。
streamを作って、collect関数で受信をし始めて始めて動作し始める

collect関数をトリガにしてsuspend関数を実行する。
このsuspend関数はcoroutine scopeに属しているため、閉じ忘れがない！
スレッドまたぎのイベントストリームは作れないため、channelFlowが用意されている。

オペレータもたくさんある
チャンネルはchannelFlowでしか使うべきではない
FlowはだいたいRxJava！？

## Room 2.2.0
Pre Packaged Database
assetからDBを作って初期のデータを入れられる

Schema default values

Many to Many Relation
associateByをつかう

One to One Relation
単一オブジェクトにもRelationが使えるように

Target Entity
あったりなかったりするオブジェクトを挿入できるやつっぽい
column infoで別名指定とかもできる

## App Crawler Tool
しれっと追加されてる:eyes:
テストコード無しで自動的にテストするよーとか書いてあるらしいw
自動でUIをテストしてくれる
Firebase TestlabのRobo Testと同じものらしい。
特定のユーザでログインするとかもできる

嬉しさ
- 制御スクリプトのデバッグが楽になりそう？
- お金がない、セキュリティでFirebaseが使えない場合
- Device Formに好きなものを選べる

デザイン確認に良さそうではある

## Google Play Developer API
Google PlayをAPIで操作する
アプリの管理の他に購入とかサブスクとかできる

SDKも用意されてる！つよい！でも破壊的変更はよくあるらしい。

App Editは同時編集できない！前の人が死亡する
1ActionしてすぐCommitしたいが、コール制限辛い。

## AABで何が変わる？
sideloading:play storeを介さずにアプリをインストールする行為。これをするとAABの場合は死ぬ。

DeployGateではAAB対応を鋭意開発中とのこと！