Skip to content

Prepare 1.3.0 release: split remaining modules into submodules - #99

Merged
wf9a5m75 merged 76 commits into
mainfrom
1.3.0
Aug 16, 2026
Merged

Prepare 1.3.0 release: split remaining modules into submodules#99
wf9a5m75 merged 76 commits into
mainfrom
1.3.0

Conversation

@wf9a5m75

Copy link
Copy Markdown
Contributor

Every module now lives in its own repository and is registered in .gitmodules.

  • Split android-kml, android-for-openmobilemaps, android-for-template and mapconductor-bom out of this repository into their own module repositories
  • Register android-for-mappls and the android-icons-{jp,us,weather} packs, which already had repositories but were not tracked here
  • Bump every submodule to its 1.3.0 release commit
  • Point README docs links at the consolidated mapconductor.com site
  • Fill in the LICENSE copyright line (2026)
  • Add CLAUDE.md

.gitmodules goes from 14 to 22 entries.

ドライバー層の共通化にあたり、アプリ開発者向けの公開 API を変えていないことを
機械的に保証するゲートを入れる。これまで 3 プラットフォームとも API サーフェスの
比較手段が無かった。
binary-compatibility-validator は com.android.library モジュールに対応しておらず、
適用しても apiDump タスクが生成されない。そこで release AAR の classes.jar を
javap -protected で読み、正規化したテキストを <module>/api/<module>.api に
記録する方式にした。差分が git 上で人間に読める形で出るのが利点。
除外するのは Kotlin コンパイラの生成物のみ(無名クラス / ラムダ / $WhenMappings /
ComposableSingletons / Compose の $stable / internal のマングル名 /
デフォルト引数ブリッジ)。$DefaultImpls は Java から見える ABI なので残す。
あわせて CI(lint.yml)に変更モジュールごとのユニットテストと apiCheck を追加した。
これまで CI はテストを 1 本も回していなかった。
ゲートが実際に発火することは、OverlayControllerInterface にデフォルト実装付きの
メソッドを 1 つ足して apiCheck が失敗することで確認済み。
Step 1: capability 宣言と診断の一般化、および最初の適用先として
android-for-longdo の同期投影非対応を宣言。
ネイティブのマーカークリック判定をコアへ集約(dispatchNativeMarkerClick)。
googlemaps と tomtom が二重に持っていた実装を 1 箇所にした。
TomTom のオーバーレイクリックをコアのヒットテスト経由に統一。
clickable を全オーバーレイへ追加し「透過」の意味論をコアへ統一。
ClickPassthrough capability と @InternalMapConductorApi を追加。
API サーフェスのスナップショットは注釈付きの型を除外するようにした。
ズーム換算の式をコアへ集約。googlemaps / longdo / maplibre / mapbox / maptiler /
tomtom の 6 プロバイダを WebMercatorZoomAltitudeConverter へ移行した。
HERE と ArcGIS は式が本質的に違うので自前実装のまま。
移行前の値をゴールデン表(1,920 点)として採取し、ビット単位一致を検証している。
コアに clickableOnly() を追加し、7 プロバイダのクリックカスケードをそこへ寄せる。
clickable=false のマーカーが握り潰しになっていたのを透過へ直した
(circle / polygon / polyline / groundImage と同じ意味論)。
実機(Lenovo TB520FU / MapLibre)で、マーカーに当たっていても clickable=false なら
地図クリックが発火することを確認済み。
Step 3: MapLibreViewState を MapViewState 基底へ移行(8 プロバイダ中 1 つ目)。
maplibre / mapbox / tomtom / here / googlemaps / arcgis の *ViewState から
カメラの共通部分を基底へ委ねた。maptiler / longdo は意味論が違うため移行していない
(カメラが Compose state で、moveCameraTo が常に楽観更新する)。
Step 3 のプロバイダ移行が 8 プロバイダすべて完了。
MapTiler / Longdo も基底へ移行。カメラを Compose state で持つようにし、
この 2 つだけ楽観更新を有効にした。これで 8 プロバイダすべてが基底を使う。
Capable ファサードの純デリゲート約 320 行を基底の既定実装に置き換えた。
Step 4 の OverlayKind 振り分けでマーカーコントローラの kind 宣言を忘れ、
全プロバイダでマーカーが表示されなくなっていた。kind を抽象にして
宣言忘れをコンパイルエラーにする。実機で全 6 種別を確認済み。
marker -> circle -> groundImage -> polyline -> polygon -> map のカスケードを
BaseMapViewController.dispatchTap へ集約。8 プロバイダから同じ 40〜50 行が消える。
副産物として Step 4 の実装漏れを 2 件直した。android-for-maplibre /
android-for-mapbox のポリゴンコンダクタが SlottedOverlayController を実装して
おらず、hasPolygon が常に false(=ポリゴン単体の状態更新が黙って捨てられていた)。
再発しないよう resolveTap を抽象メンバーにして、実装忘れをコンパイルエラーにした。
android-for-maptiler / android-for-longdo はタップの意味論が他と違っていた
(地図クリックを先に無条件で通知したうえで全オーバーレイへ配送=二重配送)。
先勝ちに揃えた。
全 15 モジュールで assembleDebug / testDebugUnitTest / apiCheck / ktlintCheck 緑。
実機(Lenovo TB520FU)で 9 プロバイダの polygon-click / circle / polyline-click /
marker-postoffice、および maplibre のマーカードラッグを確認。
find() の 6 重複をコアへ。サブクラスから override が消えるので API
スナップショットには削除として出るが、基底クラスへ移っただけでバイナリ互換
(仮想ディスパッチは基底で解決される)。
実機(Lenovo TB520FU)で maplibre / googlemap / tomtom / arcgis2d の
marker-postoffice を確認。
…ers)
android-for-mapbox / here / googlemaps / tomtom を DefaultMarkerEventController へ。
maplibre は前のコミットで移行済み。
android-for-arcgis は**据え置き**。ドラッグの面が SDK 固有
(startDrag / updateDrag / endDrag が ArcGIS の Point を取り、graphics overlay を
直接触る)で、選択 + 位置更新という共通の形に収まらない。無理に寄せると
ArcGIS のドラッグが壊れるだけなので、コアのクラスを継承して差分だけ足す形にする
のが筋。todo/20260809.txt に残した。
削除は全て Kotlin internal のクラス・メンバー(JVM では public に見えるが
アプリからは参照できない)。
実機(Lenovo TB520FU): marker-postoffice を mapbox / heremap / googlemap /
tomtom で、polygon-hole のドラッグを mapbox / heremap で確認。
Step 8 の雛形モジュール。**動く**ドライバーである(動かない雛形はすぐ腐るし、
適合テストも書けない)。本物の地図SDKを持ち込むと API キーや依存で話が濁るので、
Web メルカトルの投影と表示リストだけを持つ最小の地図 TemplateMap を代役にした。
本物のドライバーを書くときに置き換えるのはそこだけで、まわりのホルダー・
コントローラ・レンダラの形はそのまま使える。
投影も表示リストも純粋な Kotlin なので、ドライバー全体が素の JVM テストで動く。
これは意図的で、MapDriverConformance を CI のユニットテストで回すため。
## 中身
TemplateMap.kt スタブSDK(カメラ・投影・表示リスト)+ ホルダー
TemplateOverlays.kt 6 種のレンダラとコントローラ(ここが本体)
TemplateMapViewController.kt カメラ・イベント転送・capability 宣言
TemplateMapView.kt State + Composable
TemplateDriverConformanceTest.kt 適合テスト 10 本
README.md ドライバーの書き方(authoring guide)
projects.properties の modules= に入れたので CI のビルド・lint・テストに乗る。
**雛形が腐らない仕組みはこれしかない。**
## README に書いたこと
- 書くもの 45 点の内訳と、書かなくてよいもの(コアが持っているもの)の一覧
- つまずくところ 6 件。すべてこの数日で実際に作り込んだ不具合が元
(登録漏れ / SlottedOverlayController 実装忘れ / find で clickable を見る /
Unknown を非対応と読む / 二重配送 / ネイティブのマーカークリックを外せない SDK)
- 実機で確かめること。マーカードラッグの偽陽性の罠、タイル読み込みの待ち時間
- 触ってはいけないもの(共変 getMapViewHolder、カメラの getter、公開 API)
## 注記
android-for-template は git submodule ではなく親リポジトリ直下のディレクトリ。
配布物ではなく「コピーの出発点」なので、独立リポジトリにする必要がない。
実機(Lenovo TB520FU)で marker-basic / polyline-click を確認(コアの
遅延アイコン化と ResourceProvider のフォールバックが実機の描画に影響しないこと)。
…ker event controller)
これで Step 7b は 6/6。プロバイダが持っていたマーカーイベントの薄いラッパーは
合計 880 行(674 + 206)消えた。
Open Mobile Maps SDK 4.0.0 が要求する:
- Kotlin 2.4 のメタデータ(2.2 のコンパイラは 2.3 までしか読めない)
- compileSdk 36 以上
3.3.0 まで落とせば現状のままでも通るが、最新が出ているのに古い版に
合わせるのは筋が悪いのでこちらを上げる。
影響範囲の確認(すべて緑):
- assembleDebug … 全モジュール(既存 8 プロバイダ + コア)
- testDebugUnitTest … 全モジュール
- apiCheck … **既存モジュールの公開 API に差分なし**
- ktlintCheck … 全モジュール
targetSdk は 35 のまま(compileSdk だけ上げる。実行時の挙動を変えないため)。
Open Mobile Maps SDK 4.0.0 用ドライバーの作りかけ。**まだコンパイルが通らない**ので
projects.properties の modules= からは外してある(全体ビルドは緑のまま)。
詳細と残作業は android-for-openmobilemaps/WIP.md を参照。
済み:
- mapscore を version catalog へ追加
- ホルダー(実装点 A)。SDK は同期投影を両方向持っているのでそのまま実装できた
- Compose の入口。EPSG:4326 で setupMap し registerLifecycle する
(registerLifecycle を忘れると描画ループが回らず地図が真っ黒になる)
残り: コントローラ / 6 レンダラ / example-app 組み込み / 実機検証
Open Mobile Maps SDK (io.openmobilemaps:mapscore 4.0.0) 用のドライバー。
android-for-template と同じ構造で、実装点は holder / controller / 6 レンダラ。
## この SDK 固有で、他プロバイダと違うところ
- **ズームが縮尺の分母**(2 の指数ではない)。WebMercatorZoomAltitudeConverter の
オフセット方式では変換できないので、対数を挟む専用の変換を持つ。
統一ズーム 0 の縮尺 986,097,222 は実測ではなく導出値
(156543.033928 x 160 / 0.0254)。実機で MapLibre と重ねて一致を確認済み。
- **タイルのズームレベルも自前で刻む**。SDK 同梱の webMercator 設定は
レベル 0 が 1:500,000,000 で統一ズームと約 2 倍ずれるため、そのまま使うと
常に 1 段ぼけたタイルが選ばれる。
- **2D カメラに tilt が無い**。ArcGIS 2D と同じ方式・同じ定数で擬似表現する
(ビューを rotationX で傾け、tilt < 0 は中心を前進させる)。
- **穴はネイティブに渡せる**(PolygonCoord.holes)。ブリッジ細工は不要。
ただし重なった穴は unionHoles() で先に結合する。
- **BitmapTextureHolder は渡した Bitmap を recycle する**。MapConductor の
BitmapIconCache は同じ Bitmap を配るので、素直に渡すと 2 個目のマーカーで
「Canvas: trying to use a recycled bitmap」で落ちる。複製を渡し、
テクスチャはアイコンごとにキャッシュする。
## 実機で確認済み(Lenovo TB520FU)
- StoreMap: マーカーが MapLibre と同じ位置・同じ大きさで出る
- アイコンのタップで InfoBubble が出る(アイコンサイズを考慮した位置)
- 地図のドラッグに InfoBubble が追従する
- マーカーの長押しでドラッグが始まり、指の下に追従する(指を下ろしたまま撮影)
地図はドラッグ中パンしない
- InfoBubble はマーカーのドラッグにも追従する
## まだ確認していない
CameraSync / MarkerTileRendering / クラスタリング / ラスターレイヤ /
MapDesign 切り替え / geodesic ポリライン / 穴開きポリゴン / Tilt。
iOS 版も未着手。
`MapScene` はレイヤを「索引 → レイヤ」の map で持っていて、`insertLayerAt` は
**挿入ではなく上書き**である(`MapScene.cpp`: その索引に居たレイヤを
`onRemoved()` してから置き換える)。地図デザインを索引 0 に入れていたため、
索引 0 に居たポリゴン塗りレイヤが黙って外れていた。
症状は「円は塗れるのにポリゴンだけ塗れない」。例外もログも出ないので、
レイヤ API ではなく座標や巻き方向を疑って遠回りした。
あわせて、同じ性質から来る 2 つ目の罠も直した:
`asLayerInterface()` は呼ぶたびに別のオブジェクトを返すので、
`insertLayerBelow(x, polygonFillLayer.asLayerInterface())` は
「そんなレイヤは無い」で GL スレッドから落ちる。載せたときの値を
`OpenMobileMapsActual*` に持たせて、外すときはそれを渡す。
索引は 0 = 地図デザイン / 1.. = ラスター・グラウンドイメージ(解放時に
使い回す)/ 1000.. = 固定オーバーレイ 6 種、と分けて衝突させない。
実機で確認(Lenovo TB520FU):
- Polygon ページの塗りが出る
- Hole Polygon ページで穴が抜ける
- **重なった 2 つの穴が結合されて 1 つの穴になる**(MapLibre と同じ見え方)
- Circle ページの塗り・輪郭・geodesic ポリラインの曲線
- Raster Layer ページ(NASA GIBS)が地図の上に出る
吹き出しの見出しを「路線名(railway name)」のように併記していたが、日本語と英語が
1 行に混ざるうえ、値の方は「総武線」のままで英語にならなかった。
アプリの言語(web は言語セレクタ、それ以外は端末の言語)が日本語なら日本語、
それ以外なら英語で出すように変えた。
## 対訳をアプリではなくデータへ
`N02-22_GML.zip` の各フィーチャーに `N02_003_en`(路線名)と `N02_004_en`
(運営会社)を足した。549 路線・177 事業者ぶん。
アプリ側に対訳表を置くと、**同じ表を 4 つのサンプルへ配ることになり、
しかも必ずどれかが古くなる**。データが持っていれば、アプリがするのは
「日本語なら `N02_003`、英語なら `N02_003_en`」だけで済む。
英語名は、事業者が公式の英語名を出しているものはそれを使い(JR East /
Tokyo Metro / Kintetsu Railway)、それ以外はヘボン式で長音記号なし
(Sobu Line / Tokaido Shinkansen)。JR や私鉄の英語案内がその表記のため。
経緯は zip 内の README.md に書いた。
`N02_001`(鉄道区分)と `N02_002`(事業者区分)は元データがコード値なので、
見出しだけ訳して値はそのまま。
## 表示
- 見出し: 鉄道区分 / 事業者区分 / 路線名 / 運営会社 ⇔
Railway category / Business category / Railway name / Railway company
- ヘッダ行: プロパティ・値 ⇔ Property・Value
- `_en` で終わる属性は行として出さない(同じ項目が 2 行に増えるため)
- 表に無いキーは今まで通り生のキー名。データ側に属性が増えても消えない
zip は元より小さくなっている(2,428KB → 2,383KB)。属性が 2 つ増えたが、
geojson を字下げなしで書き出したぶんが上回った。
## 確認
日本語・英語の両方で、4 プラットフォームとも切り替わることを目視。
- android: 実機。端末が ja-JP なので `cmd locale set-app-locales` で英語も確認
(総武線/東日本旅客鉄道 ⇔ Sobu Line/JR East)
- iOS: シミュレータを `-AppleLanguages` で切り替え
(11号線半蔵門線/東京地下鉄 ⇔ Line 11 Hanzomon Line/Tokyo Metro)
- react(web): `/maplibre/geojson-layer` と `/ja` を Playwright で
(12号線大江戸線/東京都 ⇔ Line 12 Oedo Line/Tokyo Metropolitan Government)
- react-native: 端末の言語は `NativeModules` から取る(`react-native-localize` を
足さずに済ませるため)。型検査のみ。実機では未確認
なお iOS の吹き出しに accessibility を付けるのは見送った。吹き出しは地図ビューの
中に足したビューで、地図ビュー自身が accessibility のコンテナとして振る舞い
並べる要素を自前で決めているため、中身が読み上げにも UI テストにも出てこない。
`accessibilityElements` へ足しても効かなかった(MapLibre は container のメソッドを
上書きしている)。器を地図ビューの外へ出せば直るが、9 プロバイダ共通の
コア変更になるので、この変更には含めない。
プロバイダを選び直しても、次のページへ移ると指定のプロバイダへ戻っていた。
## 原因
`--es provider <key>`(android)/ `MAPCONDUCTOR_SAMPLE_PROVIDER`(iOS)は
「**開始時**のプロバイダ」のつもりの指定だったが、各ページが表示のたびに
これを読み、しかも直近の選択より優先していた。つまり指定が起動時ではなく
**常時の上書き**になっていて、ユーザーの選択が毎回打ち消されていた。
指定つきで起動したプロセスでのみ起きる。ふつうに起動した場合は指定が無いので
引き継ぎは効く。「一部では機能するのに全部では機能しない」ように見えるのはこのため。
## 直し方
指定は起動時に一度だけ読み、`SelectedProviderStore` へ「覚えている選択」として
置く。以降はユーザーが選んだときと同じ扱いになり、選び直せば上書きされる。
ページ側は store だけを見る。
- android: `MainActivity.onCreate` で store へ入れる。`providerExtra` は廃止し、
`DemoMapPageScaffold` からも参照を外した
- iOS: `MapProvider.initial()` から環境変数の参照を外し、読み取りは
`fromLaunch()` として切り出してアプリ起動時に一度だけ呼ぶ。
Camera Sync の右ペインは自分用のキー(`..._RIGHT`)を直接読む形にしたので、
`useRemembered` 引数は不要になり削除した
- android の `SelectedProviderStore.indexIn` は大文字小文字を無視するようにした
(`--es provider MapLibre` のような指定も引き当てられるように)
## 確認
- android: 実機で「polyline-click を `--es provider maplibre` つきで起動 →
Open Mobile Maps を選択 → Geodesic Polygons へ移動」が
Open Mobile Maps のままになることを目視(直す前は MapLibre に戻っていた)
- iOS: `SelectedProviderCarryOverUITests` に
`testLaunchProviderDoesNotOutrankTheUsersChoice` を追加。直す前のコードに
戻すと `("Provider, MapKit") is not equal to ("Provider, MapLibre")` で落ちる
ことを確認済み
## 既存の UI テストが空回りしていた件
同ファイルの `testProviderSelectionCarriesOverToTheNextPage` は、サイドバーの
移動先を `staticTexts["Circle"]` で引いていた。サイドバーは節見出しもただの
文字なので**見出しの方**に当たり、叩いても移動しない。移動しないまま前のページの
ピッカーを見て通っていた。行だけが Button なので `buttons["Circle"]` に変え、
さらに移動先ページの見出しが出るまで待ってから、ピッカーのラベルを
存在確認ではなく**一致で**確かめるようにした。
`OpenMobileMapsDesign` の 3 つがどれも `attributionRules` を渡しておらず、空のままだった。
コアの出典表示は「宣言された規則が 1 つも無ければ何も描かない」ので、**OSM のタイルを
出典表示なしで表示していた**。タイルの利用条件を満たさない状態だったので直す。
- OpenStreetMap / OpenStreetMap Japan: `© OpenStreetMap contributors`
- OpenTopoMap: 地図データと地図スタイルの両方(先方が両方の表示を求めている)
## なぜこの SDK でだけ抜けたのか
他のプロバイダは**地図 SDK 自身が地図ビューの中へロゴを描く**(MapLibre の
「MapLibre ⓘ」など)ので、こちらが何も宣言しなくても表示される。Open Mobile Maps は
地図の中身をすべてアプリが載せる作りで、出典表示も自前では出さない。つまり
このドライバーだけが宣言を必要としていて、それに気づいていなかった。
同じことが起きないよう、両プラットフォームの定義にその理由をコメントで残した。
## 擬似 tilt の 200% 拡大とは無関係
「傾きのためにビューを 200% にしているせいで消えているのでは」という指摘から調べたが、
そちらは原因ではなかった。出典表示は地図ビューの**外側**(android は Compose、
iOS は SwiftUI の兄弟要素)に描かれるので、内側のビューを拡大・回転しても影響を受けない。
実機で確認: tilt 0 でも tilt 89(描画は 60 でクランプ)でも右下に表示される。
submodule 側のコミット:
android-sdk-compose 55b6749 / ios-sdk-core 8b3c61f / js-sdk-react bdabdd4
android 実機で変更前後を切り出して比較し、帯の下の隙間が無くなったことを目視。
ktlintCheck / apiCheck 緑。iOS はコアとサンプルアプリのビルド成功。
react は型検査に影響なし。
submodule 側: android-sdk-compose 上記コミット。
android だけ帯の幅が固定だったのを、iOS / react と同じ「文字の幅」に揃えた。
コアの RasterLayerController.add はレンダラが null を返すとエンティティを
登録せず、その後の visible 反転が update() で黙って落ちる。GeoJSON レイヤは
visible = false で生まれて読み込み後に反転するので、この形に嵌まる。
Compose の再コンポジションで add が呼び直されると自己修復して動いて見えるが、
反転が sync の後に来ると取りこぼす(iOS で顕在化し、両プラットフォームを揃えた)。
レイヤは常に作り、可視性は LayerInterface.hide()/show() で切る。
確認(Lenovo 実機): GeoJSON Layer が描画され線 6px(MapLibre と同じ)、
PostOffice のマーカータイルに回帰なし。
- settings.gradle.kts: maven.mappls.com リポジトリ追加
- root build.gradle.kts: mappls-services プラグイン classpath (認証コンフィグ取込)
- example-app: プラグインは *.a.conf があるときだけ適用 (CI ではコンフィグが
無いので Mappls だけ認証エラーになり他へ影響しない)。コンフィグ
(<appId>.a.conf/.a.olf) と生成物 src/debug/assets/mappls-conf.txt は gitignore
- DemoMapPageScaffold / MapViewContainer: provider key "mappls" 追加
android-for-mappls 本体は同ディレクトリの独立リポジトリ (submodule 登録は
リモート作成後に .gitmodules へ追加すること)
Default / StandardDay の 2 択 (Mappls のスタイルはアカウント紐付きのため
全アカウント共通のものだけ出す)。実機で切替確認済み
- camera-restriction: ios の CameraRestrictionPage と同一仕様 (許可矩形の
赤ポリゴン可視化 + restriction トグル + Move outside / Zoom>max / Zoom<min /
Reset + カメラ読み出し)。実機で Move outside → 35.75,139.85 (北東角) への
クランプを確認
- UI Settings: トグルパネルを ios / react と同じ左下配置に
…liders
styled-info-bubble を作り直し: マーカー 1 個 + 常時表示バブルに、
8 色スウォッチ 4 行(塗り / 枠線 / 文字 / マーカー)とスライダー 2 本
(枠線幅・マーカースケール 0.5〜2.0、0.25 刻み)。InfoBubble はスタイルを
登録時に焼き込むため key(...) で登録し直す。react / ios と同一仕様。
android-sdk-compose bump (InfoBubble borderWidth)。
compileSdk 37 project-wide (required to compile against ArcGIS 300.x);
minSdk 28 for example-app and android-for-arcgis only — other driver
modules keep minSdk 26.
Latest stable versions of the remaining Android map SDKs. maplibre
annotation / maptiler / longdo / play-services-maps are already at
their latest; Mappls 9.0.4.RC1 (pre-release) intentionally skipped.
Verified on device: MapLibre / Mapbox / TomTom render; Mapbox
CameraSync vs Google Maps matches exactly after drag.
- KMLParser: コンテナ走査を単一ループ+深さカウンタに、MultiGeometry を明示
スタックに書き換え(Cordova KML ローダと同じく再帰を使わない)。ZIP 署名で
KMZ を自動判別し最初の .kml エントリを読む。parseDocument で NetworkLink
(Link / 旧 Url)の href を収集
- KMLLoader 新設: URL 取得(リダイレクト手動追従)と NetworkLink のキュー+
訪問済みセットによる追跡。相対 href 解決・循環検出・maxDocuments 上限・
リンク失敗のスキップ通知。fetch 注入でテスト可能
- 単体テスト 14 本追加(20,000 段ネスト・KMZ・リンク追跡)と apiDump 更新
pixelTolerance 指定時にポリゴンが輪郭近傍のみの判定になり、内部タップで
InfoBubble が出なかった。内部(穴を除く)判定を常に先に行い、外れた場合
のみ従来どおり輪郭近傍にフォールバックする。穴の中と遠方は引き続き外れる。
Lenovo 実機で内部タップ→表示 / 穴タップ→解除を確認
React Native の reactnative-for-template から同じ地図を使えるようにする。
本物のドライバーが持っている createXxxViewController / XxxMapViewScope に対応。
- createTemplateViewController(map, serviceRegistry): コントローラ一式の組み立てを
@composable の外へ出した。TemplateMapView からもこれを呼ぶ(実装は 1 か所)。
- TemplateMapCanvas: 描画だけの Composable。TemplateMapView と RN のホストで共有。
- TemplateMapViewScope: 拡張モジュールが使う Compose スコープ(3 行)。
reactnative-for-template が com.mapconductor:for-template を参照するため。
signing / nmcp は付けないので Maven Central へは出ない。
- Split android-kml, android-for-openmobilemaps, android-for-template and
mapconductor-bom out of this repository into their own module repositories
and register them in .gitmodules
- Register android-for-mappls and the android-icons-{jp,us,weather} packs,
which had their own repositories but were not tracked here
- Bump every submodule to its 1.3.0 release commit
- Point README docs links at the consolidated mapconductor.com site
- Fill in the LICENSE copyright line (2026)
- Add CLAUDE.md
@wf9a5m75
wf9a5m75 merged commit 42bba2f into mainAug 16, 2026
@wf9a5m75
wf9a5m75 deleted the 1.3.0 branch August 16, 2026 11:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@wf9a5m75