From d8909ad676d19dc32a6f5a7ebbb5543eb836ad0e Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Sat, 17 Feb 2024 09:50:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E5=88=A4=E6=96=ADFr?= =?UTF-8?q?pclib=E6=98=AF=E5=90=A6=E5=B7=B2=E7=BB=8F=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=20=E4=BF=AE=E5=A4=8D=EF=BC=9AFrpclib=E6=9C=AA?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E6=97=B6=EF=BC=8C=E8=87=AA=E5=8A=A8=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=B7=BB=E5=8A=A0=E5=90=AF=E5=81=9Cfrpc=20app?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E9=87=8D=E5=90=AF=20#402?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/idormy/sms/forwarder/App.kt | 6 ++++++ .../idormy/sms/forwarder/activity/MainActivity.kt | 3 +-- .../sms/forwarder/adapter/FrpcPagingAdapter.kt | 3 ++- .../com/idormy/sms/forwarder/database/entity/Frpc.kt | 3 ++- .../idormy/sms/forwarder/fragment/AboutFragment.kt | 4 ++-- .../idormy/sms/forwarder/fragment/FrpcFragment.kt | 12 ++++++++++++ .../sms/forwarder/service/ForegroundService.kt | 9 ++++----- .../idormy/sms/forwarder/utils/SmsCommandUtils.kt | 3 +-- .../com/idormy/sms/forwarder/workers/ActionWorker.kt | 3 +-- 9 files changed, 31 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/idormy/sms/forwarder/App.kt b/app/src/main/java/com/idormy/sms/forwarder/App.kt index 0aa5d1b0..cf2946f3 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/App.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/App.kt @@ -36,6 +36,8 @@ import com.idormy.sms.forwarder.utils.sdkinit.XBasicLibInit import com.idormy.sms.forwarder.utils.sdkinit.XUpdateInit import com.idormy.sms.forwarder.utils.tinker.TinkerLoadLibrary import com.king.location.LocationClient +import com.xuexiang.xutil.file.FileUtils +import frpclib.Frpclib import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable @@ -91,6 +93,9 @@ class App : Application(), CactusCallback, Configuration.Provider by Core { val LocationClient by lazy { LocationClient(context) } val Geocoder by lazy { Geocoder(context) } val DateFormat by lazy { SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()) } + + //Frpclib是否已经初始化 + var FrpclibInited = false } override fun attachBaseContext(base: Context) { @@ -138,6 +143,7 @@ class App : Application(), CactusCallback, Configuration.Provider by Core { if (soFile.exists()) { try { TinkerLoadLibrary.installNativeLibraryPath(classLoader, soFile) + FrpclibInited = FileUtils.isFileExists(filesDir.absolutePath + "/libs/libgojni.so") && FRPC_LIB_VERSION == Frpclib.getVersion() } catch (throwable: Throwable) { Log.e("APP", throwable.message.toString()) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/activity/MainActivity.kt b/app/src/main/java/com/idormy/sms/forwarder/activity/MainActivity.kt index 8bfae38c..71e19fdc 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/activity/MainActivity.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/activity/MainActivity.kt @@ -63,7 +63,6 @@ import com.yarolegovich.slidingrootnav.SlideGravity import com.yarolegovich.slidingrootnav.SlidingRootNav import com.yarolegovich.slidingrootnav.SlidingRootNavBuilder import com.yarolegovich.slidingrootnav.callback.DragStateListener -import frpclib.Frpclib import java.io.File @Suppress("PrivatePropertyName", "unused", "DEPRECATION") @@ -279,7 +278,7 @@ class MainActivity : BaseActivity(), DrawerAdapter.OnItemS POS_SERVER -> openNewPage(ServerFragment::class.java) POS_CLIENT -> openNewPage(ClientFragment::class.java) POS_FRPC -> { - if (FileUtils.isFileExists(filesDir.absolutePath + "/libs/libgojni.so") && FRPC_LIB_VERSION == Frpclib.getVersion()) { + if (App.FrpclibInited) { openNewPage(FrpcFragment::class.java) return } diff --git a/app/src/main/java/com/idormy/sms/forwarder/adapter/FrpcPagingAdapter.kt b/app/src/main/java/com/idormy/sms/forwarder/adapter/FrpcPagingAdapter.kt index 22e10692..63dfebb0 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/adapter/FrpcPagingAdapter.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/adapter/FrpcPagingAdapter.kt @@ -8,6 +8,7 @@ import android.view.ViewGroup import androidx.paging.PagingDataAdapter import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView +import com.idormy.sms.forwarder.App import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.adapter.FrpcPagingAdapter.MyViewHolder import com.idormy.sms.forwarder.database.entity.Frpc @@ -31,7 +32,7 @@ class FrpcPagingAdapter(private val itemClickListener: OnItemClickListener) : Pa holder.binding.tvUid.text = "UID:${item.uid}" holder.binding.tvName.text = item.name - if (item.connecting || Frpclib.isRunning(item.uid)) { + if (item.connecting || (App.FrpclibInited && Frpclib.isRunning(item.uid))) { holder.binding.ivPlay.setImageResource(R.drawable.ic_stop) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { holder.binding.ivPlay.imageTintList = getColors(R.color.colorStop) diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/entity/Frpc.kt b/app/src/main/java/com/idormy/sms/forwarder/database/entity/Frpc.kt index 77593b0d..bb67809c 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/entity/Frpc.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/entity/Frpc.kt @@ -5,6 +5,7 @@ import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.Ignore import androidx.room.PrimaryKey +import com.idormy.sms.forwarder.App import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.utils.STATUS_OFF import com.idormy.sms.forwarder.utils.STATUS_ON @@ -34,6 +35,6 @@ data class Frpc( } val status: Int - get() = if (connecting || Frpclib.isRunning(uid)) STATUS_ON else STATUS_OFF + get() = if (connecting || (App.FrpclibInited && Frpclib.isRunning(uid))) STATUS_ON else STATUS_OFF } \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/AboutFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/AboutFragment.kt index afabe562..d7d17bd6 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/AboutFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/AboutFragment.kt @@ -3,6 +3,7 @@ package com.idormy.sms.forwarder.fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import com.idormy.sms.forwarder.App import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.core.BaseFragment import com.idormy.sms.forwarder.core.webview.AgentWebActivity @@ -25,7 +26,6 @@ import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog import com.xuexiang.xui.widget.textview.supertextview.SuperTextView -import com.xuexiang.xutil.file.FileUtils import frpclib.Frpclib import java.io.File import java.text.SimpleDateFormat @@ -55,7 +55,7 @@ class AboutFragment : BaseFragment(), SuperTextView.OnSup binding!!.menuVersion.setLeftString(String.format(resources.getString(R.string.about_app_version), AppUtils.getAppVersionName())) binding!!.menuCache.setLeftString(String.format(resources.getString(R.string.about_cache_size), CacheUtils.getTotalCacheSize(requireContext()))) - if (FileUtils.isFileExists(context?.filesDir?.absolutePath + "/libs/libgojni.so")) { + if (App.FrpclibInited) { binding!!.menuFrpc.setLeftString(String.format(resources.getString(R.string.about_frpc_version), Frpclib.getVersion())) binding!!.menuFrpc.visibility = View.VISIBLE } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/FrpcFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/FrpcFragment.kt index 84ac0d92..e697e6a8 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/FrpcFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/FrpcFragment.kt @@ -9,6 +9,7 @@ import androidx.fragment.app.viewModels import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.RecyclerView.RecycledViewPool import com.alibaba.android.vlayout.VirtualLayoutManager +import com.idormy.sms.forwarder.App import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.adapter.FrpcPagingAdapter import com.idormy.sms.forwarder.core.BaseFragment @@ -21,6 +22,7 @@ import com.idormy.sms.forwarder.utils.EVENT_FRPC_DELETE_CONFIG import com.idormy.sms.forwarder.utils.EVENT_FRPC_RUNNING_ERROR import com.idormy.sms.forwarder.utils.EVENT_FRPC_RUNNING_SUCCESS import com.idormy.sms.forwarder.utils.EVENT_FRPC_UPDATE_CONFIG +import com.idormy.sms.forwarder.utils.FRPC_LIB_VERSION import com.idormy.sms.forwarder.utils.FrpcUtils import com.idormy.sms.forwarder.utils.INTENT_FRPC_APPLY_FILE import com.idormy.sms.forwarder.utils.INTENT_FRPC_EDIT_FILE @@ -144,6 +146,11 @@ class FrpcFragment : BaseFragment(), FrpcPagingAdapter.On } R.id.iv_play -> { + if (!App.FrpclibInited) { + XToastUtils.error(String.format(getString(R.string.frpclib_download_title), FRPC_LIB_VERSION)) + return + } + if (!ForegroundService.isRunning) { val serviceIntent = Intent(requireContext(), ForegroundService::class.java) serviceIntent.action = "START" @@ -189,6 +196,11 @@ class FrpcFragment : BaseFragment(), FrpcPagingAdapter.On } else -> { + if (!App.FrpclibInited) { + XToastUtils.error(String.format(getString(R.string.frpclib_download_title), FRPC_LIB_VERSION)) + return + } + //编辑或删除需要先停止客户端 if (Frpclib.isRunning(item.uid)) { XToastUtils.warning(R.string.tipServiceRunning) diff --git a/app/src/main/java/com/idormy/sms/forwarder/service/ForegroundService.kt b/app/src/main/java/com/idormy/sms/forwarder/service/ForegroundService.kt index f2682677..586ebb5e 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/service/ForegroundService.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/service/ForegroundService.kt @@ -12,6 +12,7 @@ import androidx.core.app.NotificationCompat import androidx.lifecycle.Observer import androidx.work.OneTimeWorkRequestBuilder import androidx.work.WorkManager +import com.idormy.sms.forwarder.App import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.activity.MainActivity import com.idormy.sms.forwarder.core.Core @@ -20,7 +21,6 @@ import com.idormy.sms.forwarder.utils.task.CronJobScheduler import com.idormy.sms.forwarder.workers.LoadAppListWorker import com.jeremyliao.liveeventbus.LiveEventBus import com.xuexiang.xutil.XUtil -import com.xuexiang.xutil.file.FileUtils import frpclib.Frpclib import io.reactivex.Single import io.reactivex.SingleObserver @@ -41,9 +41,8 @@ class ForegroundService : Service() { private val compositeDisposable = CompositeDisposable() private val frpcObserver = Observer { uid: String -> - if (Frpclib.isRunning(uid)) { - return@Observer - } + if (!App.FrpclibInited || Frpclib.isRunning(uid)) return@Observer + Core.frpc.get(uid).flatMap { (uid1, _, config) -> val error = Frpclib.runContent(uid1, config) Single.just(error) @@ -147,7 +146,7 @@ class ForegroundService : Service() { } //启动 Frpc - if (FileUtils.isFileExists(filesDir.absolutePath + "/libs/libgojni.so")) { + if (App.FrpclibInited) { //监听Frpc启动指令 LiveEventBus.get(INTENT_FRPC_APPLY_FILE, String::class.java).observeStickyForever(frpcObserver) //自启动的Frpc diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/SmsCommandUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/SmsCommandUtils.kt index b2b27cf9..9de86382 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/SmsCommandUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/SmsCommandUtils.kt @@ -13,7 +13,6 @@ import com.idormy.sms.forwarder.server.model.SmsSendData import com.idormy.sms.forwarder.service.HttpServerService import com.xuexiang.xrouter.utils.TextUtils import com.xuexiang.xutil.XUtil -import com.xuexiang.xutil.file.FileUtils import com.xuexiang.xutil.system.DeviceUtils import frpclib.Frpclib import kotlinx.coroutines.Dispatchers @@ -43,7 +42,7 @@ class SmsCommandUtils { val param = if (cmdList.count() > 2) cmdList[2] else "" when (function) { "frpc" -> { - if (!FileUtils.isFileExists(context.filesDir?.absolutePath + "/libs/libgojni.so")) { + if (!App.FrpclibInited) { Log.d(TAG, "还未下载Frpc库") return false } diff --git a/app/src/main/java/com/idormy/sms/forwarder/workers/ActionWorker.kt b/app/src/main/java/com/idormy/sms/forwarder/workers/ActionWorker.kt index 1d8d971c..d79766e8 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/workers/ActionWorker.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/workers/ActionWorker.kt @@ -48,7 +48,6 @@ import com.idormy.sms.forwarder.utils.TaskWorker import com.jeremyliao.liveeventbus.LiveEventBus import com.xuexiang.xrouter.utils.TextUtils import com.xuexiang.xutil.XUtil -import com.xuexiang.xutil.file.FileUtils import com.xuexiang.xutil.resource.ResUtils.getString import frpclib.Frpclib import java.util.Calendar @@ -193,7 +192,7 @@ class ActionWorker(context: Context, params: WorkerParameters) : CoroutineWorker } TASK_ACTION_FRPC -> { - if (!FileUtils.isFileExists(App.context.filesDir?.absolutePath + "/libs/libgojni.so")) { + if (!App.FrpclibInited) { writeLog("还未下载Frpc库") continue }