今天參加的活動是 CyberAgent 定期會舉辦的 Android 相關的聚會,由於最近幾乎一整天都在寫 Android 就決定跑來聽聽了。
- connpass 活動頁: https://cyberagent.connpass.com/event/65347/
- 這次的講者主要是 CyberAgent 旗下媒體類的公司的 Android 工程師
以下是今天晚上聽的講題
| 標題 | 講者 | 簡報 |
|---|:---:|---|---|
| AmebaアプリでのCI改善
(Ameba App CI 的改善) | 今中 幸太
Ameba | 後補 |
| View Animation
(View 的動畫) | 竹田 智
AbemaTV | 後補 |
| 運用3年のタップル誕生でJavaからKotlin移行した話
( Tapple 誕生後營運三年從 Java 移轉到 Kotlin 的那些事) | 向中野 亘
tapple | 後補 |
| RxJava1 -> RxJava2移行
(從 RxJava1 升級到 RxJava2) | 清水 泰博
AWA | 後補 |
AmebaアプリでのCI改善 / Ameba App CI 的改善
講者: 今中 幸太 / 株式会社サイバーエージェント
一開始碰到的問題
- CI 的地位很低,就算是執行錯誤或是 Timeout ,還是不太有人在意
- 因為沒有並行執行,所以效率很差
- 執行的時間超長,原先執行一次要花 21:56
測試
- 使用 Firebase Test Lab 以及 Robolectric
成果
- 降低一半左右的單次執行時間 → 耗時 12:12
- 解決無法在裝置上自動化測試的問題
解決執行時間很長的問題
- 準備一個專案本身自己的 SDK 資料夾,把 Android Home 的資料夾指向該資料夾,減少在 CI 的過程需要準備 SDK 的時間
- 加上這樣
parallel:true
的設定,讓他可以並行執行(預設是關閉的)
未來想做
- Lint
- 使用 danger/danger
- Automation Release
等等
View Animation / View 的動畫
講者 竹田 智 / 株式会社AbemaTV
動畫的三大種類
- view animation
- property animation (API 11 開始)
- drawable animation
Material Design 裡面有提到
- Motion provides meaning
View Transition Customize
轉場種類:
- Enter - 進入畫面
- Exit - 退出畫面
- Shared Elements (可以把當下畫面的物件帶到下一個畫面去)
- API 21~
- 可以參考 Google Play Store 點開一個項目的 App Icon 移動
非同步載入圖片碰到的問題
supportPostponeEnterTransition() // 暫停
supportStartPostponedEnterTransition() // 重開
在畫面切換的時候,在自訂過場的時候會因為非同步載入大圖,造成體驗的延遲
但是又想要維持操作體驗
解法: Glide 的 thumbnail support (可以同時讀入多張圖片)
thumbnail → animation → show original image
其他 Tips
- 轉場時,轉場的物件不想被 status 或 navigation bar 擋住時,可以 把 status 或 navigation bar 放進 shared element transition
- 畫面轉向無法控制過程的動畫
- 可以在 onMapSharedElementCallback 處理
總結
- Animation Types
- 動畫的連續性
- Shared Element Transition, transition Name, Activity Options
- 和非同步載入圖片一起使用動畫時需要注意的事情
運用3年のタップル誕生でJavaからKotlin移行した話 / Tapple 誕生後營運三年從 Java 移轉到 Kotlin 的那些事
講者: 向中野 亘 / 株式会社マッチングエージェント
導入 Kotlin 的原因
- Android 已經正式支援
- 現代語言
- 與 Java 的互換性高
- 集團內用 Kotlin 開發的人更多了,也有一些轉移到 Kotlin 的團隊
- 可以一併進行架構改善
- Java 工程師的話學習的成本低
還有大家都想寫
準備方式和資源
- 每週一次讀書會
- Kotlin Koans 全 42 問
- 在讀書會裡面分享和解題
- 不是只有看書,自己做過一次會比較有感覺
- 關注 Kotlin 的 Advent Calendar
成員組成
- 建議裡面一定要有一個經驗者
- 功能開發和 Kotlin 移行同時進行
- 新功能直接使用 Kotlin
進行方式
- reviewer 一定要包含有經驗者
問題: 功能開發和導入 Kotlin 要平行進行非常困難
- 優先開發新功能就漸漸不寫 kotlin 了
問題: Nullable/NonNull 不知道是什麼東西和不知道怎麼應對
無法一個一個確定 API 裡面有哪些數值可能會是 Null,因為有一百三十四十左右支
問題: 寫法太自由
- 不知道該怎麼寫比較好
- Scope 方法不知道該怎麼用
-
apply
- 變化 property 的時候可以用 run
-
let
- nullable 常用 also
-
※ Kotlin スコープ関数 用途まとめ (ngsw_taro) / Kotlin Scope 方法使用方式總覽
總結
- 營運歷史更久的服務,程式碼的負債越多就越難導入
- 能夠集中導入就導入,避免要分心做新功能就忘記要導入
- Nullable anotation
- 解決因為寫法自由產生的問題
- 團隊要有共識
- 制定程式碼風格
- 搞清楚 Scope 變數
RxJava1 -> RxJava2移行 / 從 RxJava1 升級到 RxJava2
講者: 清水 泰博 / AWA株式会社
講題分兩個階段
- 不停止開發轉移到 RxJava2 的方法
- AWA 的做法
不停止開發轉移到 RxJava2 的方法
因為 1 和 2 差很多,所以不要一口氣升
可以用這個 Library 輔助升級
RxJava2Interop
AWA 的做法
主要有講到因為 App 本身有分層的架構,所以可以一層一層保留 Interface ,慢慢搭配 RxJava2Interop 從單層的內部轉移到 2 ,最後再去動之間 Interface
另外也有推這個 library