优化 (#3375)
This commit is contained in:
+3
-2
@@ -214,10 +214,10 @@ dependencies {
|
|||||||
//网络
|
//网络
|
||||||
implementation('com.squareup.okhttp3:okhttp:4.11.0')
|
implementation('com.squareup.okhttp3:okhttp:4.11.0')
|
||||||
implementation(fileTree(dir: 'cronetlib', include: ['*.jar', '*.aar']))
|
implementation(fileTree(dir: 'cronetlib', include: ['*.jar', '*.aar']))
|
||||||
implementation 'com.google.protobuf:protobuf-javalite:3.23.4'
|
implementation 'com.google.protobuf:protobuf-javalite:3.24.3'
|
||||||
|
|
||||||
//Glide
|
//Glide
|
||||||
def glideVersion = "4.15.1"
|
def glideVersion = "4.16.0"
|
||||||
implementation("com.github.bumptech.glide:glide:$glideVersion")
|
implementation("com.github.bumptech.glide:glide:$glideVersion")
|
||||||
//kapt("com.github.bumptech.glide:compiler:$glideVersion")
|
//kapt("com.github.bumptech.glide:compiler:$glideVersion")
|
||||||
ksp("com.github.bumptech.glide:ksp:$glideVersion")
|
ksp("com.github.bumptech.glide:ksp:$glideVersion")
|
||||||
@@ -233,6 +233,7 @@ dependencies {
|
|||||||
implementation("org.nanohttpd:nanohttpd-websocket:$nanoHttpdVersion")
|
implementation("org.nanohttpd:nanohttpd-websocket:$nanoHttpdVersion")
|
||||||
|
|
||||||
//二维码
|
//二维码
|
||||||
|
//noinspection GradleDependency
|
||||||
implementation('com.github.jenly1314:zxing-lite:2.4.0')
|
implementation('com.github.jenly1314:zxing-lite:2.4.0')
|
||||||
|
|
||||||
//颜色选择
|
//颜色选择
|
||||||
|
|||||||
+6
-6
@@ -28,7 +28,7 @@ static def generateMD5(final file) {
|
|||||||
/**
|
/**
|
||||||
* 下载Cronet相关的jar
|
* 下载Cronet相关的jar
|
||||||
*/
|
*/
|
||||||
task downloadJar(type: Download) {
|
tasks.register('downloadJar', Download) {
|
||||||
src([
|
src([
|
||||||
BASE_PATH + "cronet_api.jar",
|
BASE_PATH + "cronet_api.jar",
|
||||||
BASE_PATH + "cronet_impl_common_java.jar",
|
BASE_PATH + "cronet_impl_common_java.jar",
|
||||||
@@ -42,7 +42,7 @@ task downloadJar(type: Download) {
|
|||||||
/**
|
/**
|
||||||
* 下载Cronet的arm64-v8a so
|
* 下载Cronet的arm64-v8a so
|
||||||
*/
|
*/
|
||||||
task downloadARM64(type: Download) {
|
tasks.register('downloadARM64', Download) {
|
||||||
src BASE_PATH + "libs/arm64-v8a/libcronet." + CronetVersion + ".so"
|
src BASE_PATH + "libs/arm64-v8a/libcronet." + CronetVersion + ".so"
|
||||||
dest soPath + "/arm64-v8a.so"
|
dest soPath + "/arm64-v8a.so"
|
||||||
overwrite true
|
overwrite true
|
||||||
@@ -51,7 +51,7 @@ task downloadARM64(type: Download) {
|
|||||||
/**
|
/**
|
||||||
* 下载Cronet的armeabi-v7a so
|
* 下载Cronet的armeabi-v7a so
|
||||||
*/
|
*/
|
||||||
task downloadARMv7(type: Download) {
|
tasks.register('downloadARMv7', Download) {
|
||||||
src BASE_PATH + "libs/armeabi-v7a/libcronet." + CronetVersion + ".so"
|
src BASE_PATH + "libs/armeabi-v7a/libcronet." + CronetVersion + ".so"
|
||||||
dest soPath + "/armeabi-v7a.so"
|
dest soPath + "/armeabi-v7a.so"
|
||||||
overwrite true
|
overwrite true
|
||||||
@@ -60,7 +60,7 @@ task downloadARMv7(type: Download) {
|
|||||||
/**
|
/**
|
||||||
* 下载Cronet的x86_64 so
|
* 下载Cronet的x86_64 so
|
||||||
*/
|
*/
|
||||||
task downloadX86_64(type: Download) {
|
tasks.register('downloadX86_64', Download) {
|
||||||
src BASE_PATH + "libs/x86_64/libcronet." + CronetVersion + ".so"
|
src BASE_PATH + "libs/x86_64/libcronet." + CronetVersion + ".so"
|
||||||
dest soPath + "/x86_64.so"
|
dest soPath + "/x86_64.so"
|
||||||
overwrite true
|
overwrite true
|
||||||
@@ -69,7 +69,7 @@ task downloadX86_64(type: Download) {
|
|||||||
/**
|
/**
|
||||||
* 下载Cronet的x86 so
|
* 下载Cronet的x86 so
|
||||||
*/
|
*/
|
||||||
task downloadX86(type: Download) {
|
tasks.register('downloadX86', Download) {
|
||||||
src BASE_PATH + "libs/x86/libcronet." + CronetVersion + ".so"
|
src BASE_PATH + "libs/x86/libcronet." + CronetVersion + ".so"
|
||||||
dest soPath + "/x86.so"
|
dest soPath + "/x86.so"
|
||||||
overwrite true
|
overwrite true
|
||||||
@@ -81,7 +81,7 @@ task downloadX86(type: Download) {
|
|||||||
* 先更改gradle.properties 里面的版本号,然后再执行
|
* 先更改gradle.properties 里面的版本号,然后再执行
|
||||||
* gradlew app:downloadCronet
|
* gradlew app:downloadCronet
|
||||||
*/
|
*/
|
||||||
task downloadCronet() {
|
tasks.register('downloadCronet') {
|
||||||
dependsOn downloadJar, downloadARM64, downloadARMv7, downloadX86_64, downloadX86
|
dependsOn downloadJar, downloadARM64, downloadARMv7, downloadX86_64, downloadX86
|
||||||
|
|
||||||
doLast {
|
doLast {
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ class RssArticlesAdapter(context: Context, callBack: CallBack) :
|
|||||||
override fun onLoadFailed(
|
override fun onLoadFailed(
|
||||||
e: GlideException?,
|
e: GlideException?,
|
||||||
model: Any?,
|
model: Any?,
|
||||||
target: Target<Drawable>?,
|
target: Target<Drawable>,
|
||||||
isFirstResource: Boolean
|
isFirstResource: Boolean
|
||||||
): Boolean {
|
): Boolean {
|
||||||
imageView.gone()
|
imageView.gone()
|
||||||
@@ -58,10 +58,10 @@ class RssArticlesAdapter(context: Context, callBack: CallBack) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onResourceReady(
|
override fun onResourceReady(
|
||||||
resource: Drawable?,
|
resource: Drawable,
|
||||||
model: Any?,
|
model: Any,
|
||||||
target: Target<Drawable>?,
|
target: Target<Drawable>?,
|
||||||
dataSource: DataSource?,
|
dataSource: DataSource,
|
||||||
isFirstResource: Boolean
|
isFirstResource: Boolean
|
||||||
): Boolean {
|
): Boolean {
|
||||||
imageView.visible()
|
imageView.visible()
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ class RssArticlesAdapter1(context: Context, callBack: CallBack) :
|
|||||||
override fun onLoadFailed(
|
override fun onLoadFailed(
|
||||||
e: GlideException?,
|
e: GlideException?,
|
||||||
model: Any?,
|
model: Any?,
|
||||||
target: Target<Drawable>?,
|
target: Target<Drawable>,
|
||||||
isFirstResource: Boolean
|
isFirstResource: Boolean
|
||||||
): Boolean {
|
): Boolean {
|
||||||
imageView.gone()
|
imageView.gone()
|
||||||
@@ -58,10 +58,10 @@ class RssArticlesAdapter1(context: Context, callBack: CallBack) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onResourceReady(
|
override fun onResourceReady(
|
||||||
resource: Drawable?,
|
resource: Drawable,
|
||||||
model: Any?,
|
model: Any,
|
||||||
target: Target<Drawable>?,
|
target: Target<Drawable>?,
|
||||||
dataSource: DataSource?,
|
dataSource: DataSource,
|
||||||
isFirstResource: Boolean
|
isFirstResource: Boolean
|
||||||
): Boolean {
|
): Boolean {
|
||||||
imageView.visible()
|
imageView.visible()
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ class RssArticlesAdapter2(context: Context, callBack: CallBack) :
|
|||||||
override fun onLoadFailed(
|
override fun onLoadFailed(
|
||||||
e: GlideException?,
|
e: GlideException?,
|
||||||
model: Any?,
|
model: Any?,
|
||||||
target: Target<Drawable>?,
|
target: Target<Drawable>,
|
||||||
isFirstResource: Boolean
|
isFirstResource: Boolean
|
||||||
): Boolean {
|
): Boolean {
|
||||||
imageView.gone()
|
imageView.gone()
|
||||||
@@ -58,10 +58,10 @@ class RssArticlesAdapter2(context: Context, callBack: CallBack) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onResourceReady(
|
override fun onResourceReady(
|
||||||
resource: Drawable?,
|
resource: Drawable,
|
||||||
model: Any?,
|
model: Any,
|
||||||
target: Target<Drawable>?,
|
target: Target<Drawable>?,
|
||||||
dataSource: DataSource?,
|
dataSource: DataSource,
|
||||||
isFirstResource: Boolean
|
isFirstResource: Boolean
|
||||||
): Boolean {
|
): Boolean {
|
||||||
imageView.visible()
|
imageView.visible()
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ class RssFavoritesAdapter(context: Context, val callBack: CallBack) :
|
|||||||
override fun onLoadFailed(
|
override fun onLoadFailed(
|
||||||
e: GlideException?,
|
e: GlideException?,
|
||||||
model: Any?,
|
model: Any?,
|
||||||
target: Target<Drawable>?,
|
target: Target<Drawable>,
|
||||||
isFirstResource: Boolean
|
isFirstResource: Boolean
|
||||||
): Boolean {
|
): Boolean {
|
||||||
imageView.gone()
|
imageView.gone()
|
||||||
@@ -53,10 +53,10 @@ class RssFavoritesAdapter(context: Context, val callBack: CallBack) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onResourceReady(
|
override fun onResourceReady(
|
||||||
resource: Drawable?,
|
resource: Drawable,
|
||||||
model: Any?,
|
model: Any,
|
||||||
target: Target<Drawable>?,
|
target: Target<Drawable>?,
|
||||||
dataSource: DataSource?,
|
dataSource: DataSource,
|
||||||
isFirstResource: Boolean
|
isFirstResource: Boolean
|
||||||
): Boolean {
|
): Boolean {
|
||||||
imageView.visible()
|
imageView.visible()
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
package io.legado.app.ui.widget.image
|
package io.legado.app.ui.widget.image
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.*
|
import android.graphics.Canvas
|
||||||
|
import android.graphics.Color
|
||||||
|
import android.graphics.Paint
|
||||||
|
import android.graphics.Path
|
||||||
|
import android.graphics.Typeface
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.text.TextPaint
|
import android.text.TextPaint
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
@@ -150,7 +154,7 @@ class CoverImageView @JvmOverloads constructor(
|
|||||||
override fun onLoadFailed(
|
override fun onLoadFailed(
|
||||||
e: GlideException?,
|
e: GlideException?,
|
||||||
model: Any?,
|
model: Any?,
|
||||||
target: Target<Drawable>?,
|
target: Target<Drawable>,
|
||||||
isFirstResource: Boolean
|
isFirstResource: Boolean
|
||||||
): Boolean {
|
): Boolean {
|
||||||
defaultCover = true
|
defaultCover = true
|
||||||
@@ -158,10 +162,10 @@ class CoverImageView @JvmOverloads constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onResourceReady(
|
override fun onResourceReady(
|
||||||
resource: Drawable?,
|
resource: Drawable,
|
||||||
model: Any?,
|
model: Any,
|
||||||
target: Target<Drawable>?,
|
target: Target<Drawable>?,
|
||||||
dataSource: DataSource?,
|
dataSource: DataSource,
|
||||||
isFirstResource: Boolean
|
isFirstResource: Boolean
|
||||||
): Boolean {
|
): Boolean {
|
||||||
defaultCover = false
|
defaultCover = false
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import android.os.ParcelFileDescriptor
|
|||||||
import android.system.ErrnoException
|
import android.system.ErrnoException
|
||||||
import android.system.Os
|
import android.system.Os
|
||||||
import android.system.OsConstants
|
import android.system.OsConstants
|
||||||
import android.system.OsConstants.S_IFDIR
|
|
||||||
import android.system.OsConstants.S_ISDIR
|
import android.system.OsConstants.S_ISDIR
|
||||||
import io.legado.app.lib.icu4j.CharsetDetector
|
import io.legado.app.lib.icu4j.CharsetDetector
|
||||||
import me.zhanghai.android.libarchive.Archive
|
import me.zhanghai.android.libarchive.Archive
|
||||||
@@ -231,8 +230,9 @@ object LibArchiveUtils {
|
|||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var entry = Archive.readNextHeader(archive)
|
var entry: Long
|
||||||
while (entry != 0L) {
|
|
||||||
|
while (Archive.readNextHeader(archive).also { entry = it } != 0L) {
|
||||||
val entryName =
|
val entryName =
|
||||||
getEntryString(ArchiveEntry.pathnameUtf8(entry), ArchiveEntry.pathname(entry))
|
getEntryString(ArchiveEntry.pathnameUtf8(entry), ArchiveEntry.pathname(entry))
|
||||||
?: continue
|
?: continue
|
||||||
@@ -243,11 +243,10 @@ object LibArchiveUtils {
|
|||||||
val entryStat = ArchiveEntry.stat(entry)
|
val entryStat = ArchiveEntry.stat(entry)
|
||||||
|
|
||||||
//判断是否是文件夹
|
//判断是否是文件夹
|
||||||
if (S_ISDIR(entryStat.stMode)) {
|
if (entryStat.isDir()) {
|
||||||
if (!entryFile.exists()) {
|
if (!entryFile.exists()) {
|
||||||
entryFile.mkdirs()
|
entryFile.mkdirs()
|
||||||
}
|
}
|
||||||
entry = Archive.readNextHeader(archive)
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -268,8 +267,6 @@ object LibArchiveUtils {
|
|||||||
files.add(entryFile)
|
files.add(entryFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
entry = Archive.readNextHeader(archive)
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
@@ -287,8 +284,8 @@ object LibArchiveUtils {
|
|||||||
fun getByteArrayContent(inputStream: InputStream, path: String): ByteArray? {
|
fun getByteArrayContent(inputStream: InputStream, path: String): ByteArray? {
|
||||||
val archive = openArchive(inputStream)
|
val archive = openArchive(inputStream)
|
||||||
try {
|
try {
|
||||||
var entry = Archive.readNextHeader(archive)
|
var entry: Long
|
||||||
while (entry != 0L) {
|
while (Archive.readNextHeader(archive).also { entry = it } != 0L) {
|
||||||
val entryName =
|
val entryName =
|
||||||
getEntryString(ArchiveEntry.pathnameUtf8(entry), ArchiveEntry.pathname(entry))
|
getEntryString(ArchiveEntry.pathnameUtf8(entry), ArchiveEntry.pathname(entry))
|
||||||
?: continue
|
?: continue
|
||||||
@@ -296,8 +293,7 @@ object LibArchiveUtils {
|
|||||||
val entryStat = ArchiveEntry.stat(entry)
|
val entryStat = ArchiveEntry.stat(entry)
|
||||||
|
|
||||||
//判断是否是文件夹
|
//判断是否是文件夹
|
||||||
if (S_ISDIR(entryStat.stMode)) {
|
if (entryStat.isDir()) {
|
||||||
entry = Archive.readNextHeader(archive)
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -315,7 +311,6 @@ object LibArchiveUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
entry = Archive.readNextHeader(archive)
|
|
||||||
|
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
@@ -331,22 +326,19 @@ object LibArchiveUtils {
|
|||||||
): List<String> {
|
): List<String> {
|
||||||
val fileNames = mutableListOf<String>()
|
val fileNames = mutableListOf<String>()
|
||||||
try {
|
try {
|
||||||
//Archive.readOpenFd(archive, pfd.fd, 8192)
|
|
||||||
|
|
||||||
var entry = Archive.readNextHeader(archive)
|
|
||||||
//val formatName: String = newStringFromBytes(Archive.formatName(archive))
|
var entry: Long
|
||||||
while (entry != 0L) {
|
|
||||||
|
while (Archive.readNextHeader(archive).also { entry = it } != 0L) {
|
||||||
val fileName =
|
val fileName =
|
||||||
getEntryString(ArchiveEntry.pathnameUtf8(entry), ArchiveEntry.pathname(entry))
|
getEntryString(ArchiveEntry.pathnameUtf8(entry), ArchiveEntry.pathname(entry))
|
||||||
?: continue
|
?: continue
|
||||||
|
|
||||||
|
|
||||||
val entryStat = ArchiveEntry.stat(entry)
|
val entryStat = ArchiveEntry.stat(entry)
|
||||||
val fileType = entryStat.stMode and S_IFDIR
|
|
||||||
|
|
||||||
|
if (entryStat.isDir()) {
|
||||||
if (S_ISDIR(entryStat.stMode)) {
|
|
||||||
entry = Archive.readNextHeader(archive)
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -363,6 +355,7 @@ object LibArchiveUtils {
|
|||||||
return fileNames
|
return fileNames
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun ArchiveEntry.StructStat.isDir() = S_ISDIR(this.stMode)
|
||||||
|
|
||||||
private fun getEntryString(utf8: String?, bytes: ByteArray?): String? {
|
private fun getEntryString(utf8: String?, bytes: ByteArray?): String? {
|
||||||
return utf8 ?: newStringFromBytes(bytes)
|
return utf8 ?: newStringFromBytes(bytes)
|
||||||
|
|||||||
@@ -1129,7 +1129,5 @@
|
|||||||
<string name="open_book_info_by_click_title">点击书名打开详情</string>
|
<string name="open_book_info_by_click_title">点击书名打开详情</string>
|
||||||
<string name="export_wait">等待导出</string>
|
<string name="export_wait">等待导出</string>
|
||||||
<string name="default_home_page">默认主页</string>
|
<string name="default_home_page">默认主页</string>
|
||||||
<string name="use_lib_archive">Use LibArchive</string>
|
|
||||||
<string name="pref_use_lib_archive_summary">Using libarchive to extract files, it supports extracting RAR5.</string>
|
|
||||||
<string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
|
<string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1132,7 +1132,5 @@
|
|||||||
<string name="open_book_info_by_click_title">点击书名打开详情</string>
|
<string name="open_book_info_by_click_title">点击书名打开详情</string>
|
||||||
<string name="export_wait">等待导出</string>
|
<string name="export_wait">等待导出</string>
|
||||||
<string name="default_home_page">默认主页</string>
|
<string name="default_home_page">默认主页</string>
|
||||||
<string name="use_lib_archive">Use LibArchive</string>
|
|
||||||
<string name="pref_use_lib_archive_summary">Using libarchive to extract files, it supports extracting RAR5.</string>
|
|
||||||
<string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
|
<string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1132,7 +1132,5 @@
|
|||||||
<string name="open_book_info_by_click_title">点击书名打开详情</string>
|
<string name="open_book_info_by_click_title">点击书名打开详情</string>
|
||||||
<string name="export_wait">等待导出</string>
|
<string name="export_wait">等待导出</string>
|
||||||
<string name="default_home_page">默认主页</string>
|
<string name="default_home_page">默认主页</string>
|
||||||
<string name="use_lib_archive">Use LibArchive</string>
|
|
||||||
<string name="pref_use_lib_archive_summary">Using libarchive to extract files, it supports extracting RAR5.</string>
|
|
||||||
<string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
|
<string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1127,7 +1127,5 @@ Còn </string>
|
|||||||
<string name="change_source_delay">换源间隔</string>
|
<string name="change_source_delay">换源间隔</string>
|
||||||
<string name="open_book_info_by_click_title">点击书名打开详情</string>
|
<string name="open_book_info_by_click_title">点击书名打开详情</string>
|
||||||
<string name="export_wait">等待导出</string>
|
<string name="export_wait">等待导出</string>
|
||||||
<string name="use_lib_archive">Use LibArchive</string>
|
|
||||||
<string name="pref_use_lib_archive_summary">Using libarchive to extract files, it supports extracting RAR5.</string>
|
|
||||||
<string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
|
<string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1128,7 +1128,5 @@
|
|||||||
<string name="change_source_delay">换源间隔</string>
|
<string name="change_source_delay">换源间隔</string>
|
||||||
<string name="open_book_info_by_click_title">点击书名打开详情</string>
|
<string name="open_book_info_by_click_title">点击书名打开详情</string>
|
||||||
<string name="export_wait">等待导出</string>
|
<string name="export_wait">等待导出</string>
|
||||||
<string name="use_lib_archive">使用LibArchive</string>
|
|
||||||
<string name="pref_use_lib_archive_summary">使用libarchive解壓檔案,支持解壓RAR5。</string>
|
|
||||||
<string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
|
<string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1130,7 +1130,5 @@
|
|||||||
<string name="change_source_delay">换源间隔</string>
|
<string name="change_source_delay">换源间隔</string>
|
||||||
<string name="open_book_info_by_click_title">点击书名打开详情</string>
|
<string name="open_book_info_by_click_title">点击书名打开详情</string>
|
||||||
<string name="export_wait">等待导出</string>
|
<string name="export_wait">等待导出</string>
|
||||||
<string name="use_lib_archive">使用LibArchive</string>
|
|
||||||
<string name="pref_use_lib_archive_summary">使用libarchive解壓檔案,支持解壓RAR5。</string>
|
|
||||||
<string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
|
<string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1130,7 +1130,5 @@
|
|||||||
<string name="change_source_delay">换源间隔</string>
|
<string name="change_source_delay">换源间隔</string>
|
||||||
<string name="open_book_info_by_click_title">点击书名打开详情</string>
|
<string name="open_book_info_by_click_title">点击书名打开详情</string>
|
||||||
<string name="export_wait">等待导出</string>
|
<string name="export_wait">等待导出</string>
|
||||||
<string name="use_lib_archive">使用LibArchive</string>
|
|
||||||
<string name="pref_use_lib_archive_summary">使用libarchive解压文件,支持解压RAR5。</string>
|
|
||||||
<string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
|
<string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1132,7 +1132,5 @@
|
|||||||
<string name="open_book_info_by_click_title">点击书名打开详情</string>
|
<string name="open_book_info_by_click_title">点击书名打开详情</string>
|
||||||
<string name="export_wait">等待导出</string>
|
<string name="export_wait">等待导出</string>
|
||||||
<string name="default_home_page">默认主页</string>
|
<string name="default_home_page">默认主页</string>
|
||||||
<string name="use_lib_archive">Use LibArchive</string>
|
|
||||||
<string name="pref_use_lib_archive_summary">Using libarchive to extract files, it supports extracting RAR5.</string>
|
|
||||||
<string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
|
<string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
Reference in New Issue
Block a user