Open12

DoremiPianoのAndroid版作成

keikuchenkeikuchen

Android Developerのアカウントを取得したままずっと放置していたら、おかみに「使ってないなら消すぞオラ」とおこられた

これを機に、Androidアプリをひとつくらい出してみなければ

5年前にiOSアプリの勉強がてら作成したDoremiPianoにAndroid版を追加することにしてみようか

keikuchenkeikuchen

とりあえずiOSの時に作ったもろもろのファイルをapp-iosディレクトリに押し込み、app-androidを作成

それっぽいアイコンもせっかくなので作成

keikuchenkeikuchen

UIを書き始めたら、早速ドメインモデルが欲しくなってきた sharedモジュールを作ろう

と思ったが、sharedモジュールをいいかんじに作るならagpを上げろと言われた

agpを8.8.0に上げると、gradle-wrapperを8.10.2に上げろと言われる
そして、androidx.core:core:1.13.1となんかぶつかる

keikuchenkeikuchen

多分composeBom2024.12.01に紐づいてるライブラリな気がする
解決が厳しいので、agpを上げるのは諦めて、手動でこねこねsharedモジュールを作ろう

keikuchenkeikuchen

jvmToolchainと同じバージョンでいいなら、compileOptionは書かなくていいらしい 学び

//    compileOptions {
//        sourceCompatibility = JavaVersion.VERSION_17
//        targetCompatibility = JavaVersion.VERSION_17
//    }

    composeOptions {
        kotlinCompilerExtensionVersion = libs.versions.composeCompiler.get()
    }
keikuchenkeikuchen

sharedにandroid固有のものが一切入らないなら、androidに関する記述は要らない?これだけで十分?

plugins {
    alias(libs.plugins.kotlin.multiplatform)
}

kotlin {
    sourceSets {
        commonTest {
            dependencies {
                implementation(libs.kotlin.test)
            }
        }
    }
}

と思ったが、そういうものではなさそう パッケージがそれとして認識されてない

keikuchenkeikuchen

ターゲット(android, iosなど)を最低一つ与えてあげる必要があるっぽい

plugins {
    alias(libs.plugins.android.library)
    alias(libs.plugins.kotlin.multiplatform)
}

kotlin {
    androidTarget()
    sourceSets {
        commonTest {
            dependencies {
                implementation(libs.kotlin.test)
            }
        }
    }
}

keikuchenkeikuchen

やはりKMPでDIをするならKoinか?

ミニマムにアプリを作ろうとは思いつつも、さすがにDIは入れたいよな

keikuchenkeikuchen

KMPでいいかんじにリソースファイルを共有する方法がわからん

commonMain/resourcesでいいのかと思ったが、それではandroidMainからは検知できないらしい

keikuchenkeikuchen

commonMain/resourcesへのシンボリックリンクをandroidMain/resに置いてしまうというテクニックで行っちゃおうかな

keikuchenkeikuchen

俺たちの冒険はこれからだ!状態のAndroidアプリにiOSのスクショを貼って申請したら、誤解を招くからだめだよでリジェクトされた デスヨネ

keikuchenkeikuchen

でも一度申請を出したことによりアカウント終末時計の時間がぐぐっと戻ったのでヨシ!