Shion のもくログ(旧: Shion の技術メモ)

使った技術のメモや、うまくいかなかった事とかを綴ります

PR

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;
    }

}

https://github.com/willowtreeapps/Hyperion-Android/blob/develop/hyperion-core/src/main/java/com/willowtreeapps/hyperion/core/internal/ServiceLoaderPluginSource.java

その2

Docker Desktop のアップデート中に、間違えてマシンの再起動をしてしまったorz

残骸があったので試しにアンインストールしたら削除対象は無いと出て、 再インストールはいくつかのファイルを上書きできず失敗してしまったw

......なので地道に上書きできないファイルを整理したら、なんとかなったw

その3

Android アプリで ServiceLoader 利用のことを調べたら

残念なことに、デフォルトの ServiceLoader には Android のパフォーマンスへの重大な影響があります。そのため、最新バージョンの R8(Android Gradle Plugin 3.5.0 以降に含まれる 1.5.X ブランチ)を利用しており、コード圧縮と最適化を有効にしていない限り、このアプローチを利用するべきではありません。

引用元: https://developers-jp.googleblog.com/2019/07/patterns-for-accessing-code-from-dynamic-feature-modules.html

とあってびっくりした 👀

ちなみに、ちゃんとminify すればServiceLoader をインライン展開してくれるので実行コストは特に変わらないらしい

10年先を見据えてJavaからKotlinへ LINE Androidアプリの基盤を支えるOSSライブラリLich | ログミーBusiness

今回の進捗

※関連SNS
PR