eaglesakuraの技術ブログ

技術的な話題とか、メモとか。

flutter build ipaのad-hocビルドが異様に遅い問題の対応

発生した問題 AppStore用ビルドは20分前後でビルドが完了する 検証用のAd-Hocビルドが60分以上時間がかかる XCode 13.2.1, Flutter 2.10.4 試したこと Swift/Clangの最適化レベルを変更 -> 効果なし dSYM出力無効化 -> 効果なし 突き止めた問題 --export-opt…

dartのFreezedとPImplイディオムでメンバ保護を行う

前提 Flutterの開発でReduxアーキテクチャを採用している。 Stateの管理に freezed を使うと、簡単な代わりに全てのメンバがpublicになってしまう。 一部のメンバはprivateにしたり、計算済みの値をキャッシュしたい。 改善 概念。 @freezed class ExampleSt…

dartでKotlin.internal funっぽいことをする

dartのinternal fun (dart 2.15には)ない(たぶん)。 特定packageだけでアクセスしたいメソッドとか作れない。 作ったらみんなアクセスされてしまう。 解決方法 // src/example.dart class Example { String _value = ''; String get value => _value; } …

ついにGSuiteの無料版がシャットダウンされるので移行した

GSuite無料版 @gmail.com ではなく、独自ドメインのGSuiteが条件付きで無料で使えていた 10年ほど前まで(いまほどGSuiteが普及してない時期)は、無料で10アカウントまで独自ドメインのGSuiteを利用することができた 5年前時点ではもう無料では作れず、有料…

Kotlin 1.6に変更してproguardをかけたら通信周りが死んだので直した

事象 アプリにログインできない 調査 APIをcurlすると、正常に動作する(サーバーは正常動作してる) Debugビルドで実行すると、正常に動作する(プログラム自体は正常である) サーバーのログを確認すると、送信値のValidationに失敗している Releaseビルド…

Flutter iOSでファイルの書き込みが静かに失敗する不具合の対応

flutter doctor $ flutter doctor Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, 2.5.3, on macOS 12.0.1 21A559 darwin-arm, locale ja-JP) [✓] Android toolchain - develop for Android devices (Android S…

AndroidアプリのKotlin 1.4/1.5から1.6へのマイグレーション

AndroidX Roomのコンパイラが不正なJavaクラスを吐き出す Entity(だいたいdata class)に複数のコンストラクタがある場合(Entityをnewする際のサポートのために作ったコンストラクタ)、Kotlin 1.6からRoom Compilerが不正なコードを吐き出すようになった …

M1 Max Macbook Pro(14inch)の所感

購入したスペック M1 Max 10 CPU 32 GPU 64GB RAM 512GB SSD 環境構築で躓いたところ Android SDKをAndroid Studioからインストールも認識もできない なにかに引っかかってエラーらしい IntellijのAndroid Pluginに付属しているGUIでインストールするとAndro…

Android StudioとVSCodeの開発効率のメモ

コード生成 equals系のオーバーライドで差が出る Android Studioは割と素直にできるし、data classは自動的に行われる VSCode + Dartは標準機能に無いのでExtensionを追加 ただし、Classの記述状況によってはExtensionが生成してくれないので自分でどうにか…

Flutterアプリ開発環境の長所短所

M1X出ないのかよ!! Apple発表会で出なかったので、手持ちの環境の再整備を行うことにした 各環境のレビュー Intel Mac mini 2018 + Windows i7 6C12T / RAM 64GB 従来の開発環境 iOSアプリビルドにはmacが必須なので用意した環境。 WindowsからVSCode Remo…

Android12対応でやったこと

もうすぐAndroid 12がリリースされるので、最低限対応した内容をメモする。 Android Studio AF対応 新AndroidStudioにビルドツールを切り替えた UnitTestをRobolectricからInstrumentation Testをメインに変更 Android Studio AFから、Robolectricが実行しづ…

SONYのHDDレコーダーのリモート予約が正常動作しなくなったのでエンジニア的カンで直した

利用機器 SONY製 BDR-BDZ-FW2000(容量2TB, ホームサーバー機能対応のモデル。以下レコーダー) マンション標準のネットワーク(グローバルIPは割り当てられない, 1家庭500~800MBps程度の速度が最大) Google Nest Wi-Fi(ただしレコーダーはハブを介して有…

GCPを使って子供関係の通知をLINEに統合する

なにをやったのか 子供が保育園・小学校・学習塾に通っている それぞれ、お知らせがWebに掲載される(日記とかも含む) 個別連絡はメールで届く(学年単位の緊急連絡とか) いちいち学校のウェブサイトで確認したりメールを検索するのが面倒なので、LINEに通…

ビルドの並列化をしすぎてCPU占有率100%になってしまったAndroid Studioプロジェクトの対処

何が起きたか モジュール分割や様々な工夫をしてビルド時の並列性を高めた 高めすぎて、Ryzen 3950Xの 16コア 32スレッド の能力を超えた並列性を持ってしまった その結果、Gradleのビルドを行うとすべてのCPUリソースを完全に食い尽くすようになった Zoomと…

Android Studio Arctic Fox Canary-11の所感

現状の利点 Jetpack Compose(Beta, production-ready)が使える AS 4.1.xからの移行 Android Gradle Pluginバージョン変更 gradlewバージョン変更 基本的に素直に移行できた。 現状の問題点 Library Projectで問題が出る。 Application Projectでは使えている…

イカれた映画観客を紹介するぜ!!

持ち込んだペットボトルをごっきゅごきゅと音を立てて就活生風の男 / TOHOシネマズ上野 / ラブライブサンシャイン TOHOシネマズは基本的に飲食物は持ち込み禁止のはず ごっきゅごきゅと音を鳴らして飲んでクソうるせー 人間ってあんな音を立てながら飲めるん…

docker-composeでgoogle/cloud-sdk:emulators(firestore emulator)を利用する

docker-compose記述 version: "3" services: firestore-emulator: image: google/cloud-sdk:329.0.0-emulators ports: - 8004:8004 command: gcloud beta emulators firestore start --host-port "0.0.0.0:8004" これで docker-compose up で起動できる。 ポ…

APIサーバーの実行環境の所感 2020

Google App Engine 言語/ランタイムバージョンが限定される 複数バージョンをデプロイして、複数の指定バージョンを簡単に試せる staticファイルの配信が簡単 Go1.9時代(第1世代GAE)はいつも使っていた 今はstaticファイルの配信に使う Firebaseホスティング…

Windows環境のRobolectricでUri.toFile() KTXが正常に動作しない

問題点 Windowsファイルシステムはドライブレター(C:とか)やパスセパレータ(¥)がLinux/Macと異なる Uri.fromFile()を実行したとき、ドライブレターやバッククォート(日本語だと円マーク)を含んだ文字列がURLエンコードされる KTXのUri.toFile()を行う…

WindowsのNTFSはtree()が遅い

起きた事象 Windows版Android StudioのGradle Sync(像のアイコン押すと走るやつ)が異様に遅い 普通に gradlew 実行だけでも遅い MacやUbuntuだと早い 具体的にはこのくらい Windows: gradlew 40秒, WSL2も同じくらい NVMe PCIe 4.0接続しているので、スト…

Protocol BuffersのAndroid向け実装としてSquare Wireを採用した所感

Wire square.github.io Protocol Buffersを採用した理由 大量のデータを扱う処理で、画面外の情報を一時的にファイルやDBに退避したい ついでにIntentで渡したりするのも簡単にやりたい モデルの定義を簡素化したい POJO定義してJSONエンコードも(Intentにp…

AndroidアプリプロジェクトのJDK11対応

AndroidのJDK Android Studioに付属しているJDKはJava8相当 なので、公式にはJava8でビルドするのが良いと思われる なぜJava11対応が必要になったのか CircleCIが用意しているAndroidビルド用Docker Imageが突然Java11になった ああもうしゃーないなぁとか思…

メイン開発PCのパーツ交換をした

メイン開発マシンのスペックアップのため、一部のパーツを入れ替えたので今後のためにメモ。 メイン開発マシンのスペック(2017~) 基本スペック Ryzen 1950X メモリ 2400MHz / 8GB×8 GeForce GTX 1060 NVMe SSD 512GB×2 表OS / Windows 10 / ストレー…

Mac版IntellijでGradle Syncが出来なくなった場合の対処

発生した問題 最近購入したMac Book Pro 13inch / 2020 / RAM32GBでIntellijをインストール gradle syncが行えない 必ず失敗し、ログも表示されない IntelliJ自体のログを見ると、 Java home is different と言われてDaemon接続に失敗しているらしい 解決 An…

Intellij Idea 日本語EAP版が配信されているので試した結果、アンインストールした

日本語化の利点 日本語話者なので、自然に使えるでしょう 初学者に勧めやすい これは重要。超重要 日本語Visual Studioから、英語Eclipseに移った当時(10年以上前)、必死に日本語パックの初期設定とか探した EAP版の問題点 フィードバック済み Run... とか…

ChildFragmentのViewが一部条件で表示されない場合のワークアラウンド

問題点 MotionLayoutの中にChildFragmentでConstraintLayoutの中にFragmentの中にカメラプレビューを置いた ユーザーの操作にあわせてアニメーションしたり、Viewを入替えたりする サムスン、Huaweiの端末(もしくはAndroid 8以上?)でChildFragment.replac…

仕事用モバイルノートの要件 2020

新型PCが発売される季節なので、選定の際の要件を定義しておく。 状況を整理するのは良いことだ。 利用シーン 会社が運営している施設で作業するのに使う 往復で徒歩40〜50分くらいになる 基本的に自宅作業なので、気分転換にカフェとかで仕事する 平時であ…

Android定型コードをスッキリさせるための Wofkflow Dispatcher ライブラリ 1.0.0を公開

Wofkflow Dispatcherとは GitHub - eaglesakura/workflow-dispatcher Androidアプリ開発でよくある 画面やActivityやプロセスを跨ぐ可能性のある非同期処理 をなるべく簡単に扱うためのライブラリ Annotation Processorを使って、定形処理を出力する startAc…

秘伝のタレを受け取ったときにまずやること

秘伝のタレとは 年単位で職人によって継ぎ足され、熟成されたソースである 衛生環境が良い秘伝のタレは素晴らしい味だが、常に良い衛生環境の中で育つわけではない 深呼吸する 何事も、一歩ずつ解決しなければならない コードフォーマッタを適用する 最初に…

Android Studio 3.6.1で稀にReleaseビルドが失敗するのを回避する

失敗時のログ Execution failed for task ':app:minifyReleaseWithR8'. > Multiple entries with same key: Method $$ServiceLoaderMethods.$load0 Proto L java.util.Iterator =Encoded method Method $$ServiceLoaderMethods.$load0 Proto L java.util.Ite…