ๆฌ้กน็ฎๆฏๅบไบ GPL-3.0 ่ฎธๅฏ่ฏ็ lyc486 ็ Legado ็่ก็ไฝๅใ
LightNovelReader (LNR) ๆไปถ๏ผๆฏๆ็ดๆฅๅฏผๅ ฅ lyc486 ็ Legado ็ JSON ไนฆๆบๆไปถ๏ผๆ ้ไปปไฝๆ ผๅผ่ฝฌๆขใ
ๅฏไธๆๅๆ ๅ๏ผlyc486 ็ Legado ไนฆๆบ็ๅ จ้จๅ่ฝๅจ LNR ไธญๅฎๆดๅฏ็จใ
| ๅ่ฝ | ็ถๆ | ่ฏดๆ |
|---|---|---|
| ๆ็ดข | โ | ่ทจๆๆๅทฒๅฏผๅ ฅไนฆๆบๆ็ดขๅฐ่ฏด |
| ๅ็ฐ้กต | โ | ๆต่ง้ ็ฝฎไบๅ็ฐ้กต็ไนฆๆบ๏ผๆฏๆๅ็ฑปๅๆข |
| ไนฆ็ฑ่ฏฆๆ | โ | ไนฆๅใไฝ่ ใๅฐ้ขใ็ฎไปใๆ ็ญพ |
| ็ซ ่็ฎๅฝ | โ | ่ทๅ็ซ ่ๅ่กจ |
| ๆญฃๆ่งฃๆ | โ | CSS / XPath / JSONPath / ๆญฃๅ / JS |
| loginUi ็ปๅฝ | โ | ๅฎๆดๆฏๆ Legado ๅคๅ่ฝ้ขๆฟ |
| ๅ่ฝๅผๅ ณ | โ | ๆไนฆๆบ้็ฆปๅญๅจ๏ผๅฎๆถ็ๆ |
| ไนฆๆบ็ฎก็ | โ | ๅฏผๅ ฅ / ้ฟๆๅ ้ค / ๅฏ็จ / ็ฆ็จ |
| JavaScript | โ | Rhino 1.8.1 + ๅฎๅ จๆฒ็ฎฑ |
| ๆฎต่ฏ่งๅ | โ | ReviewRule ๆฐๆฎๅฑๅฐฑ็ปช |
text/passwordโ ่พๅ ฅๆกselectโ ไธๆ้ๆฉ๏ผSpinner + options๏ผtoggleโ ๅผๅ ณ๏ผTextView + chars ๅพช็ฏ๏ผbuttonโ ๆ้ฎ๏ผaction URL / JS ๆง่ก๏ผ@js:/<js>ๅ็ผๅจๆ UIupLoginData/reLoginViewJS ๅ่ฐ- WebView ๆจกๅผๅ้
ๅผๆๆ ธๅฟ่งฃๆ้ป่พไธ Android ๅนณๅฐ้ถ่ฆๅใๅนณๅฐไพ่ต้่ฟ SPI ๆฅๅฃๆณจๅ ฅ๏ผshim ๅฑๆไพๅๅๅ ผๅฎน็้ป่ฎคๅฎ็ฐใ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ LNR ๅฎฟไธป่ฟ็จ โ
โ โ
โ LegadoJsonPlugin โ
โ โ โ
โ โโโ Engine.init( โ
โ โ context, <- ๅฎฟไธป Context โ
โ โ cacheProvider, <- ๅฏ้๏ผ่ชๅฎไน็ผๅญ โ
โ โ sourceConfigProvider, โ
โ โ appConfigProvider, โ
โ โ logProvider โ
โ โ ) โ
โ โ โ
โ โโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ engine ๆ ธๅฟ๏ผ้ถ android.* ไพ่ต๏ผ โ โ
โ โ โ โ
โ โ rule/ AnalyzeRule, AnalyzeUrl โ โ
โ โ AnalyzeByJSoup/XPath/ โ โ
โ โ JSonPath/Regex โ โ
โ โ js/ JsExtensions (50+ๆนๆณ) โ โ
โ โ RhinoScriptEngine โ โ
โ โ http/ HttpClient, CookieStoreโ โ
โ โ data/ Book, BookChapter, โ โ
โ โ BookSource, SearchBook โ โ
โ โ webBook/ WebBook โ โ
โ โ โ โ
โ โ ๅชไพ่ต spi/ ๆฅๅฃ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ shim ๅฑ๏ผๅนณๅฐ้้
+ ๅ้ๅฎ็ฐ๏ผ โ โ
โ โ โ โ
โ โ CacheManager delegate? -> ่ชๅฎไน โ โ
โ โ null -> SharedPrefs โ
โ โ SourceConfig ๅไธ โ โ
โ โ AppConfig ๅไธ โ โ
โ โ Debug ๅไธ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ plugin ๅฑ๏ผLNR ๆไปถ API ๅฏนๆฅ๏ผ โ โ
โ โ โ โ
โ โ LegadoJsonPlugin ๆไปถๅ
ฅๅฃ โ โ
โ โ LoginActivity loginUi ้ขๆฟ โ โ
โ โ LoginJsBridge WebView ๆกฅๆฅ โ โ
โ โ BackstageWebView ๆ ๅคด WebView โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
plugin/src/main/kotlin/
โโโ com/script/ # Rhino ScriptEngine ๅ
่ฃ
โ โโโ rhino/
โ โ โโโ RhinoScriptEngine.kt # JS ๆง่กๅผๆ
โ โ โโโ RhinoClassShutter.kt # ๅฎๅ
จๆฒ็ฎฑ๏ผ็ฝๅๅ๏ผ
โ โโโ ScriptBindings.kt
โ
โโโ io/legado/
โ โโโ engine/ # ๅผๆๆจกๅ
โ โ โโโ spi/ # SPI ๆฅๅฃ
โ โ โ โโโ CacheProvider.kt # ็ผๅญ
โ โ โ โโโ SourceConfigProvider # ๆบ้
็ฝฎ
โ โ โ โโโ AppConfigProvider # ๅบ็จ้
็ฝฎ
โ โ โ โโโ LogProvider # ๆฅๅฟ
โ โ โ โโโ Engine.kt # ็ปไธๅๅงๅ
โ โ โ
โ โ โโโ shim/ # ๅนณๅฐ้้
ๅฑ
โ โ โ โโโ CacheManager.kt # SP ๅ้
โ โ โ โโโ SourceConfig.kt
โ โ โ โโโ AppConfig.kt
โ โ โ โโโ Debug.kt
โ โ โ โโโ AndroidContext.kt
โ โ โ
โ โ โโโ rule/ # ่งๅ่งฃๆ
โ โ โ โโโ AnalyzeRule.kt # ๆ ธๅฟ๏ผscriptCache + ้ๅฝไฟๆค๏ผ
โ โ โ โโโ AnalyzeUrl.kt
โ โ โ โโโ RuleAnalyzer.kt
โ โ โ โโโ AnalyzeByJSoup.kt # CSS ้ๆฉๅจ
โ โ โ โโโ AnalyzeByXPath.kt # XPath
โ โ โ โโโ AnalyzeByJSonPath.kt # JSONPath
โ โ โ โโโ AnalyzeByRegex.kt # ๆญฃๅ
โ โ โ
โ โ โโโ js/ # JavaScript
โ โ โ โโโ JsExtensions.kt # 50+ JS ๅฏ่ฐ็จๆนๆณ
โ โ โ โโโ SharedJsScope.kt
โ โ โ
โ โ โโโ http/ # HTTP
โ โ โ โโโ HttpClient.kt # OkHttp ๅฐ่ฃ
โ โ โ โโโ CookieStore.kt
โ โ โ โโโ StrResponse.kt
โ โ โ
โ โ โโโ data/ # ๆฐๆฎๆจกๅ
โ โ โ โโโ Book.kt # 35 ๅญๆฎต
โ โ โ โโโ BookChapter.kt # 19 ๅญๆฎต
โ โ โ โโโ SearchBook.kt # 25 ๅญๆฎต
โ โ โ โโโ BookSource.kt
โ โ โ โโโ rule/ # ๅญ่งๅๆจกๅ
โ โ โ
โ โ โโโ webBook/WebBook.kt # ไธๅกๆต็จ็ผๆ
โ โ โโโ webview/BackstageWebView # ๆ ๅคด WebView
โ โ
โ โโโ plugin/ # ๆไปถๅฑ
โ โโโ LegadoJsonPlugin.kt # ๅ
ฅๅฃ
โ โโโ LoginActivity.kt # loginUi
โ โโโ LoginJsBridge.kt # JS ๆกฅๆฅ๏ผ30+ ๆนๆณ๏ผ
โ โโโ LegadoSourceManagerContent.kt
ๆฟๆขๆไธชๅนณๅฐๅฎ็ฐๅช้ๅฎ็ฐๅฏนๅบๆฅๅฃๅนถๆณจๅ ฅใ
interface CacheProvider {
fun getString(key: String): String?
fun putString(key: String, value: String)
fun putString(key: String, value: String, saveTimeSeconds: Int)
fun delete(key: String)
fun deleteByPrefix(prefix: String)
fun contains(key: String): Boolean
fun getLong(key: String): Long
fun putLong(key: String, value: Long)
fun getInt(key: String): Int
fun putInt(key: String, value: Int)
fun getFloat(key: String): Float
fun putFloat(key: String, value: Float)
fun getBoolean(key: String): Boolean
fun putBoolean(key: String, value: Boolean)
}interface SourceConfigProvider {
fun get(sourceKey: String, configKey: String): String?
fun put(sourceKey: String, configKey: String, value: String)
fun delete(sourceKey: String, configKey: String)
fun clear(sourceKey: String)
fun getAll(sourceKey: String): Map<String, String>
}interface AppConfigProvider {
val userAgent: String
val threadCount: Int
}interface LogProvider {
fun d(tag: String, msg: String)
fun i(tag: String, msg: String)
fun w(tag: String, msg: String)
fun e(tag: String, msg: String, throwable: Throwable? = null)
fun putDebug(msg: String, throwable: Throwable? = null)
}// ๆนๅผ 1๏ผๅ
จ้จ่ชๅฎไน
Engine.init(context, myCache, mySourceConfig, myAppConfig, myLog)
// ๆนๅผ 2๏ผๅชๆฟๆข้จๅ
CacheManager.delegate = MyCacheProvider()
// ๅ
ถไฝไฝฟ็จ้ป่ฎค SharedPreferences ๅ้| ๅบๆฏ | ๆนๅจ่ๅด |
|---|---|
| ็ผๅญ API ๅไบ | ๅชๆนๅฎฟไธปไพง CacheProvider ๅฎ็ฐ๏ผ1 ไธชๆไปถ๏ผ |
| SP -> DataStore | CacheManager.delegate = DataStoreProvider(dataStore) |
| ๆฏๆ้ Android | ๅชๆน shim ๅฑ 5 ไธชๆไปถ๏ผๅผๆๆ ธๅฟ้ถๆนๅจ |
| LNR ๆไปถ API ๅ็บง | ๅชๆน plugin/ ็ฎๅฝ๏ผengine ไธๅจ |
ไธ lyc486 ็ Legado ไธฅๆ ผไธ่ด๏ผ
| ไพ่ต | ็ๆฌ |
|---|---|
| Rhino | 1.8.1 |
| Jsoup | 1.16.2 |
| OkHttp | 5.3.2 |
| json-path | 2.10.0 |
| Gson | 2.13.2 |
| JsoupXpath | 2.5.3 |
| commons-text | 1.13.1 |
| Kotlin | 2.0.21 |
| compileSdk | 36 |
| minSdk | 24 |
- JDK 17+
- Android SDK๏ผcompileSdk 36๏ผ
.\gradlew :plugin:assembleDebugไบง็ฉ๏ผplugin/build/outputs/apk/debug/plugin-debug.apk.lnrp
ๅฐ .lnrp ๆไปถ้่ฟ LightNovelReader ๆไปถ็ฎก็็้ขๅฏผๅ
ฅใ
- ๅฎ่ฃ ๆไปถ
- ่ฟๅ ฅๆไปถ่ฎพ็ฝฎ้กต -> ใๅฏผๅ ฅ Legado JSON ไนฆๆบใ
- ๅฏ็จๆไปถ
- ๆ็ดข / ๅ็ฐๆพไนฆ้ ่ฏป
- ไนฆๆบๅ่กจๆพๅฐ็ฎๆ -> ็นๅปใ็ปๅฝใ
- ๆ loginUi -> ๆพ็คบ่ชๅฎไน่กจๅ
- ๆ loginUi -> WebView ๅ ่ฝฝ loginUrl
- ๆไบคๅ่ชๅจไฟๅญๅญ่ฏ
- ไนๆฏๆ่ขซๅจๅค่ตท๏ผๅผๆๆฃๆตๅฐ้่ฆ็ปๅฝๆถ่ชๅจ่งฆๅ๏ผ
GNU ้็จๅ ฌๅ ฑ่ฎธๅฏ่ฏ v3.0๏ผGPL-3.0๏ผ
ๆฌ้กน็ฎๆฏๅบไบ GPL-3.0 ่ฎธๅฏ่ฏ็ lyc486 ็ Legado ็่ก็ไฝๅใ
- Legado by lyc486 -- ๆ ธๅฟ่งฃๆๅผๆ
- LightNovelReader -- ๅฎฟไธปๅบ็จ
- LightNovelReader Plugin Template