2025/04/12 ~ 2025/04/18 のもくもく日記
もくもく 前回までは
2025/04/05 ~ 2025/04/11 のもくもく日記 をご覧ください。
途中経過
その1
Hyperion Android で ServiceLoader
の仕組みを使った各Plugin の自動読み込み部分はここっぽい
package com.willowtreeapps.hyperion.core.internal;
import com.willowtreeapps.hyperion.core.PluginSource;
import com.willowtreeapps.hyperion.plugin.v1.Plugin;
import java.util.HashSet;
import java.util.ServiceLoader;
import java.util.Set;
class ServiceLoaderPluginSource implements PluginSource {
@Override
public Set<Plugin> getPlugins() {
Set<Plugin> plugins = new HashSet<>();
ServiceLoader<Plugin> loader = ServiceLoader.load(
Plugin.class, getClass().getClassLoader());
for (Plugin plugin : loader) {
plugins.add(plugin);
}
return plugins;
}
}
その2
Docker Desktop のアップデート中に、間違えてマシンの再起動をしてしまったorz
残骸があったので試しにアンインストールしたら削除対象は無いと出て、 再インストールはいくつかのファイルを上書きできず失敗してしまったw
......なので地道に上書きできないファイルを整理したら、なんとかなったw
その3
Android アプリで ServiceLoader
利用のことを調べたら
残念なことに、デフォルトの ServiceLoader には Android のパフォーマンスへの重大な影響があります。そのため、最新バージョンの R8(Android Gradle Plugin 3.5.0 以降に含まれる 1.5.X ブランチ)を利用しており、コード圧縮と最適化を有効にしていない限り、このアプローチを利用するべきではありません。
とあってびっくりした 👀
ちなみに、ちゃんとminify すればServiceLoader をインライン展開してくれるので実行コストは特に変わらないらしい
10年先を見据えてJavaからKotlinへ LINE Androidアプリの基盤を支えるOSSライブラリLich | ログミーBusiness
今回の進捗
- GitHub
- Nintendo Switch でトレーニングを進めた
- 本を読み進めた