eaglesakuraの技術ブログ

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

Android

Kotlinでinterface定義モジュールと実装モジュールを分離した上で実装を隠蔽する

やりたいこと interface定義と、その実装をなるべくキレイに切り分けたい インターフェース定義用モジュール // ":interface-module" に定義を書いていく... interface AuthService { fun login(id: String, password: String) } 実装用モジュール // ":impl…

LiveDataを複数回observeしても1個のObserverしか登録されない現象と解法

前提 LiveDataのonActive/onInactiveで処理を行わせていた 強制的にLiveDataをactiveにするため、次のようなExtensionを作った LiveDataをactiveにしたいだけなので Observerはナニも処理していない // 強制的にLiveDataをactiveにする fun <T> LiveData<T>.forceA</t></t>…

Windows版Android Studioのターミナルでbashする

Windows版のTerminal IntelliJやAndroid Studioの標準Terminalはプラットフォームに合わせて起動する Windowsはcmd.exeが起動 bashのほうがなれてて使いやすい Terminalを変更する Settings > Tools > Terminal > Shell Path 標準だとcmdになってる こんなバ…

Windows版Android Studioの動作を軽くする

Windows版Android Studioは遅い どういうわけかデフォルト設定だと遅い CPUスペックとかに関係なく遅そう Code Completionが遅い LayoutEditorのプレビューが遅い そもそも起動が遅い どうにか高速化したい LinuxとかMacとかでは軽い 原因 Android Studio 3.…

開発リソースがないなら、Google Playのリリースは取り下げておけ、という経験則

こんな状況は危ない 昔は自社でアプリ開発してたけど、もうメンテしなくなって久しい とりあえずアップしておいて、使う人がいるならソレでいいや 何が起きるか Google Playは年1〜2回くらいはConsoleのアップデートがある アップデートにより、一部のアプ…

Flutterのプロジェクトが始まったらまずやること

XCodeと仲良くScheme設定 だいたいProductionとDevelop環境別れてるんだからSchemeを作成する SchemeとDebug/Releaseの組み合わせに合わせてConfigurationファイルを作成する 何をする用事がなくても、pre buildスクリプトはSchemeごとに設定しておく どうせ…

GAE/Go 1.12は認証ヘッダが重複しているとGoogle Frontendが自動的に400を返却する

どういう問題か GAE/Go 1.12にバージョンアップをした サーバー側のUnitTestは通過していた クライアント側のテストを行うと、特定APIがすべて400を返却していた ログが残っていない。少なくともGAEアプリコードに到達していない。 原因 クライアント側で Au…

特定条件下でMotionLayout配下のViewが再描画されない問題のWorkaround

バージョン "implementation"("androidx.constraintlayout:constraintlayout:2.0.0-beta2") 問題点 MotionLayout配下にFrameLayoutを配置し、動的にコンテンツを入れ替える MotionLayoutはアニメーションで2つのレイアウト間を遷移させている 特定条件下で…

Ubuntu 19.04をインストールした環境でAndroid Emulatorが激重になる問題の対処

状況 Thinkpad X1 Carbonを購入したので、Ubuntu 19.04をクリーンインストールしてセットアップした Android Emulatorを起動したが、動作が異様に遅い 1〜2fps程度しか動作しない 問題の観察 QEMUはインストール済みで、KVMは正常起動する Dockerが動作して…

ライブラリプロジェクトでFirebase SDKを使ったUnitTestを動作させる

なぜコレが必要か? Firebase SDKを組み込んだ処理は、通常 Google Services Plugin と google-services.json をアプリに組み込むことで動作する このPluginはApplicationビルド用のプロジェクトでしか動作しない ライブラリプロジェクトにFirebase SDKを組…

FlutterとXamarinとAndroid Nativeと

Flutter を使う機会があったので、所管をざっくりと。 個人的に思うFlutterを使う際に留意すべき点 Flutterのレンダリングは Skia ベースの独自エンジンで動いている Android的に言えば、どんな画面もView1枚である Plugin実装を読むと、 TextureId を取得…

Kotlin Android-Parcelize拡張の後方互換問題を考える

Parcelize拡張概要 Androidアプリ開発者にとってメンドウな Parcelable の定形実装を自動化できる Annotationをつけるだけで、フィールドを全部Parcelableに突っ込んでくkれる 突っ込めないオブジェクトは警告が出る Annotationで除外を指定できる Example /…

Androidアプリのmicro-module設計

サーバーサイドの世界では、micro-servicesとか流行ってるね Androidの世界で、microな設計思想は取り入れられるのか? Androidアプリのmoduleはどこまで分けられるのか? Domain Bridge ドメインで定義したServiceの実装詳細を書く Factory どのブリッジを…

AndroidManifestやApplicationIDに記述されるPackage名にsnake_caseはアリかナシか

Package名の命名規則を、メジャーな形に統一したい プロジェクト内で統一したかった package.name.hoge.fuga package.name.hoge_fuga package.name.hogeFuga あたりの競い けど snake_case はLintで怒られる allword は単語登録が毎度必要になる cammelCase …

AndroidでKotlin1.3-RCへの移行を試みる

早期移行する理由 coroutinesのstable版へ移行したい 移行時の問題点を洗い出しておきたい 対応箇所 /build.gradle buildscript { // 本体とcoroutinesのそれぞれのバージョン // coroutinesは標準機能に昇格したが、Android(及びJVM)用ライブラリは別途配…

Kotlinの拡張関数とUtilクラスの使い分け ver 2018.09

最初にやるべきこと Jetpack-KTXを探す 公式拡張関数を探す 拡張関数(プロパティ)を使う場合 単体で存続できるケースは拡張関数を許可する 仮にこの拡張関数が属するライブラリと離婚することになっても、この処理は容易に移行できる // DO val Context.de…

kotlin-coroutines 0.26.1での破壊的更新

coroutines 0.26.1の変更点 多くのクラスやトップレベルfunctionやプロパティがdeprecatedになった 変更から見える方針 トップレベルの関数やプロパティを、いずれかのobject等に所属させることが主な目的に見える 主なDeprecated UI, CommonPool 等の標準Di…

Google Play Services Gradle Plugin 4.1.0の問題点

既知の問題点 Gradle Pluginバージョンは com.android.tools.build:gradle:3.3.0-alpha10 google-services.jsonを検索しない 考えうる限りいろんなpathにおいたけど反応なし ログも --debug オプションで見たが吐き出されない 完全にnot workingらしい 4.0.2…

AS3.3 canary-11の問題点

問題点 Find Action(Ctrl + Shift + A)が正常動作しない たまに正常動作する だいたい正常動作しない Crash Reportが吐き出されてるので、どっかのPluginと競合している Reportは送った 以前はFlutter Pluginと競合していたので、uninstall済み Dartも怪し…

QRコードをスキャンする仕様で注意すべきこと

QRコードもカメラも物理デバイスである QRコードは対象物の物理サイズにも留意して作成する 小さすぎると、カメラに映ってもオートフォーカスが正常動作しない場合がある レンズが汚れていると更に辛い フロントカメラは概ね低スペックなので、バックカメラ…

CIや開発時のビルドタスク管理にfastlaneを導入した

導入前 shellスクリプトを必要に応じて書いていた どういうビルドタスクやスクリプトがあるのか、ドキュメントが面倒だった 導入した理由 ビルドタスクの一覧性を担保できる fastlane list でタスク一覧が表示される タスクを分類できる fastlane platform_f…

coroutines 0.24.x runBlockingの仕様変更と対策

変更されたこと runBlockingがUIスレッドからの呼び出しで例外を投げるようになった UnitTestの内部とかで使ったり、無理矢理coroutinesのChannelとかを待ち合わせる用途に使えなくなった 特にJVMでのUnitTestで使ってたので、全部死んだ // この呼び出しは…

Huawei P20 Proの所感

購入 / 選定理由 会社に開発端末(普段使いを兼ねる)を返却するにあたり、新規に端末が必要になった 選定で重視した点 ARCoreが使用できる 基本スペックが良い カメラ性能が良い 端末サイズは問わない 今まではサイコンにする兼ね合いからXperia Compact系…

システムレイヤーにOpenGL対応Viewを追加する

Manifest設定 システムレイヤーへの描画は専用のPermissionがある <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> WindowManagerでViewを登録 レンダリング用のViewとタップ用のViewを分けると設計が楽になる場合がある SurfaceViewは軽量だが、View移動ができない OpenGL側でViewportを調整してあげると</uses-permission>…

Android Studio 3.2-Beta1 導入

Experimental設定が追加 Navigation Editorが標準で無効化された 新たに Settings > Experimental が追加された そこで有効化できる 旧バージョンからアップデートしてビルドが通らない ~/.gradle/ を削除することで復旧できる ASの場合は Invalidate Caches…

ARCore for Unityの事始め

ARCoreのサポート端末 少し前にサポート端末が拡充された Nexus5X, Nexus6Pがサポートされた Xperia XZ1Compactもサポートされた 一般的に使うには辛い ARKitのほうは手軽で強い コアライブラリ ARCore by Google コアライブラリ これがないと始まらない ア…

Android Studio 3.2 Preview18 所感

Kotlinアップデート 1.2.50 ConstraintLayoutのpackage名がもとに戻っていた 幻だったのだろうか implementation/apiでbuild.gradleに記述した依存関係がビルドに反映されない Jetifierが悪さをしている可能性がある こいつらを gradle.properties から外す…

AndroidStudio 3.2-Canary17の所感

Moduleの依存グラフが表示されるようになっていた いつからだろうか Build Variants > i アイコンから見れる 依存Moduleの依存は見れない app > sdk > ktx のような依存グラフにはなってない そのうち改善される? Android API-28公開 これでライブラリ公開…

RangeBarで始めるCustomViewとDataBindingとMVVM

どういうことがしたいのか こんなUIをMVVMで簡潔に実現したい。 ユーザーに心拍数(下限、上限)等の一定範囲データを設定させる その際、実装コストを減らしたい なるべく現代的に仕上げたい UIは RangeBar を利用する RangeBarを操作すると、対応する値が…

Android NDKでprotocol buffersを利用する

Protocol Buffersとは Protocol Buffersは2008年の7月7日=鑑純夏さんの誕生日にGoogleが公開したデータシリアライズ・デシリアライズライブラリです。なお、七夕は雨です。 IDLという独自のテキストフォーマットでデータを記述し、複数プラットフォーム間で…