diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 9813dc3d8..c88ae23e2 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -146,36 +146,13 @@ -keep class **.data.entities.**{*;} # hutool-core hutool-crypto -keep class -!cn.hutool.core.io.**, -!cn.hutool.core.img.**, -!cn.hutool.core.map.**, -!cn.hutool.core.date.**, -!cn.hutool.core.bean.**, -!cn.hutool.core.text.**, -!cn.hutool.core.swing.**, -!cn.hutool.core.clone.**, -!cn.hutool.core.thread.**, -!cn.hutool.core.stream.**, -!cn.hutool.core.builder.**, -!cn.hutool.core.convert.**, -!cn.hutool.core.compiler.**, -!cn.hutool.core.annotation.**, -!cn.hutool.core.comparator.**, -!cn.hutool.core.lang.ansi.**, -!cn.hutool.core.lang.reflect.**, -!cn.hutool.core.lang.intern.**, -!cn.hutool.core.lang.loader.**, -!cn.hutool.core.lang.mutable.**, -!cn.hutool.core.lang.tree.**, -!cn.hutool.core.lang.JarClassLoader, -!cn.hutool.core.lang.ResourceClassLoader, -!cn.hutool.core.lang.Singleton, !cn.hutool.core.util.RuntimeUtil, !cn.hutool.core.util.ClassLoaderUtil, !cn.hutool.core.util.ReflectUtil, !cn.hutool.core.util.SerializeUtil, !cn.hutool.core.util.ClassUtil, -cn.hutool.core.**{*;} +cn.hutool.core.codec.**, +cn.hutool.core.util.**{*;} -keep class cn.hutool.crypto.**{*;} -dontwarn cn.hutool.** # 缓存 Cookie diff --git a/app/src/main/java/io/legado/app/help/CacheManager.kt b/app/src/main/java/io/legado/app/help/CacheManager.kt index 3ae32e2bc..366174567 100644 --- a/app/src/main/java/io/legado/app/help/CacheManager.kt +++ b/app/src/main/java/io/legado/app/help/CacheManager.kt @@ -1,5 +1,6 @@ package io.legado.app.help +import androidx.annotation.Keep import androidx.collection.LruCache import io.legado.app.data.appDb import io.legado.app.data.entities.Cache @@ -7,6 +8,7 @@ import io.legado.app.model.analyzeRule.QueryTTF import io.legado.app.utils.ACache import io.legado.app.utils.memorySize +@Keep @Suppress("unused") object CacheManager { diff --git a/app/src/main/java/io/legado/app/help/JsEncodeUtils.kt b/app/src/main/java/io/legado/app/help/JsEncodeUtils.kt index 3f3e0e3f8..a76ef2f76 100644 --- a/app/src/main/java/io/legado/app/help/JsEncodeUtils.kt +++ b/app/src/main/java/io/legado/app/help/JsEncodeUtils.kt @@ -13,6 +13,7 @@ import io.legado.app.utils.MD5Utils * js加解密扩展类, 在js中通过java变量调用 * 添加方法,请更新文档/legado/app/src/main/assets/help/JsHelp.md */ +@Suppress("unused") interface JsEncodeUtils { fun md5Encode(str: String): String { diff --git a/app/src/main/java/io/legado/app/help/JsExtensions.kt b/app/src/main/java/io/legado/app/help/JsExtensions.kt index fd689c062..9059a1457 100644 --- a/app/src/main/java/io/legado/app/help/JsExtensions.kt +++ b/app/src/main/java/io/legado/app/help/JsExtensions.kt @@ -12,6 +12,7 @@ import io.legado.app.constant.AppLog import io.legado.app.constant.AppPattern import io.legado.app.data.entities.BaseSource import io.legado.app.exception.NoStackTraceException +import io.legado.app.help.config.AppConfig import io.legado.app.help.http.BackstageWebView import io.legado.app.help.http.CookieManager.cookieJarHeader import io.legado.app.help.http.CookieStore @@ -41,6 +42,7 @@ import io.legado.app.utils.isAbsUrl import io.legado.app.utils.isContentScheme import io.legado.app.utils.isUri import io.legado.app.utils.longToastOnUi +import io.legado.app.utils.mapParallel import io.legado.app.utils.readBytes import io.legado.app.utils.readText import io.legado.app.utils.stackTraceStr @@ -48,7 +50,9 @@ import io.legado.app.utils.startActivity import io.legado.app.utils.toStringArray import io.legado.app.utils.toastOnUi import kotlinx.coroutines.Dispatchers.IO -import kotlinx.coroutines.async +import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.toList import kotlinx.coroutines.runBlocking import okio.use import org.jsoup.Connection @@ -114,19 +118,12 @@ interface JsExtensions : JsEncodeUtils { /** * 并发访问网络 */ - fun ajaxAll(urlList: Array): Array { + fun ajaxAll(urlList: Array): Array { return runBlocking(context) { - val asyncArray = Array(urlList.size) { - async(IO) { - val url = urlList[it] - val analyzeUrl = AnalyzeUrl(url, source = getSource()) - analyzeUrl.getStrResponseAwait() - } - } - val resArray = Array(urlList.size) { - asyncArray[it].await() - } - resArray + urlList.asFlow().mapParallel(AppConfig.threadCount) { url -> + val analyzeUrl = AnalyzeUrl(url, source = getSource()) + analyzeUrl.getStrResponseAwait() + }.flowOn(IO).toList().toTypedArray() } } diff --git a/app/src/main/java/io/legado/app/help/http/CookieStore.kt b/app/src/main/java/io/legado/app/help/http/CookieStore.kt index 88a52e86c..63ee8a943 100644 --- a/app/src/main/java/io/legado/app/help/http/CookieStore.kt +++ b/app/src/main/java/io/legado/app/help/http/CookieStore.kt @@ -3,6 +3,7 @@ package io.legado.app.help.http import android.text.TextUtils +import androidx.annotation.Keep import io.legado.app.constant.AppLog import io.legado.app.constant.AppPattern.equalsRegex import io.legado.app.constant.AppPattern.semicolonRegex @@ -15,6 +16,7 @@ import io.legado.app.help.http.api.CookieManagerInterface import io.legado.app.utils.NetworkUtils import io.legado.app.utils.removeCookie +@Keep object CookieStore : CookieManagerInterface { /** diff --git a/app/src/main/java/io/legado/app/help/http/HttpHelper.kt b/app/src/main/java/io/legado/app/help/http/HttpHelper.kt index 37fd6401a..4cd581a3d 100644 --- a/app/src/main/java/io/legado/app/help/http/HttpHelper.kt +++ b/app/src/main/java/io/legado/app/help/http/HttpHelper.kt @@ -13,7 +13,6 @@ import okhttp3.Cookie import okhttp3.CookieJar import okhttp3.Credentials import okhttp3.HttpUrl -import okhttp3.Interceptor import okhttp3.OkHttpClient import java.net.InetSocketAddress import java.net.Proxy @@ -68,7 +67,7 @@ val okHttpClient: OkHttpClient by lazy { .followRedirects(true) .followSslRedirects(true) .addInterceptor(OkHttpExceptionInterceptor) - .addInterceptor(Interceptor { chain -> + .addInterceptor { chain -> val request = chain.request() val builder = request.newBuilder() if (request.header(AppConst.UA_NAME) == null) { @@ -80,7 +79,7 @@ val okHttpClient: OkHttpClient by lazy { builder.addHeader("Connection", "Keep-Alive") builder.addHeader("Cache-Control", "no-cache") chain.proceed(builder.build()) - }) + } .addNetworkInterceptor { chain -> var request = chain.request() val enableCookieJar = request.header(cookieJarHeader) != null diff --git a/app/src/main/java/io/legado/app/help/http/StrResponse.kt b/app/src/main/java/io/legado/app/help/http/StrResponse.kt index 0e11ea3db..46fed6291 100644 --- a/app/src/main/java/io/legado/app/help/http/StrResponse.kt +++ b/app/src/main/java/io/legado/app/help/http/StrResponse.kt @@ -1,11 +1,17 @@ package io.legado.app.help.http -import okhttp3.* +import androidx.annotation.Keep +import okhttp3.Headers +import okhttp3.Protocol +import okhttp3.Request +import okhttp3.Response import okhttp3.Response.Builder +import okhttp3.ResponseBody /** * An HTTP response. */ +@Keep @Suppress("unused", "MemberVisibilityCanBePrivate") class StrResponse { var raw: Response