ไธไธบๅชๅ่ฝฆๆบ่ฎพ่ฎก็้ซ็บงๅทฅๅ ท้๏ผๅ ผๅฎนๅ็Androidๅๅ ถไป่ฝฆๆบ็ณป็ปใ้่ฟๆ ้็ขๆๅกๅฎ็ฐ็ณป็ป็บงๅ่ฝๅขๅผบ๏ผๆ ้Rootใ
- ่ชๅฎไน็ฝๆ ผๅธๅฑ - ็ตๆดป็ๆๆฝๅผไปช่กจ็๏ผๆฏๆ่ช็ฑ่ฐๆดไฝ็ฝฎๅๅคงๅฐ
- ไธฐๅฏๅฐ็ปไปถๅบ - ไฟกๆฏๅก็ใๅพ่กจใ็ฝๆ ผๅพๆ ็ญๅค็ง็ฑปๅๅฐ็ปไปถ
- ๅฏ่งๅ็ผ่พ - ๅฎๆถ้ข่งใๆๆฝๆๅบใไธ้ฎๅฏผๅ ฅ้ป่ฎค้ ็ฝฎ
- ็ถๆๆไน ๅ - ๆๆๅธๅฑๅ้ ็ฝฎ่ชๅจไฟๅญ๏ผ้ๅฏๅๆขๅค
- JARๆไปถๅ ่ฝฝ - ๆฏๆๅจๆๅ ่ฝฝ็ฌฌไธๆนๅฐ็ปไปถๆไปถ๏ผๆ ้้ๆฐ็ผ่ฏไธปๅบ็จ
- ๅผๆพAPI - ๅฎๆด็Widget APIๅฎไน๏ผๆไพๆไปถๅผๅSDK
- ๆฐๆฎๆบ็ปๅฎ - ๆไปถๅฏ็ดๆฅ่ฎฟ้ฎ่ฝฆ่พVHALๅฑๆงๅ่ชๅฎไนๆฐๆฎๆบ
- ๅณๆๅณ็จ - ้่ฟMANIFEST.MF่ชๆ่ฟฐๆบๅถ๏ผๆไปถ่ชๅจๆณจๅๅๅ ่ฝฝ
- ๐ ๆไปถๅผๅๆๅ
- ๆบ่ฝ่็ๆงๅถ - ๅบไบๅๅฐๅบ็จ่ชๅจๅๆข่็๏ผๆฏๆ่ชๅฎไน่งๅ
- ๅผๆบ่ชๅฏๅจ - ๆ ้็ขๆๅกๅฎ็ฐ็ณป็ป็บง่ชๅฏๅจๅๅๅฐๅธธ้ฉป
- ๆ้ฎๆ ๅฐ - ๆนๅ็ๆ้ฎๅ ผๅฎนๅ็ฑป้ณไนAPP๏ผ็ฝๆไบใQQ้ณไน็ญ๏ผ
- ่ฏญ้ณๅพๆ ้่ - ่ชๅจ้่็ณป็ป่ฏญ้ณๅฉๆๅพๆ
- ้บฆๅ ้ฃๆงๅถ - ็ฌ็ซ้บฆๅ ้ฃๆๅก๏ผๆฏๆ็ฒพ็ปๅๆ้็ฎก็
- ๅ Rootๆไฝ - ๆๆๅ่ฝๅ้่ฟๆ ้็ขๆๅกๅฎ็ฐ๏ผๆ ้ๅทๆบ
- ๆฌๆตฎ็ชๆพ็คบ - ๅฏ็งปๅจใๅฏ็ผฉๆพใ้ๆๅบฆ่ช้ๅบ็่ฝฆๅตๆฌๆตฎ็ช
- VHALๅฑๆง็ๆง - ๅฎๆถ่ฏปๅ่ฝฆ่พ็กฌไปถๆฝ่ฑกๅฑๆฐๆฎ๏ผ็ตๆฑ ใ้ๅบฆใๆธฉๅบฆ็ญ๏ผ
- ่ชๅฎไนๆฐๆฎๆบ - ๆฏๆๅ ฌๅผ่ฎก็ฎ่ๆๅฑๆง๏ผๆฏๆ็ฎๆฏใ้ป่พใๆฏ่พ่ฟ็ฎ๏ผๅ ็ฝฎๆฐๅญฆๅฝๆฐๅ็ฑปๅ่ฝฌๆข๏ผ
- ๆฅๅฟๆฅ็ - ๅ ็ฝฎๆฅๅฟ็ณป็ป๏ผไพฟไบๆ ้่ฏๆญๅๆฐๆฎๅๆ
- ่ชๅฎไนๆ ็ญพ - ไธบๅ ณๆณจ็่ฝฆ่พๅฑๆงๆทปๅ ๆ ็ญพ๏ผๅฟซ้่ฟๆปคๆพ็คบ
- Android็ๆฌ: Android 11 (API 30) ๅไปฅไธ
- ่ฎพๅค็ฑปๅ: ๅชๅ่ฝฆๆบ๏ผไผๅ ๆฏๆ๏ผ/ ๅ็Android / ๅ ถไป่ฝฆๆบ็ณป็ป
- ๆ้่ฆๆฑ: ๆ ้็ขๆๅกใ่็ใๆฌๆตฎ็ชใ้็ฅ็ญ
- ไป Releases ไธ่ฝฝๆๆฐAPK
- ๅจ่ฝฆๆบๆAndroid่ฎพๅคไธๅฎ่ฃ APK
- ้ฆๆฌกๆๅผๅบ็จ๏ผๆ นๆฎๅผๅฏผๆไบๆ้ๆ้๏ผ
- ๆ ้็ขๆๅก๏ผๆ ธๅฟๅ่ฝ๏ผ
- ่็ๆ้๏ผ่ชๅจๅๆงๅถ๏ผ
- ๆฌๆตฎ็ชๆ้๏ผ่ฝฆๅตๆพ็คบ๏ผ
- ้็ฅๆ้๏ผ็ถๆๆ็คบ๏ผ
- ้ ็ฝฎ่็่งๅ - ่ฟๅ ฅ"่ฎพ็ฝฎ"้กต้ข๏ผ่ชๅฎไนๅบ็จๅ ๅไธ่็ๅผๅ ณ่งๅ
- ่ฎพ็ฝฎไปช่กจ็ - ๅจ"ไปช่กจ็"้กต้ขๆทปๅ ๅฐ็ปไปถ๏ผๆๆฝ่ฐๆดๅธๅฑ
- ๅฏ็จๆฌๆตฎ็ช - ๅผๅฏ่ฝฆๅตๆฌๆตฎ็ช๏ผๅฎๆถ็ๆง่ฝฆ่พๆฐๆฎ
- ๆฅ็ๆฅๅฟ - ๅจ"ๆฅๅฟ"้กต้ขๆฅ็็ณป็ปไบไปถๅ่ฝฆ่พๅฑๆงๅๅ
- ๅฎ่ฃ ๆไปถ๏ผๅฏ้๏ผ- ๅฏผๅ ฅ็ฌฌไธๆนๅฐ็ปไปถๆไปถ๏ผๆฉๅฑไปช่กจ็ๅ่ฝ
่ฏญ่จไธๆกๆถ:
Kotlin โข Jetpack Compose โข Kotlin Coroutines โข Kotlin Serialization
ๆถๆไธ่ฎพ่ฎก:
MVVM โข Repository Pattern โข Dependency Injection (AppServices)
ๆฐๆฎๅญๅจ:
Room Database โข DataStore โข SharedPreferences
็ณป็ป้ๆ:
Accessibility Service โข Car VHAL (Vehicle HAL) โข Bluetooth Manager โข Window Manager
ๆๅปบๅทฅๅ
ท:
Gradle 8.9 โข Android Gradle Plugin 8.7 โข Kotlin 2.1
| ๆจกๅ | ่ฏดๆ | ็ฑปๅ |
|---|---|---|
| app | ไธปๅบ็จๆจกๅ๏ผๅ ๅซUIใไธๅก้ป่พๅๆ ธๅฟๆๅก | Application |
| app-privilege | ็ณป็ป็นๆๅ่ฝๆจกๅ๏ผๅค็Root็บงๅซๆไฝ๏ผๅฏ้๏ผ | Android Library |
| stub | Android็ณป็ปๆฅๅฃๅญๆ น๏ผๆไพ้่API่ฎฟ้ฎ | Android Library |
| vendor-stub | ๅๅๅฎๅถๆฅๅฃๅญๆ น๏ผ้้ ๅชๅ่ฝฆๆบ็นๆๅ่ฝ | Android Library |
| mic-service | ็ฌ็ซ้บฆๅ ้ฃๆงๅถๆๅก๏ผๆฏๆ็ป็ฒๅบฆๆ้็ฎก็ | Android Library |
| widget-api | ๅฐ็ปไปถๆไปถAPIๅฎไน๏ผ็ฌฌไธๆนๆไปถๅผๅๆฅๅฃ | Android Library |
| plugin-widgets | ๅจๆๅ ่ฝฝๅฐ็ปไปถๆไปถ็คบไพ๏ผJARๆไปถ๏ผ | Android Library |
| probe-api | ้็จๆข้ contract๏ผ็ฌฌไธๆน probe ๅผๅๆฅๅฃ | Android Library |
| probe-runtime | ้็จๆข้ๅฎฟไธป่ฟ่กๆถไธ OEM ๅ่ probe | Android Library |
ๆฌ้กน็ฎ้็จ MVVMๆถๆ ๅ ๆจกๅๅ่ฎพ่ฎก๏ผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ UI Layer (Compose) โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโ โ
โ โ HomePage โ โ Settings โ โWidgets โ โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโ
โ ViewModel Layer โ
โ โโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โ
โ โ HomeViewModel โ โWidgetViewModel โ โ
โ โโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโ
โ Business Logic (AppServices) โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโ โ
โ โBluetooth โ โ VHAL โ โWidget โ โ
โ โ Manager โ โ Service โ โLoader โ โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโ
โ Data Layer (Repository) โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโ โ
โ โ Room โ โDataStore โ โ VHAL โ โ
โ โ Database โ โ Prefs โ โ API โ โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ๆ ธๅฟ่ฎพ่ฎกๅๅ:
- ViewModelๅฝๅ่ง่๏ผPage็บง็จ
XXXViewModel๏ผTab็บง็จXXXTabViewModel - ไฝฟ็จ
AppServices่ฟ่ก่ฝป้็บงไพ่ต็ฎก็๏ผ้ฟๅ ่ฟๅบฆๆฝ่ฑก - UIไธViewModelไธๅฏนไธๆ ๅฐ๏ผไฟๆๆธ ๆฐ็่ดฃไปป่พน็
- ๆๆUI้ด่ทไฝฟ็จ
AppSpacing็ปไธ็ฎก็๏ผ็ฌฆๅMaterial Design 3่ง่
่ฏฆ็ปๆถๆๆๆกฃ่ฏทๅ่๏ผ๐ ARCHITECTURE.md๏ผๅพ ๅๅปบ๏ผ
-
Q: ไธบไปไน้่ฆๆ ้็ขๆๅกๆ้๏ผ A: ๆ ้็ขๆๅกๆฏๅฎ็ฐ่็่ชๅจๅใๆ้ฎๆ ๅฐ็ญ็ณป็ป็บงๅ่ฝ็ๆ ธๅฟ๏ผๅบ็จไธไผ่ทๅๆๆไฟกๆฏใ
-
Q: ๅบ็จไผๅฝฑๅ่ฝฆๆบๆง่ฝๅ๏ผ A: ๅบ็จ้็จ้ซๆ็ๅๅฐๆๅก่ฎพ่ฎก๏ผไป ๅจๅฟ ่ฆๆถๅทฅไฝ๏ผๅฏน่ฝฆๆบๆง่ฝๅฝฑๅๆๅฐใ
-
Q: ๆฏๆๅชไบ่ฝฆๅ๏ผ A: ไผๅ ๆฏๆๅชๅ็ณปๅ่ฝฆๅ๏ผๅ ผๅฎนๅ็Android 11+่ฎพๅค๏ผๅ ถไป่ฝฆๆบ้ๆต่ฏ้ช่ฏใ
-
Q: ๅฆไฝๅคไปฝๆ็้ ็ฝฎ๏ผ A: ๅจ"่ฎพ็ฝฎ > ้ซ็บง่ฎพ็ฝฎ"ไธญๅฏๅฏผๅบ้ ็ฝฎ๏ผ้่ฃ ๅๅฏๆขๅคใ
- ไปช่กจ็ๅฐ็ปไปถ้ฟๆๅฏ่ฟๅ ฅ็ผ่พๆจกๅผ
- ๆฌๆตฎ็ชๅๆ็ผฉๆพ่ฐๆดๅคงๅฐ๏ผๅๆๆๅจ่ฐๆดไฝ็ฝฎ
- ่ชๅฎไนๆฐๆฎๆบๆฏๆไธฐๅฏ็ๅ ฌๅผ่ฎก็ฎ๏ผ็ฎๆฏ่ฟ็ฎใ้ป่พๅคๆญใๆกไปถๅๆฏใๆฐๅญฆๅฝๆฐ(abs/max/min/sqrt/round็ญ) ใ็ฑปๅ่ฝฌๆข(int/float/str/bool)
- ไธป้ข็ฎก็ๅ่ฝๅฏๅจ"่ฎพ็ฝฎ > ้ซ็บง่ฎพ็ฝฎ"ไธญๆพๅฐ
# ๅ
้ไปๅบ
git clone --recurse-submodules https://github.com/netcookies/isulewTools.git
cd isulewTools
# ๆๅปบ้กน็ฎ
./gradlew assembleDebug
# ๅฎ่ฃ
ๅฐ่ฎพๅค
./gradlew installDebugๆฌๅฐๆจกๆ OEM WebSocket ๅๆพไธ adb forward tcp:17880 tcp:17880 ่่ฐ่ฏดๆ่ง๏ผ
ๅฝๅๆฌๅฐๅคงๆจกๅ่ฟ่กๆถไฝไบ ai-llm ๆจกๅ๏ผ้่ฟไธๆธธ llama.cpp submodule ๅๆฌๅฐ JNI ๆกฅๆฅๅฑๅๆฌๅฐๆจ็๏ผๆง็ whisper.cpp ้พ่ทฏๅทฒ็ป็งป้ค๏ผไธๅๅไธๅฝๅ Android ๆๅปบใ
ๅฝๅ็บฆๅฎ๏ผ
ai-llm/llama.cpp/ๆฏไธๆธธllama.cppsubmodule๏ผไฝไธบai-llmๆจกๅๅ ็ native ๆๅปบๆบ็ ๆ นใai-llm/src/main/cpp/llama_jni.cppไธai-llm/src/main/kotlin/com/neta/isulewtools/ai/llm/runtime/LlamaJni.ktๆฏ้กน็ฎๅ ็ปดๆค็ JNI ๆกฅๆฅๅฑใ- ๆฌๅฐๅคงๆจกๅไฝฟ็จ GGUF ็ฎๅฝๅ
๏ผ็ฎๅฝไธญ่ณๅฐ้่ฆ 1 ไธช
.ggufๆไปถใ - ๅ
ฌๅ
ฑๅคงๆจกๅ็ฎๅฝไปฅ
models/index.jsonไธบๅใ
ๆๅปบๅปบ่ฎฎ๏ผ
- ้ฆๆฌกๅ
้ๅๆง่ก
git submodule update --init --recursive๏ผ็กฎไฟai-llm/llama.cppๅทฒๅฐฑ็ปชใ - ๅธธ่งๅผๅ็ดๆฅๆง่ก
./gradlew assembleDebugๅณๅฏ๏ผๅฝๅllama.cppnative ๆๅปบๅ ฅๅฃไฝไบai-llmๆจกๅใ
ๆไบค็บฆๅฎ๏ผ
- ๅปบ่ฎฎๆไบค
ai-llm/llama.cpp็ submodule ๆ้ใai-llm/src/main/cpp/llama_jni.cppใai-llm/src/main/kotlin/com/neta/isulewtools/ai/llm/runtime/LlamaJni.ktไปฅๅๅฟ ่ฆ็ๆๅปบ้้ ไปฃ็ ใ - ไธ่ฆๆไบคๆฌๅฐ็ผๅญใๅทฅๅ ท้พๆไธดๆถไบง็ฉ็ฎๅฝใ
ๅผๅ็ฏๅข่ฆๆฑ:
- Android Studio Ladybug (2024.2.1) ๆๆด้ซ็ๆฌ
- JDK 11 ๆๆด้ซ็ๆฌ
- Android SDK 36 (compileSdk 36, targetSdk 36)
- Gradle 8.9+
ๆฌ้กน็ฎๆฏๆๅจๆๅ ่ฝฝJARๆไปถๆฉๅฑๅฐ็ปไปถๅ่ฝ๏ผๅผๅ่ ๅฏไปฅ๏ผ
- ไฝฟ็จ
widget-apiๆจกๅๆไพ็ๆฅๅฃๅฎไนๆไปถ - ๅฎ็ฐ
AppWidgetๆฅๅฃ๏ผ็ผๅ่ชๅฎไนCompose UI - ้
็ฝฎ
MANIFEST.MF่ชๆ่ฟฐๅ ๆฐๆฎ - ็ผ่ฏไธบJARๆไปถๅนถๅฏผๅ ฅๅฐๅบ็จ
ๅฟซ้ๅ ฅ้จ:
class MyCustomWidget : AppWidget {
override val widgetId: String = "my.custom.widget"
override val displayName: String = "ๆ็่ชๅฎไนๅฐ็ปไปถ"
@Composable
override fun WidgetContent(
modifier: Modifier,
scale: Float,
alpha: Float,
params: Map<String, Any?>
) {
// ไฝฟ็จCompose็ผๅUI
Text("Hello Widget!")
}
}่ฏฆ็ปๆไปถๅผๅๆๅ๏ผ
- ๐ ๆไปถ็ณป็ปๆฆ่ฟฐ
- ๐ ๆไปถๅผๅ่ฏฆ็ปๆๅ
ๆฌ้กน็ฎๆฏๆ้่ฟๅฎฟไธป runtime ๅจๆๆง่ก่ชๅฎไน probeใๆจ่ๅๅฑๅฆไธ๏ผ
probe-apiๅชๅ ๅซProbeEntry/ProbeContext/ProbeResult/ProbeErrorCodeprobe-runtimeๅ ๅซProbeHostMain/ProbeHostExecutorๅ OEM ๅ่ probe- ่ชๅฎไน probe ๆจกๅ
ๅชไพ่ต
probe-api๏ผ็ผ่ฏๆ APK ๆ JAR ๅไบค็ปๅฎฟไธปๆง่ก
็ธๅ ณๆๆกฃ๏ผ
- ๐ probe-api/README.md
- ๐ probe-runtime/README.md
- ๐ scripts/oem/README.md
ๆฌข่ฟไปปไฝๅฝขๅผ็่ดก็ฎ๏ผForkๆฌไปๅบๅนถๆไบคPull Requestใ
Git Commit่ง่ (้ตๅพช Conventional Commits):
feat:- ๆฐๅ่ฝ (ๅฏนๅบ่ฏญไนๅ็ๆฌ็ MINOR)fix:- Bugไฟฎๅค (ๅฏนๅบ่ฏญไนๅ็ๆฌ็ PATCH)refactor:- ไปฃ็ ้ๆ๏ผไธๆนๅๅ่ฝ้ป่พ๏ผperf:- ๆง่ฝไผๅstyle:- ไปฃ็ ๆ ผๅผ่ฐๆด๏ผ็ผฉ่ฟใ็ฉบๆ ผ็ญ๏ผdocs:- ๆๆกฃๆดๆฐtest:- ๆต่ฏ็จไพไฟฎๆนbuild:- ๆๅปบ็ณป็ปๆไพ่ต้กนไฟฎๆนci:- CI/CD้ ็ฝฎไฟฎๆนchore:- ๅ ถไป้ไธๅกไปฃ็ ไฟฎๆนBREAKING CHANGE:- ็ ดๅๆงๅๆด (ๅฏนๅบ่ฏญไนๅ็ๆฌ็ MAJOR)
็คบไพ:
git commit -m "feat: ๆทปๅ ไธป้ข็ฎก็ๅ่ฝ"
git commit -m "fix: ไฟฎๅคไปช่กจ็็ผฉๆพๅๅฝข้ฎ้ข"
git commit -m "refactor(viewmodel): ็ปไธViewModelๅฝๅ่ง่"ๆไบคๅ๏ผ่ชๅจๅๅทฅๅ ทไผๆ นๆฎcommit็ๆๅๆดๆฅๅฟๅReleaseๅ ๅฎนใ
| ๆๆกฃ | ่ฏดๆ |
|---|---|
| CHANGELOG.md | ็ๆฌๆดๆฐๆฅๅฟ |
| BREAKING_NOTICE.md | ็ๆฌ Breaking Change ๅ ฌๅ่ฝๅ่ฏดๆ |
| plugin-widgets/README.md | ๅฐ็ปไปถๆไปถ็ณป็ป่ฏดๆ |
| plugin-widgets/DEVELOPMENT_GUIDE.md | ๆไปถๅผๅ่ฏฆ็ปๆๅ |
| probe-api/README.md | ้็จๆข้ API ไธ็ฌ็ซๅทฅไฝๅบ่ฏดๆ |
| probe-runtime/README.md | ้็จๆข้ runtime ไธ OEM ๅ่ๅฎ็ฐ่ฏดๆ |
| scripts/oem/README.md | probe CLI ไธ่ฎพๅคๆง่ก่ฏดๆ |
ๆดๅคๆๆกฃๆญฃๅจๅฎๅไธญ...
ๆฌ็ๆฌ่ฟ่กไบๅคง่งๆจกๆถๆ้ๆ๏ผไธป่ฆๆดๆฐๅ ๆฌ๏ผ
- ไปช่กจ็็ณป็ปๅฎๅ จ้ๅ - ็ฝๆ ผๅธๅฑใๆๆฝๆๅบใ็ถๆๆไน ๅๅ จ้ขไผๅ
- ๅฐ็ปไปถ็ๆๅขๅผบ - ๆฐๅขไฟกๆฏๅก็ใ็ฝๆ ผๅพๆ ใๅพ่กจ็ฑปๅฐ็ปไปถ
- UI/UX็ปไธๅ - ๆๆไธ็บง้กต้ข้ๆ๏ผ็ปไธ้ด่ท็ณป็ป๏ผAppSpacing๏ผ
- ViewModel่ง่ๅ - ๆ็กฎๅฝๅ่ง่๏ผๆธ ๆฐUIไธViewModelๅฏนๅบๅ ณ็ณป
- ่ชๅฎไนๆฐๆฎๆบๆฏๆๅ ฌๅผ่ฎก็ฎ๏ผ่ๆๅฑๆง๏ผ
- ไธป้ข็ฎก็ๅ่ฝ๏ผ่ฎพ็ฝฎ > ้ซ็บง่ฎพ็ฝฎ๏ผ
- ไปช่กจ็้ป่ฎคๅฏผๅ ฅๅ่ฝ๏ผ็ฉบไปช่กจ็ๆถ๏ผ
- ๅฐ็ปไปถๅคไปฝไธๆขๅค็ฎก็
- ไผๅๅฐ็ปไปถ่พน่ทๅๅธๅฑ็ฎๆณ
- ๅๅฐไธๅฟ ่ฆ็้็ป๏ผๆๅComposeๆง่ฝ
- ไผๅ่ฝฆ่พๅฑๆง่ฏปๅๆ็
่ฏฆ็ปๆดๆฐๅ ๅฎน่ฏทๆฅ็ Releases
ๆฌ้กน็ฎ้็จ MIT License ๅผๆบๅ่ฎฎใ
ๆ่ฐขๆๆไธบๆฌ้กน็ฎๅๅบ่ดก็ฎ็ๅผๅ่ ๅ็จๆท๏ผ
Made with โค๏ธ for ๅชๅ่ฝฆไธป็คพๅบ