? HISTORICAL ISSUE AND THAT'S WHAT WE ALL KNOW ?
If you want to reward me with the code that uses love to generate electricity, you can click this link to help me recharge ❤️:
The Material Design style轻小说文库
app is completely open source! If you want to practice Material Design, you can refer to the source code of this project. If you are unclear or have various related topics, you can send issue
to communicate ~
This project is my first time writing an Android app. I first read an introductory book, 《第一行代码Android》
given by chinapub as a book review, and then started writing this app. I started writing in October 2014, and it was all in scattered time. By the end of December, version 0.5.2.0 was written. At that time, I basically didn’t know anything, and the code I wrote was terrible. Later, a designer in the internal beta user group proposed to design a Material Design (hereinafter referred to as MD
) style app, so he planned to re-develop it. It was procrastinating and procrastinating, and it was not until the end of July that the new app was completed. If I counted on it, it would have taken a whole month and amounted to more than 20,000 lines of handwritten code.
This app is purely out of interest and experience as a project, so it完全无偿
charge and the source code is also完全开源
! Everyone is welcome to communicate. I have been reluctant to open source new MD
before. On the one hand , I feel that it is too difficult to write. I searched for information on various Googles and contributed dozens to the Hongxing plug-in_(:3」∠)_On the other hand, it is officially used Regarding git management, the webmaster of Wenku8 also prohibits making the API public, so it is very troublesome to manage the two versions. On the other hand, the code is very messy and not organized.
**Note: **Part of the 1.x version source code is copied from 0520, and the style of 0520 is very bad. For example, AsyncTask
's isLoading
is defined outside the class. Therefore, the coding style will be inconsistent. I am quite satisfied with the newly written code. The old code also has little need for modification, so there is no refactoring. Suggestions on coding style are also welcome to issue~
Why does the app say to cache novels of interest as soon as possible? Why is there such an urgency to open source now?
Please see开发者的碎碎念
at the end of the document.
You can refer to the app production renderings provided by the designer~
The source code of version 0.5.1.0030 ( eclipse
+ ADT
version), this source code castrates the API part, so the data cannot be obtained normally after compilation.
The source code of the 0.5.2.1典藏版
( Android Studio
version) is completely copied from the private library. The release address of the release version is the same as that of the official version.
The old version of the drawing source file was created by myself at the time, and it was completely random and disorganized =. =
All source code storage of the 1.x official version, complete source code of MD
style App, can be compiled and run normally! ( Android Studio
version)
For the new version of MD
style App, the design drawings are in design-source/
and the project files are in studio-android/
.
All references to third-party libraries use Gradle dependency, which will be directly ignored in terms of obfuscation. The encryption strength is low, but it is convenient for development~
Model & Controller: activity/WelcomeActivity.java
View: layout/layout_welcome.xml
Model & Controller: fragment/NavigationDrawerFragment.java
View: layout/layout_main_menu.xml
Model & Controller: fragment/FavFragment.java
Adapter: adapter/NovelItemAdapter.java
View: layout/fragment_latest.xml
搜索界面
Model & Controller: activity/SearchActivity.java
Adapter: adapter/SearchHistoryAdapter.java
View: layout/layout_search.xml
搜索结果界面
Model & Controller: activity/SearchResultActivity.java
Adapter: adapter/NovelItemAdapterUpdate.java
View: layout/layout_search_result.xml
Model & Controller: fragment/RKListFragment.java
Adapter: adapter/NovelItemAdapterUpdate.java
View: layout/fragment_rklist.xml + (layout/fragment_novel_item_list.xml)s
Model & Controller: fragment/FavFragment.java
Adapter: adapter/NovelItemAdapterUpdate.java
View: layout/fragment_novel_item_list.xml
Model & Controller: activity/NovolInfoActivity.java
View: layout/layout_novel_info.xml
Model & Controller: activity/NovolChapterActivity.java
View: layout/layout_novel_chapter.xml
Model & Controller: reader/activity/Wenku8ReaderActivityV1.java
View: layout/layout_reader_swipe_temp.xml + (layout/layout_reader_swipe_page.xml)s
Model & Controller: activity/VerticalReaderActivity.java
View: layout/layout_vertical_reader_temp.xml
Model & Controller: fragment/ConfigFragment.java
View: layout/fragment_config.xml
studio-android/LightNovelLibrary/app/src/main
| AndroidManifest.xml
|
+---assets/fonts
| fzss-gbk.ttf 方正书宋GBK字体
|
+---java/org/mewx/wenku8
| | MyApp.java 自定义Application为了全局获取Context
| |
| +---activity
| | AboutActivity.java 关于界面
| | MainActivity.java 主界面
| | MenuBackgroundSelectorActivity.java 侧栏菜单背景选择界面
| | NovelChapterActivity.java 章节选择界面
| | NovelInfoActivity.java 小说信息界面
| | SearchActivity.java 搜索界面
| | SearchResultActivity.java 搜索结果框架界面
| | UserInfoActivity.java 用户信息界面
| | UserLoginActivity.java 用户登录界面
| | VerticalReaderActivity.java 上下滑动界面
| | ViewImageDetailActivity.java 查看大图界面
| | WelcomeActivity.java 启动界面
| |
| +---adapter
| | NovelItemAdapter.java 老版的小说项Adapter,每10项更新一次
| | NovelItemAdapterUpdate.java 更新的小说项Adapter,动态更新每一项
| | SearchHistoryAdapter.java 搜索历史Adapter
| |
| +---component
| | PagerSlidingTabStrip.java 排行榜自定义的标签类
| | ScrollViewNoFling.java 可控滑动阻尼的ScrollView
| |
| +---fragment
| | ConfigFragment.java 设置界面
| | FavFragment.java 本地书架框架
| | LatestFragment.java 最近更新
| | NavigationDrawerFragment.java 侧栏菜单
| | NovelItemListFragment.java 通用的小说列表界面(嵌入框架中)
| | RKListFragment.java 排行榜框架
| |
| +---global
| | | GlobalConfig.java 全局设置(糟糕向),其中inAlphaBuild控制内测版/正式版
| | |
| | ---api
| | ChapterInfo.java 章节信息类
| | NovelItemInfo.java 小说信息类
| | NovelItemInfoUpdate.java 更新的小说信息类
| | NovelItemList.java 小说项列表类
| | NovelItemMeta.java 小说完整信息类
| | OldNovelContentParser.java 旧的小说内容解析器,解析成text和image
| | UserInfo.java 用户信息类
| | VolumeList.java 卷信息类
| | Wenku8API.java API类
| | Wenku8Error.java 错误信息类,后期的编码中定义的
| | Wenku8Parser.java 通用项目解析器
| |
| +---listener
| | MyItemClickListener.java RecyclerView的单击监听接口
| | MyItemLongClickListener.java RecyclerView的长按监听接口
| |
| +---reader 这边准备封装成的UniversalReaderActivity库的
| | +---activity
| | | Wenku8ReaderActivityV1.java 左右滑动阅读界面
| | |
| | +---loader
| | | WenkuReaderLoader.java 小说载入类的抽象类
| | | WenkuReaderLoaderXML.java XML格式小说载入类
| | |
| | +---setting
| | | WenkuReaderSettingV1.java 阅读设置类V1
| | |
| | +---slider 三方划屏库
| | | | SlidingAdapter.java
| | | | SlidingLayout.java
| | | |
| | | ---base
| | | BaseSlider.java
| | | OverlappedSlider.java
| | | PageSlider.java
| | | Slider.java
| | |
| | ---view
| | WenkuReaderPageBatteryView.java 电池View(未使用)
| | WenkuReaderPageView.java 单页小说View(效率低)
| |
| +---service
| | HeartbeatSessionKeeper.java 心跳包保持session类(未使用)
| |
| ---util
| LightBase64.java 轻量级base64封装库
| LightCache.java 轻量级文件操作库(容易OOM)
| LightNetwork.java 轻量级网络通信库(容易OOM)
| LightTool.java 轻量级工具集合类
| LightUserSession.java 轻量级用户Session管理(包括账号密码加解密)
| Logger.java 轻量级日志类(未使用)
|
---res/
| ... 略
The old version of the App starts and runs more smoothly than the MD
version and is maintained for old models. The source code of the Eclipse
version can be found in eclipse-android/
directory (not the latest). The source code of Android Studio
version can be found in the eclipse-android-old/
directory (the collector's version is the latest). The image resources of the old version are all made with Fireworks. The source files can be found in graph-source/
Table of contents.
Many third-party libraries have been introduced here, but the method is clumsy. It mainly uses copying and merging source code, so the file directory will be messy. However, the encryption strength is high_(:3 ∠)_ It is still recommended to do this when making commercial software in the future. Although it is troublesome, it will be very annoying after confusion~
eclipse-android-oldLightNovelLibrarysrc
+---com
| +---davemorrissey
| | ---labs
| | ---subscaleview 分部加载图片的库,查看大图防止OOM
| | ImageViewState.java
| | ScaleImageView.java
| | SubsamplingScaleImageView.java
| |
| +---ecloud
| | ---pulltozoomview 下拉放大的视图,设置界面用的小苹果~
| | IPullToZoom.java
| | PullToZoomBase.java
| | PullToZoomListView.java
| | PullToZoomListViewEx.java
| | PullToZoomScrollView.java
| | PullToZoomScrollViewEx.java
| |
| +---facebook
| | ---rebound 物理、动画库,用途忘记了 =。= 大半年没动了,好像是侧栏菜单用的
| | | AndroidSpringLooperFactory.java
| | | BaseSpringSystem.java
| | | OrigamiValueConverter.java
| | | SimpleSpringListener.java
| | | Spring.java
| | | SpringConfig.java
| | | SpringConfigRegistry.java
| | | SpringListener.java
| | | SpringLooper.java
| | | SpringSystem.java
| | | SpringSystemListener.java
| | | SpringUtil.java
| | | SteppingLooper.java
| | | SynchronousLooper.java
| | |
| | ---ui
| | SpringConfiguratorView.java
| | Util.java
| |
| +---special
| | ---ResideMenu 侧边滑动菜单iOS风格的
| | ResideMenu.java
| | ResideMenuItem.java
| | TouchDisableView.java
| |
| ---zcw
| ---togglebutton iOS风格的切换按钮
| ToggleButton.java
|
+---me
| ---imid
| ---swipebacklayout 右滑返回layout
| ---lib
| | SwipeBackLayout.java
| | Utils.java
| | ViewDragHelper.java
| |
| ---app
| SwipeBackActivity.java
| SwipeBackActivityBase.java
| SwipeBackActivityHelper.java
| SwipeBackPreferenceActivity.java
|
+---org
| ---mewx
| ---lightnovellibrary
| +---activity
| | AboutActivity.java 关于界面
| | BookshelfFragment.java 本地书架
| | LibraryFragment.java 小说库(主界面入口)
| | MainActivity.java 主界面
| | NovelImageActivity.java 看大图界面
| | NovelInfoActivity.java 小说信息界面
| | NovelListActivity.java 小说列表界面
| | NovelReaderActivity.java 阅读器界面(上下滑动)
| | NovelSearchActivity.java 搜索界面
| | SettingFragment.java 设置
| | StartActivity.java 启动界面
| | Wenku8Fragment.java (未完成)
| |
| +---api
| | Wenku8Interface.java 你懂的
| |
| +---component
| | | GlobalConfig.java 全局设置界面
| | | MyApp.java 用于获取Context的全局Application
| | | NovelContentParser.java 小说内容解析器
| | | XMLParser.java XML解析器
| | |
| | ---adapter
| | EntryElement.java 书库分类项
| | EntryElementAdapter.java 书库分类项Adapter
| | NovelContentAdapter.java 小说内容Adapter
| | NovelElement.java 小说项
| | NovelElementAdapter.java 小说项Adapter
| | NovelElementSearch.java 小说搜索项
| | NovelElementSearchAdapter.java 小说搜索项Adapter
| | NovelIcon.java 小说封面
| | NovelIconAdapter.java 小说封面Adapter
| |
| ---util
| LightBase64.java 轻量级Base64库
| LightCache.java 轻量级文件操作库
| LightNetwork.java 轻量级网络通信库
|
---uk
---co
---senab
---photoview 轻量级看图的View
| Compat.java
| DefaultOnDoubleTapListener.java
| IPhotoView.java
| PhotoView.java
| PhotoViewAttacher.java
|
+---gestures
| CupcakeGestureDetector.java
| EclairGestureDetector.java
| FroyoGestureDetector.java
| GestureDetector.java
| OnGestureListener.java
| VersionedGestureDetector.java
|
+---log
| Logger.java
| LoggerDefault.java
| LogManager.java
|
---scrollerproxy
GingerScroller.java
IcsScroller.java
PreGingerScroller.java
ScrollerProxy.java
The number of users of the new version of the app has increased to 10,000 in 10 days, all thanks to wenku8. Based on the current growth rate, it is estimated that the peak number of users is about 3W.
There are also a few interesting statistical charts to share:
Examples of archive files can be downloaded and viewed in the release
area~
sdcard/wenku8
+---cache 完全由UIL接管的图片缓存文件夹
+---custom 用户自定义文件夹,可以放入自定义侧栏壁纸、自定义阅读字体、自定义阅读背景
| .nomedia
|
+---imgs 小说封面
| .nomedia
| *.jpg
|
---saves 存档文件夹
| avatar.jpg 登陆后的头像
| bookshelf_local.wk8 本地书架
| cert.wk8 简单加密的登陆用户名和密码
| read_saves.wk8 旧版的上下滑动阅读进度存档
| read_saves_v1.wk8 新版的左右滑动阅读进度存档
| search_history.wk8 搜索历史存档
| settings.wk8 设置存档
|
+---imgs 小说插图
| .nomedia
| *.jpg
|
+---intro 小说信息
| *.xml
|
---novel 小说正文
*.xml
cache目录
is automatically generated;settings.wk8
is read when the App starts, and every time the settings are changed, the settings will be saved immediately;imgs目录
;收藏
function of the novel will write aid into saves/bookshelf_local.wk8
, and canceling the collection will cancel the writing and delete the relevant local xml content (the picture will not be deleted);saves/intro
, 3 files for each novel, and refresh the Activity after the update.saves/intro
, and then download the specific content of the novel (stored in saves/novel
) according to the information in aid-volume.xml
. After each download, check whether the xml contains pictures. If there is a picture, insert the task of downloading the picture** (this is why the progress bar will jump to 2331 during downloading)**;saves/read_saves_v1.wk8
when entering, and save the progress when exiting;saves/read_saves.wk8
when entering, and save the progress when exiting;saves/search_history.wk8
will be automatically read, and the latest search record will be saved each time it is searched;saves/cert.wk8
and saves/avatar.jpg
will be generated, and they will log in automatically every time they start the app; if they are not connected to the Internet, they will log in automatically when they click on the avatar or when there is an access request; if the login fails, these two credentials will be deleted. document; Mainly the implementation of archiving and the specification of compatible archiving.
Example of file content:
1098||1939||1924||1749||278
File saving rules:
||
When reading, call str.split("\|\|");
saves/intro
directory: aid-intro.xml
, aid-introfull.xml
, aid-volume.xml
. If a file is missing, the book corresponding to the aid will be ignored. You can检查更新
( Pull down the check for updates in the bookshelf and novel information interface) to fix this error;Example of file content:
66761,,23799,,25575||66752,,134,,15090||63125,,1139,,3059||
63126,,904,,2824||63127,,11299,,157217
File saving rules:
cid,,position,,height
:saves/novel
;||
, and str.split("\|\|");
is called when reading;Example of file content:
1863:65378:65380:10:0||1922:67426:67427:0:0||1656:56193:56194:38:0||
1244:38825:38827:0:0||1163:35537:35538:0:0||1151:35126:35128:0:0||
1247:38920:38922:230:0||1759:60160:60161:159:0||1886:66259:66261:0:0||
1016:51951:51952:0:0||1749:59813:59814:0:0||1575:52853:52855:0:0||
278:10165:10166:36:0||1213:37499:37503:0:0||1928:67584:67585:0:0||
1446:47586:47588:90:0||1755:60043:60044:0:0||1519:50813:50814:0:0||
1932:67774:67782:255:55||1701:57929:57935:0:0
File saving rules:
aid:cid:vid:paraid:wordid
:||
, and str.split("\|\|");
is called when reading;一个起始字符(wordid)
一个段落(paraid)
, and then dynamically paginate;Example of file content:
[田中][1到][音][刀剑][1日日日][进击的巨人][光还在][人类衰退][古][寒蝉]
File saving rules:
[]
, UTF-8 has no BOM encoding;0520
version will add a number at the beginning:[0田中]
[1到]
GlobalConfig.java
;Example of file content:
reader_line_distance::::10||||
menu_bg_path::::/storage/emulated/0/tencent/QQ_Images/5699e514d0bb9779.png||||
reader_background_path::::0||||
version::::1||||
reader_paragraph_distance::::14||||
language::::SC||||
menu_bg_id::::0||||
reader_font_size::::18||||
reader_font_path::::0
Code snippet for key:
public enum SettingItems {
version, // (int) 1
language,
menu_bg_id, // (int) 1-5 by system, 0 for user
menu_bg_path, // (String) for user custom
reader_font_path, // (String) path to ttf, "0" means default
reader_font_size, // (int) sp (8 - 32)
reader_line_distance, // (int) dp (0 - 32)
reader_paragraph_distance, // (int) dp (0 - 48)
reader_paragraph_edge_distance, // (int) dp (0 - 16)
reader_background_path, // (String) path to an image, day mode only, "0" means default
}
File saving rules:
ContentValue
in the code;::::
, and key-value pairs are separated by ||||
;enum.toString()
method is used to obtain them to avoid low-level errors caused by hard coding;Example of file content:
Z0M5a0daRXBsZG5SMFZpaFhlPT0K
|b1FQOUVXYjFja1d1SlRkazVtV3BSWGI9Cg==
File saving rules:用户名|密码
, line breaks are automatically generated by system functions and do not affect reading.
加密流程:
1. 原文: str
2. 一遍加密: base64(str)
3. 大小写互转: switch(base64(str))
4. 两遍加密: base64(switch(base64(str)))
5. 除了等号外,前后字符交换: swap(base64(switch(base64(str))))
6. 三次加密: base64(swap(base64(switch(base64(str)))))
解密流程:
同理
This App has decided to suspend maintenance...
On the one hand, the reason is that the developers themselves have to prepare for the graduate exams at the end of the year; on the other hand, and the most important aspect, Goose Factory has purchased light novel copyrights on a large scale. There are some reasons that cannot be disclosed for the time being. In short, this third-party app has to come to an end. , for details, you can read开发者的碎碎念
.
A few days ago, I used HTTrack to crawl the database of lknovel.cn
. The total size is 20G, which is too huge. The number of files is 20W. My XP crawler has been stuck. However, since the server is in the country, the speed is pretty good and it takes 1 to 2 days to complete.
Later, I tried to capture wenku8.com
. The server is in the United States, and the speed here is too slow . It took a whole day to capture only 1G. I estimate that the data volume of wenku8 is about 30G, and I really can’t hold it.
所以尽管API开源了,但是因为内陆速度实在太慢,我都没有兴趣抓取了,所以劝大家去抓其他站:
linovel.com 可以用HTTrack设置总目录页面为入口,深度5,然后设定MAX 10000000,图片采用探索模式即可(一般的扒站工具抓不下来图片),服务器没有防护;
lknovel.cn 可以用HTTrack设置章节页面及小说信息界面为入口(excel生成url即可),深度2,设定MAX 10000000,服务器没有防护。
wenku8.com 速度太慢了,数据量还大,插图还在文末,没啥性价比,别抓了。
In other words, this app will have no data source in the future. If you want to continue to make the app, you can only crawl and purify the html. If any developer is interested and wants to continue the app by crawling (for example: The data of lknovel, linovel, and wenku8 can be captured at the same time and displayed to the user), you can read the following part:
At present, wenku8
has less than 2,000 books, which means that the aid is 4 digits; the aids of linovel
and lknovel
are also 4 digits, and they are not as big as wenku8
, so:
在aid方面,可以采取aid+10000000的方式,比如linovel的aid是+1000万,lknovel的aid是+2000万,这样本地书架的内容就错开了。
In terms of archiving:
aid-intro.xml 可以采取两种文件格式:
最小文件体:
<?xml version="1.0" encoding="utf-8"?>
<metadata>
<data name="Title" aid="1749"><![CDATA[残酷童话]]></data>
<data name="Author" value="仓桥由美子"/>
<data name="BookStatus" value="已完成"/>
<data name="LastUpdate" value="2015-08-01"/>
<data name="IntroPreview"><![CDATA[ 现实残酷,童话幻灭
在现实生活中,王子与...]]></data>
</metadata>
扩展文件体(可以自定义字段)但是已定义的字段有这些:
<?xml version="1.0" encoding="utf-8"?>
<metadata>
<data name="Title" aid="5"><![CDATA[狼与香辛料(狼与辛香料)]]></data>
<data name="Author" value="支仓冻砂"/>
<data name="DayHitsCount" value="14"/>
<data name="TotalHitsCount" value="394148"/>
<data name="PushCount" value="22940"/>
<data name="FavCount" value="6003"/>
<data name="PressId" value="电击文库" sid="1"/>
<data name="BookStatus" value="已完成"/>
<data name="BookLength" value="2004567"/>
<data name="LastUpdate" value="2012-02-08"/>
<data name="LatestSection" cid="36097"><![CDATA[第十七卷 插图]]></data>
</metadata>
aid-introfull.xml 的文件内容示例:
旅行于各地贩卖并收购物品的商人克拉福·罗伦斯,拜访帕斯罗村并离开后,在自己的马车上发现了不知从哪里跑来的东西。
拨开从帕斯罗村购买的小麦束后,竟然发现一位拥有兽耳与尾巴的美少女。
少女自称为贤狼赫萝,是带给帕斯罗村长期丰收的少女。
“虽然咱长久以来被尊为神,不过,咱就是咱,咱是赫萝。”见到少女的一只手变化成狼脚的罗伦斯,虽然一边怀疑赫萝的身份,但一边也答应让想回到出生遥远北方的少女一同旅行。
aid-volume.xml 文件内容示例:
<?xml version="1.0" encoding="utf-8"?>
<package>
<volume vid="55995"><![CDATA[第一卷]]>
<chapter cid="55996"><![CDATA[序章 Prologue]]></chapter>
<chapter cid="55997"><![CDATA[第一话 A-part 死与不死]]></chapter>
<chapter cid="55998"><![CDATA[第一话 B-part 死与不死]]></chapter>
<chapter cid="55999"><![CDATA[第二话 A-part 杀人与异能]]></chapter>
<chapter cid="56000"><![CDATA[第二话 B-part 杀人与异能]]></chapter>
<chapter cid="56001"><![CDATA[第三话 A-part 命与心]]></chapter>
<chapter cid="56002"><![CDATA[第三话 B-part 命与心]]></chapter>
<chapter cid="56003"><![CDATA[插曲 Interlude]]></chapter>
<chapter cid="56004"><![CDATA[终章 Epilogue]]></chapter>
<chapter cid="56005"><![CDATA[后记]]></chapter>
<chapter cid="56006"><![CDATA[插图]]></chapter>
</volume>
<volume vid="68031"><![CDATA[第二卷]]>
<chapter cid="68032"><![CDATA[【序章】Prologue]]></chapter>
<chapter cid="68033"><![CDATA[【第一话】First Story 别墅与杀人事件]]></chapter>
<chapter cid="68034"><![CDATA[【插曲】~Interlude~ 梦与心的夹缝间]]></chapter>
<chapter cid="68035"><![CDATA[【第二话】Second Story 内心与创伤]]></chapter>
<chapter cid="68036"><![CDATA[【插曲】~Interlude~ 某人的黑暗]]></chapter>
<chapter cid="68037"><![CDATA[【第三话】Third Story 紧张局势与众人目的]]></chapter>
<chapter cid="68038"><![CDATA[【插曲】~Interlude~ 黑暗之中]]></chapter>
<chapter cid="68039"><![CDATA[【第四话】Fourth Story 白天与夜晚]]></chapter>
<chapter cid="68040"><![CDATA[【插曲】~Interlude~ 黑夜与白昼的夹缝间]]></chapter>
<chapter cid="68041"><![CDATA[【终章】Epilogue]]></chapter>
<chapter cid="68042"><![CDATA[后记]]></chapter>
<chapter cid="68255"><![CDATA[插图]]></chapter>
</volume>
<volume vid="68043"><![CDATA[第三卷]]>
<chapter cid="68044"><![CDATA[【序章】Prologue]]></chapter>
<chapter cid="68045"><![CDATA[【第一话·前篇】First Story*First part 妹妹和传说]]></chapter>
<chapter cid="68046"><![CDATA[【第一话·后篇】First Story*Latter part 妹妹和传说]]></chapter>
<chapter cid="68047"><![CDATA[【插曲】~Interlude~ 她所身处的黑暗]]></chapter>
<chapter cid="68048"><![CDATA[【第二话·前篇】Second Story*First part 真实与冒牌货]]></chapter>
<chapter cid="68049"><![CDATA[【第二话·后篇】Second Story*Latter part 真实与冒牌货]]></chapter>
<chapter cid="68050"><![CDATA[【插曲】~Interlude~ 她所身处的黑暗]]></chapter>
<chapter cid="68051"><![CDATA[【终章】~Story of End~ 于是来到她的生日]]></chapter>
<chapter cid="68052"><![CDATA[【章外篇】~Epilogue~]]></chapter>
<chapter cid="68053"><![CDATA[后记]]></chapter>
<chapter cid="68256"><![CDATA[插图]]></chapter>
</volume>
</package>
vid.xml 小说内容示例(目前版本支持图文混排,自动提纯多余换行和前导空格):
一场死亡游戏
即将揭开序幕
SAO玩家·桐人,以完全攻略为目标,
在游戏舞台「艾恩葛朗特」城堡里展开一连串严酷的冒险。
途中与女剑士·亚丝娜的相遇,也为桐人带来命中注定的契机——
川原砾
出身于光之国度,居住在亚兹罗斯。人生就是独行剑士。
虽然嘴里一直逞强说自己不需要一起组队的伙伴,但是最近因为许多任务的难易度提高而感到相当棘手。虽然一辈子都没办法单独去唱KTV,但希望至少能升级到独自去吃烧肉的等级。
<!--image-->http://pic.wenku8.com/pictures/0/471/17513/3213.jpg<!--image-->
<!--image-->http://pic.wenku8.com/pictures/0/471/17513/3214.jpg<!--image-->
<!--image-->http://pic.wenku8.com/pictures/0/471/17513/3215.jpg<!--image-->
<!--image-->http://pic.wenku8.com/pictures/0/471/17513/3216.jpg<!--image-->
As long as the captured content is passed through正则表达式
or updateable lua
scripts, packet capture can be achieved. Then the main interface of the library can be changed to this:
文库入口(Material Card):
轻国文库
轻之文库
轻小说文库
etc
Click to enter the search interface, then search, download, and convert it into a recognizable format. What I have heard so far is that the domestic library will still be maintained free of charge!
If any students or developers are interested, you can contact me~
- jgilfelt / SystemBarTint (Apache License 2.0)
用于设置Kitkat以上版本StatusBar和NavigationBar颜色透明度等。
- nostra13 / Android-Universal-Image-Loader (Apache License 2.0)
著名的UIL,用于管理图片缓存和加载的库,非常方便,不会OOM。
- astuetz / PagerSlidingTabStrip (Apache License 2.0)
-> branch: jpardogo / PagerSlidingTabStrip
Material风格的标签及页面库,jpardogo的分支在自定制方面功能更强。
- jpardogo / GoogleProgressBar (Apache License 2.0)
-> branch: MewX / google-progress-bar
谷歌风格的加载动画,我的分支添加了Google Doodle-notifier的样式。
原版的样式是圆角矩形,这边间距细节什么的模仿的不是很完美。
- Google / Volley (Apache License 2.0)
Google发布的大规模并发加载库。原版不支持byte返回值,我这边稍加修改了。
- afollestad / material-dialogs (MIT License)
完美的Material Dialog兼容库!
- futuresimple / android-floating-action-button (Apache License 2.0)
可以展开的FAB,动画效果很自然,但是不支持ripple比较遗憾,而且阴影会截断。
- vinc3m1 / RoundedImageView (Apache License 2.0)
圆形ImageView,显示头像用的。
- chrisbanes / SmoothProgressBar (BEER-WARE LICENSE)
平滑进度条,这里用在小说信息、搜索结果页面的ActionBar下部。
- davemorrissey / subsampling-scale-image-view (Apache License 2.0)
支持局部加载的ImageView,用于小说查看大图,用一般的ImageView容易OOM。
- martiansutdio / SlidingLayout (Unknown License)
针对电子书的划屏库,非常省内存,只有3页,自由度不高,但是毕竟拿来主义 =。=
- AnderWeb / discreteSeekBar (Apache License 2.0)
动画效果不错的SeekBar,用在小说阅读的设置和跳转页面中。
Originally, the app was not intended to be open source. For example, the code was not well written, and if it was open source, two versions would have to be maintained...
The main reason is that I took a lot of detours in learning Material, and many attempts can be seen in the historical push. Google launched the system Design, and the official app has also been developed very well, but what developers really need to use is besides support- Design libraries are only third-party libraries. However, it is still not as good as the Google Play Store app in all aspects. I don’t want to part with the code, I don’t want the app to be copied =. = However, it turns out that I thought too much...
However, I have recently received various死亡预告
, so this app is about to寿终正寝
. 233 is now completely open source, including APPKEY, API, etc. Welcome everyone to communicate and learn~
Let’s share经验教训
from developing the app this time:
Apps that rely on websites must ensure that the website does not influence the development of the app.
The current situation is that the website strategy has changed, resulting in the interface service of this app being stopped and replaced by another cooperative app (not a third party). What I said before is that everyone should hurry up and download抓紧缓存
while it is still available. You might have to pay for it in the future. Just follow Goose Factory's lead!
Therefore, I think that when making your own app, it is best to build a service website, just like空之文库
, which has a server image, so that problems with LK will not affect Kongwen.
Be careful when developing app types.
It is also written in the blog post here that the版权敏感的软件
market will not accept it easily, and copyright proof must be provided. Therefore, it has been unable to be put on the shelves here.轻文
can be put on the shelves because it has original elements. Nowadays, domestic censorship is becoming more and more strict...
User guidance is important.
There are many small functions hidden in this app. For example, users cannot find the search function. Long press on a chapter can choose to左右翻页
right or上下滑动
to read. Long press on history search can delete a certain record. Another example: the volume keys can turn pages, click to turn pages, and you can also switch chapters, etc. Even users who view pictures don’t know how to do it. Here, the button is placed on the ActionBar to avoid conflict with the page turning operation, but the user says that the picture cannot be found =. = For example, it is said that custom fonts, pictures, etc. cannot be used in the external SD card, but the user still cannot operate as required.
Therefore, when entering the interface, it should be user-friendly and an operation prompt should pop up, so this aspect is lost!
The original user stickiness requires a very strong advantage to break.
Originally, there was an app for light novels called空之文库
. After my app came out, the number of users did increase a lot. However, the illustrations at the end of the article are indeed the biggest weakness, because many users of light novels are middle school students. This Some users say that it sounds awkward, but in order to increase the number of users, apps that are targeted as替代品
do need to functionally meet the needs of the vast majority of users. So after轻文
came out, the number of users here did lose a lot.
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
......
Thanks goes to these wonderful people (emoji key):
Baby Pepper | Jack Liu |
This project follows the all-contributors specification. Contributions of any kind welcome!