Cnass's picture
Upload 7 files
d02ad4f verified
|
Raw History Blame Contribute Delete
4.23 kB
# Riaslink Port — Android Template
RPG Maker MV/MZ web dışa aktarımlarını (`www/` klasörü) saran, minimal bir
Android WebView port'u. [Ludens](https://github.com/yoimerdr/ludens)
projesinden yalnızca "port yeteneği" fikri esinlenmiştir; bu proje ayrı bir
kod tabanıdır, Ludens'in koduna bağımlılığı yoktur (Apache 2.0 lisanslı
Ludens'in kodu doğrudan kullanılmamıştır).
## Mimari
Bu proje kasıtlı olarak küçük tutulmuştur:
- **Kotlin Multiplatform yok** — sadece Android hedefleniyor.
- **Dependency injection framework yok** — tek Activity, manuel wiring.
- **Üçüncü parti WebView kütüphanesi yok** — `android.webkit.WebView`
doğrudan kullanılıyor.
```
app/src/main/java/fun/riaslink/port/
├── RiaslinkApplication.kt Application sınıfı (boş, kasıtlı)
├── GameActivity.kt Tek Activity: immersive mod, back-press yönetimi
└── core/
├── GameWebView.kt WebView kurulumu + WebViewAssetLoader
└── RiaslinkJsBridge.kt JS→native köprü (sadece titreşim + çıkış)
```
`app/src/main/assets/www/` — buraya bir RPG Maker projesinin `www/` klasörü
kopyalanır. `js/plugins/RIA_FPSCounter.js` ve `js/plugins/RIA_TavernMenu.js`
oyunun kendi eklenti sistemine (`js/plugins.js` üzerinden) kaydolan, saf
JavaScript RPG Maker eklentileridir — native Kotlin koduyla hiçbir bağı
yoktur, herhangi bir RPG Maker projesine (Android portu olmadan, tarayıcıda
bile) tek başına kurulabilirler.
## Native ↔ Web sözleşmesi
Native taraf ile menü arasındaki tek bağlantı noktaları:
1. `window.RiaslinkNative.vibrate(ms)` / `.exitApp()` — menüden native'e.
2. `window.RIA_TavernMenu.handleBackPress()` — native'den menüye. Android
geri tuşuna basıldığında `GameWebView.handleBackPress()` bunu çağırır;
menü açıksa kapatır, değilse taverna temalı bir çıkış onayı gösterir.
Bunların dışında native taraf menünün iç mantığına hiç karışmaz.
## Yapılandırma (`riaslink.build.properties`)
`applicationId`, uygulama adı, versiyon gibi alanlar `build.gradle.kts`'e
sabit yazılı değildir; proje kökündeki `riaslink.build.properties`
dosyasından okunur. Bu dosya build'e özgüdür ve git'e eklenmez
(`.gitignore`'a bakın). Manuel/lokal build için `riaslink.build.properties.example`
dosyasını kopyalayıp doldurun:
```bash
cp riaslink.build.properties.example riaslink.build.properties
# değerleri düzenle
```
## Manuel build
```bash
./gradlew assembleDebug # imzasız, hemen kurulup test edilebilir
./gradlew assembleRelease # R8 küçültme uygulanır, imzasızdır
```
APK çıktısı: `app/build/outputs/apk/<debug|release>/`
`release` build'i imzasız olduğu için cihaza doğrudan kurulamaz — kendi
keystore'unla `apksigner` ile imzalaman gerekir.
## Kendi oyununu elle yerleştirme
Hugging Face Space pipeline'ını kullanmadan, `www/` klasörünü elle de
yerleştirebilirsin:
1. RPG Maker'da projeni web'e dışa aktar (Deploy Masterpiece).
2. Oluşan `www/` klasörünün içeriğini `app/src/main/assets/www/` üzerine
kopyala (mevcut placeholder içeriğin üzerine yaz).
3. `RIA_FPSCounter.js` ve `RIA_TavernMenu.js` dosyalarını
`app/src/main/assets/www/js/plugins/` altına kopyala (zaten template'te
mevcutlarsa atlayabilirsin).
4. Kendi `js/plugins.js` dosyana şu girişleri ekle (RPG Maker editörünün
Plugin Manager'ından da ekleyebilirsin):
```js
$plugins.push(
{ "name": "RIA_FPSCounter", "status": true, "description": "", "parameters": { "defaultVisible": "false" } },
{ "name": "RIA_TavernMenu", "status": true, "description": "", "parameters": { "accentEmberHex": "#e8a343" } }
);
```
## Menüyü genişletme
`RIA_TavernMenu.js`, gelecekteki eklentilerin kendi sekmelerini eklemesine
izin veren bir `registerSection()` API'si sağlar:
```js
window.RIA_TavernMenu.registerSection({
id: 'cheats',
label: 'Hileler',
render: function(container) {
// container'ı DOM elemanlarıyla doldur
}
});
```
Bu sayede örneğin ileride bir "cheat menu" eklentisi, `RIA_TavernMenu.js`
dosyasının kendisine hiç dokunmadan sidebar'a yeni bir sekme ekleyebilir.