6.7.0 - Alpha2 - 修复 ErrorDialogActivity 可能无法正常启动的问题 (issue #414, #340); 修复错误报告页面复制详细信息功能失效的问题

This commit is contained in:
SuperMonster003
2025-06-28 19:53:56 +08:00
parent 65ebc8311f
commit 23f84d935d
21 changed files with 279 additions and 151 deletions

View File

@@ -3,6 +3,7 @@ package org.autojs.autojs.runtime.api.augment.ocr
import org.autojs.autojs.annotation.RhinoRuntimeFunctionInterface
import org.autojs.autojs.core.image.ImageWrapper
import org.autojs.autojs.extension.AnyExtensions.isJsNullish
import org.autojs.autojs.extension.AnyExtensions.isJsString
import org.autojs.autojs.extension.AnyExtensions.jsBrief
import org.autojs.autojs.extension.AnyExtensions.jsSpecies
import org.autojs.autojs.extension.ArrayExtensions.toNativeArray
@@ -14,6 +15,7 @@ import org.autojs.autojs.runtime.api.augment.Invokable
import org.autojs.autojs.runtime.api.augment.images.Images
import org.autojs.autojs.runtime.exception.WrappedIllegalArgumentException
import org.autojs.autojs.runtime.exception.ShouldNeverHappenException
import org.autojs.autojs.util.RhinoUtils
import org.autojs.autojs.util.RhinoUtils.UNDEFINED
import org.autojs.autojs.util.RhinoUtils.newNativeArray
import org.autojs.autojs.util.RhinoUtils.newNativeObject
@@ -58,13 +60,12 @@ class Ocr(private val scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime)
scriptRuntime.augmentedOcrMLKit -> OcrMode.MLKIT
scriptRuntime.augmentedOcrPaddle -> OcrMode.PADDLE
scriptRuntime.augmentedOcrRapid -> OcrMode.RAPID
is String -> when (mode.lowercase()) {
else -> when (RhinoUtils.coerceStringLowercase(mode, "")) {
OcrMode.MLKIT.value -> OcrMode.MLKIT
OcrMode.PADDLE.value -> OcrMode.PADDLE
OcrMode.RAPID.value -> OcrMode.RAPID
else -> null
}
else -> null
} ?: OcrMode.MLKIT.also { throw WrappedIllegalArgumentException("Unknown mode ${mode.jsSpecies()} for ocr.tap") }
return@ensureArgumentsOnlyOne UNDEFINED
}
@@ -75,7 +76,7 @@ class Ocr(private val scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime)
val (arg0, arg1, arg2) = argList
when {
arg0 is String -> {
arg0.isJsString() -> {
// @Signature
// recognizeText(imgPath: string, options?: DetectOptionsMLKit | DetectOptionsPaddle): string[];
@@ -153,7 +154,7 @@ class Ocr(private val scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime)
val (arg0, arg1, arg2) = argList
when {
arg0 is String -> {
arg0.isJsString() -> {
// @Signature
// detect(imgPath: string, options?: DetectOptionsMLKit | DetectOptionsPaddle): org.autojs.autojs.runtime.api.OcrResult[];

View File

@@ -1,12 +1,15 @@
package org.autojs.autojs.runtime.api.augment.util
import android.os.Build
import org.autojs.autojs.runtime.exception.WrappedIllegalArgumentException
import org.autojs.autojs.util.RhinoUtils.newNativeObject
object VersionCodesInfo {
// @UpTo Jan 2, 2025.
// @Updated by SuperMonster003 on Jun 26, 2025.
// @Reference https://en.wikipedia.org/wiki/Android_version_history
private val raw = mutableMapOf(
"BAKLAVA" to listOf("Android 16", "Baklava", "16", "36", "Q2, 2025"),
"BAKLAVA" to listOf("Android 16", "Baklava", "16", "36", "Jun 10, 2025"),
"VANILLA_ICE_CREAM" to listOf("Android 15", "Vanilla Ice Cream", "15", "35", "September 3, 2024"),
"UPSIDE_DOWN_CAKE" to listOf("Android 14", "Upside Down Cake", "14", "34", "October 4, 2023"),
"TIRAMISU" to listOf("Android 13", "Tiramisu", "13", "33", "August 15, 2022"),
@@ -57,4 +60,19 @@ object VersionCodesInfo {
}
}
@JvmStatic
@JvmOverloads
fun briefOfVersionInt(versionInt: Int, isCompat: Boolean = false): String {
return list.find { runCatching { it.apiLevel.toInt() }.getOrNull() == versionInt }?.let { info ->
var result = "${if (isCompat) "API Lv." else "Android API Level "}${info.apiLevel}"
info.releaseName.takeIf { it.isNotBlank() }?.let { result += " ($it)" }
info.internalCodename.takeIf { it.isNotBlank() }?.let { result += " [$it]" }
result
} ?: throw WrappedIllegalArgumentException("$versionInt is an invalid or unknown version int")
}
@JvmStatic
@JvmOverloads
fun briefOfCurrentVersionInt(isCompat: Boolean = false) = briefOfVersionInt(Build.VERSION.SDK_INT, isCompat)
}

View File

@@ -2,7 +2,6 @@ package org.autojs.autojs.ui.error;
import android.content.Intent;
import android.os.Bundle;
import android.view.Window;
import com.afollestad.materialdialogs.MaterialDialog;
import org.autojs.autojs.extension.MaterialDialogExtensions;
import org.autojs.autojs.ui.BaseActivity;
@@ -21,7 +20,6 @@ public class ErrorDialogActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
// Get extras from intent
Intent intent = getIntent();

View File

@@ -1,21 +1,16 @@
package org.autojs.autojs.ui.error
import android.annotation.SuppressLint
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.util.Log
import com.afollestad.materialdialogs.MaterialDialog
import org.autojs.autojs.app.GlobalAppContext
import org.autojs.autojs.runtime.api.augment.util.VersionCodesInfo.briefOfCurrentVersionInt
import org.autojs.autojs.ui.BaseActivity
import org.autojs.autojs.ui.main.MainActivity
import org.autojs.autojs.util.ClipboardUtils
import org.autojs.autojs.util.ViewUtils
import org.autojs.autojs6.BuildConfig
import org.autojs.autojs6.R
import org.autojs.autojs6.databinding.ActivityErrorReportBinding
import java.util.*
/**
* Created by Stardust on Feb 2, 2017.
@@ -23,88 +18,62 @@ import java.util.*
*/
class ErrorReportActivity : BaseActivity() {
private lateinit var errorMessage: String
@SuppressLint("ClickableViewAccessibility")
override fun onCreate(savedInstanceState: Bundle?) {
try {
super.onCreate(savedInstanceState)
ActivityErrorReportBinding.inflate(layoutInflater).also { binding ->
setContentView(binding.root)
binding.toolbar.apply {
title = getString(R.string.text_error_report)
setSupportActionBar(this)
}
supportActionBar?.setHomeButtonEnabled(false)
super.onCreate(savedInstanceState)
val msg = buildString {
appendLine("${getString(R.string.app_name)} ${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})")
appendLine(briefOfCurrentVersionInt(true))
intent.getStringExtra("message")?.let { appendLine().appendLine(it.trimEnd()) }
intent.getStringExtra("error")?.let { appendLine().appendLine(it.trimEnd()) }
}.also { errorMessage = it }
val binding = ActivityErrorReportBinding.inflate(layoutInflater).also {
setContentView(it.root)
it.toolbar.apply {
title = getString(R.string.text_app_crashed)
setSupportActionBar(this)
}
} catch (t: Throwable) {
t.message?.let { msg ->
copyToClip(msg)
ViewUtils.showToast(this, msg)
}
Log.e(TAG, t.message ?: "", t)
exitAfter(3000)
}
}
override fun onResume() {
super.onResume()
val message = intent.getStringExtra("message")
val errorDetail = intent.getStringExtra("error")
val errorMessage = buildString {
appendLine("Version: ${BuildConfig.VERSION_CODE}")
appendLine("Android: ${Build.VERSION.SDK_INT}")
message?.let { appendLine().appendLine(it) }
errorDetail?.let { appendLine().appendLine(it) }
supportActionBar?.setHomeButtonEnabled(false)
}
MaterialDialog.Builder(this)
.title(R.string.text_app_crashed)
.content(R.string.crash_feedback)
.neutralText(R.string.text_copy_debug_info)
.neutralColorRes(R.color.dialog_button_hint)
.onNegative { _, _ ->
copyToClip(errorMessage)
exitAfter(1500)
val textView = binding.errorMessage.apply { text = msg }
val textSizeScaleDetector = ViewUtils.TextSizeScaleDetector(this, textView)
binding.errorMessageContainer.setOnTouchListener { _, event ->
when (event.pointerCount) {
2 -> false.also { textSizeScaleDetector.onTouchEvent(event) }
else -> super.onTouchEvent(event)
}
.positiveText(R.string.text_exit)
.positiveColorRes(R.color.dialog_button_failure)
.onPositive { _, _ -> exit() }
.cancelable(false)
.show()
}
}
private fun exitAfter(delay: Int) {
Timer().schedule(object : TimerTask() {
override fun run() = exit()
}, delay.toLong())
}
binding.copy.setOnClickListener { copy() }
binding.restart.setOnClickListener { restart() }
binding.exit.setOnClickListener { exit() }
private fun copyToClip(text: String) {
val clipboardManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
clipboardManager.setPrimaryClip(ClipData.newPlainText("Debug", text))
ViewUtils.showToast(this, R.string.text_already_copied_to_clip)
savedInstanceState ?: copy()
}
@Deprecated("Deprecated in Java")
@SuppressLint("MissingSuperCall")
override fun onBackPressed() = exit()
private fun copy() = ClipboardUtils.setClip(this, errorMessage)
private fun exit() = finishAffinity()
companion object {
private val TAG: String = ErrorReportActivity::class.java.simpleName
@JvmStatic
@JvmOverloads
fun test(context: Context = GlobalAppContext.get()) {
Intent(context, ErrorReportActivity::class.java)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra("message", "Test message\nSecond line")
.putExtra("error", "Test error\nSecond line")
.let { context.startActivity(it) }
private fun restart() {
val intent = packageManager.getLaunchIntentForPackage(packageName)?.apply {
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
} ?: Intent(this, MainActivity::class.java).apply {
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
}
startActivity(intent)
exit()
}
}

View File

@@ -6,9 +6,7 @@ import android.content.ClipboardManager
import android.content.res.ColorStateList
import android.os.Bundle
import android.text.SpannableStringBuilder
import android.util.TypedValue
import android.view.KeyEvent
import android.view.ScaleGestureDetector
import android.view.View
import android.widget.TextView
import com.google.android.material.floatingactionbutton.FloatingActionButton
@@ -24,11 +22,9 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import org.autojs.autojs.ui.BaseActivity
import org.autojs.autojs.util.DisplayUtils
import org.autojs.autojs.util.ViewUtils
import org.autojs.autojs6.R
import org.autojs.autojs6.databinding.ActivityDisplayScrollableContentBinding
import kotlin.math.floor
abstract class BaseDisplayContentActivity : BaseActivity() {
@@ -49,12 +45,6 @@ abstract class BaseDisplayContentActivity : BaseActivity() {
private var mIsContentLoaded = false
private val mTextUpdateMutex = Mutex()
protected val minTextSize = 4.0f
protected val maxTextSize = 72.0f
private var mLastScaleFactor = 1.0f
private var mLastTextSize = 0.0f
@SuppressLint("ClickableViewAccessibility")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -73,7 +63,7 @@ abstract class BaseDisplayContentActivity : BaseActivity() {
}
}
val scaleGestureDetector = ScaleGestureDetector(this, ScaleListener(internalTextView))
val scaleGestureDetector = ViewUtils.TextSizeScaleDetector(this, internalTextView)
val innerScrollView = binding.innerScrollView.also {
ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(it)
@@ -264,35 +254,4 @@ abstract class BaseDisplayContentActivity : BaseActivity() {
ViewUtils.showSnack(internalTextView, R.string.text_already_copied_to_clip, true)
}
// Scaling & Text Size Handling
protected inner class ScaleListener(private val textView: TextView) : ScaleGestureDetector.SimpleOnScaleGestureListener() {
override fun onScale(detector: ScaleGestureDetector): Boolean {
val currentFactor = (floor((detector.scaleFactor * 10).toDouble()) / 10).toFloat()
if (mLastTextSize <= 0) {
mLastTextSize = getTextSize()
}
if (currentFactor > 0 && mLastScaleFactor != currentFactor) {
val currentTextSize: Float = mLastTextSize + (if (currentFactor > mLastScaleFactor) 1 else -1)
mLastTextSize = currentTextSize.coerceIn(minTextSize, maxTextSize)
setTextSize(mLastTextSize)
mLastScaleFactor = currentFactor
}
return super.onScale(detector)
}
override fun onScaleEnd(detector: ScaleGestureDetector) {
mLastScaleFactor = 1.0f
super.onScaleEnd(detector)
}
fun setTextSize(size: Float) {
mLastTextSize = size
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, size)
}
fun getTextSize(): Float = DisplayUtils.pxToSp(textView.textSize)
}
}

View File

@@ -21,6 +21,7 @@ import android.util.DisplayMetrics
import android.util.TypedValue
import android.view.Gravity
import android.view.Menu
import android.view.ScaleGestureDetector
import android.view.View
import android.view.ViewGroup
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
@@ -32,6 +33,7 @@ import android.view.inputmethod.InputMethodManager
import android.widget.EditText
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.annotation.ColorInt
import androidx.annotation.IdRes
@@ -52,6 +54,7 @@ import org.autojs.autojs.core.pref.Pref
import org.autojs.autojs.theme.ThemeColorManager
import org.autojs.autojs.util.StringUtils.key
import org.autojs.autojs6.R
import kotlin.math.floor
import kotlin.math.roundToInt
/**
@@ -700,4 +703,64 @@ object ViewUtils {
}
@SuppressLint("ClickableViewAccessibility")
class TextSizeScaleDetector(context: Context, textView: TextView) :ScaleGestureDetector(context, TextSizeScaleListener(textView)) {
init {
textView.apply {
setTextIsSelectable(true)
isLongClickable = true
isFocusableInTouchMode = true
setOnTouchListener { v, event ->
this@TextSizeScaleDetector.onTouchEvent(event)
when {
event.pointerCount > 1 -> {
v.parent?.requestDisallowInterceptTouchEvent(true)
true
}
else -> false
}
}
}
}
}
// Scaling & Text Size Handling
private class TextSizeScaleListener(private val textView: TextView) : ScaleGestureDetector.SimpleOnScaleGestureListener() {
private val mMinTextSize = 4.0f
private val mMaxTextSize = 72.0f
private var mLastScaleFactor = 1.0f
private var mLastTextSize = 0.0f
override fun onScale(detector: ScaleGestureDetector): Boolean {
val currentFactor = (floor((detector.scaleFactor * 10).toDouble()) / 10).toFloat()
if (mLastTextSize <= 0) {
mLastTextSize = getTextSize()
}
if (currentFactor > 0 && mLastScaleFactor != currentFactor) {
val currentTextSize: Float = mLastTextSize + (if (currentFactor > mLastScaleFactor) 1 else -1)
mLastTextSize = currentTextSize.coerceIn(mMinTextSize, mMaxTextSize)
setTextSize(mLastTextSize)
mLastScaleFactor = currentFactor
}
return super.onScale(detector)
}
override fun onScaleEnd(detector: ScaleGestureDetector) {
mLastScaleFactor = 1.0f
super.onScaleEnd(detector)
}
fun setTextSize(size: Float) {
mLastTextSize = size
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, size)
}
fun getTextSize(): Float = DisplayUtils.pxToSp(textView.textSize)
}
}

View File

@@ -1,15 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
app:theme="@style/AppTheme.AppBarOverlay">
<org.autojs.autojs.theme.widget.ThemeColorToolbar
@@ -21,14 +22,130 @@
</com.google.android.material.appbar.AppBarLayout>
<TextView
android:id="@+id/error"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
android:scrollbars="vertical"
android:textColor="@android:color/secondary_text_light"
android:textSize="16sp"
tools:text="@string/text_error" />
android:orientation="vertical">
<ScrollView
android:id="@+id/error_message_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<org.autojs.autojs.ui.widget.SelectableTextView
android:id="@+id/error_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:scrollbars="vertical"
android:textColor="@color/day_night_full"
android:textSize="16sp"
tools:text="@string/text_error" />
</ScrollView>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/day_night_alpha_20" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="41dp"
android:layout_gravity="center_horizontal"
android:baselineAligned="false">
<LinearLayout
android:id="@+id/copy"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="?selectableItemBackground"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_gravity="center"
android:layout_marginEnd="10dp"
android:src="@drawable/ic_content_copy_small_black_48dp"
app:tint="?android:textColorPrimary"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="4dp"
android:gravity="center"
android:text="@string/text_copy"
android:textColor="?android:textColorPrimary"
android:textSize="15sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/restart"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="?selectableItemBackground"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_gravity="center"
android:layout_marginEnd="10dp"
android:src="@drawable/ic_refresh_white_24dp"
app:tint="?android:textColorPrimary"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="4dp"
android:gravity="center"
android:text="@string/text_restart"
android:textColor="?android:textColorPrimary"
android:textSize="15sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/exit"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="?selectableItemBackground"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_gravity="center"
android:layout_marginEnd="10dp"
android:src="@drawable/ic_ali_exit"
app:tint="?android:textColorPrimary"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="4dp"
android:textColor="?android:textColorPrimary"
android:gravity="center"
android:text="@string/text_exit"
android:textSize="15sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>

View File

@@ -83,7 +83,7 @@
android:layout_gravity="center_vertical"
android:layout_marginEnd="4dp"
android:gravity="center"
android:text="@string/text_restart_app"
android:text="@string/text_restart"
android:textColor="?android:textColorPrimary"
android:textSize="15sp" />

View File

@@ -910,7 +910,7 @@
<string name="text_reset_succeed">نجحت إعادة تعيين</string>
<string name="text_reset_to_initial_content">إعادة تعيين في البداية</string>
<string name="text_reset_to_initial_content_only_for_assets">إعادة التعيين هي فقط للعينات</string>
<string name="text_restart_app">إعادة بدء</string>
<string name="text_restart">إعادة بدء</string>
<string name="text_result">نتيجة</string>
<string name="text_revoke_autojs6_access_in_shizuku_app">قم بإلغاء الوصول إلى AutoJs6 في تطبيق Shizuku</string>
<string name="text_root_mode_title">فحص الجذر مجموعة القوة</string>

View File

@@ -905,7 +905,7 @@
<string name="text_reset_succeed">Reset succeeded</string>
<string name="text_reset_to_initial_content">Reset initially</string>
<string name="text_reset_to_initial_content_only_for_assets">Reset is only for samples</string>
<string name="text_restart_app">Restart</string>
<string name="text_restart">Restart</string>
<string name="text_result">Result</string>
<string name="text_revoke_autojs6_access_in_shizuku_app">Revoke AutoJs6 access in Shizuku app</string>
<string name="text_root_mode_title">Force set root check</string>

View File

@@ -908,7 +908,7 @@
<string name="text_reset_succeed">Restablecer con éxito</string>
<string name="text_reset_to_initial_content">Restablecer inicialmente</string>
<string name="text_reset_to_initial_content_only_for_assets">El restablecimiento es sólo para las muestras</string>
<string name="text_restart_app">Reiniciar</string>
<string name="text_restart">Reiniciar</string>
<string name="text_result">Resultado</string>
<string name="text_revoke_autojs6_access_in_shizuku_app">Revocar privilegios de AutoJs6 en una aplicación Shizuku</string>
<string name="text_root_mode_title">Forzar la comprobación de root</string>

View File

@@ -908,7 +908,7 @@
<string name="text_reset_succeed">Réinitialisation réussie</string>
<string name="text_reset_to_initial_content">Réinitialisation initiale</string>
<string name="text_reset_to_initial_content_only_for_assets">Reset n\'est que pour les échantillons</string>
<string name="text_restart_app">Redémarrer</string>
<string name="text_restart">Redémarrer</string>
<string name="text_result">Résultat</string>
<string name="text_revoke_autojs6_access_in_shizuku_app">Révoquer les privilèges AutoJs6 dans une application Shizuku</string>
<string name="text_root_mode_title">Force set root check</string>

View File

@@ -909,7 +909,7 @@
<string name="text_reset_succeed">リセット成功</string>
<string name="text_reset_to_initial_content">初期リセット</string>
<string name="text_reset_to_initial_content_only_for_assets">リセットはサンプルのみ</string>
<string name="text_restart_app">再起動</string>
<string name="text_restart">再起動</string>
<string name="text_result">結果</string>
<string name="text_revoke_autojs6_access_in_shizuku_app">Shizuku アプリケーションで AutoJs6 権限を取り消す</string>
<string name="text_root_mode_title">強制的に root にするチェック</string>

View File

@@ -910,7 +910,7 @@
<string name="text_reset_succeed">재설정이 성공했습니다</string>
<string name="text_reset_to_initial_content">처음에 재설정하십시오</string>
<string name="text_reset_to_initial_content_only_for_assets">재설정은 샘플에만 해당됩니다</string>
<string name="text_restart_app">재시작</string>
<string name="text_restart">재시작</string>
<string name="text_result">결과</string>
<string name="text_revoke_autojs6_access_in_shizuku_app">Shizuku 애플리케이션에서 AutoJs6 권한 취소하기</string>
<string name="text_root_mode_title">강제 설정 루트 검사</string>

View File

@@ -908,7 +908,7 @@
<string name="text_reset_succeed">Сброс выполнен успешно</string>
<string name="text_reset_to_initial_content">Сброс первоначально</string>
<string name="text_reset_to_initial_content_only_for_assets">Сброс выполняется только для образцов</string>
<string name="text_restart_app">Перезапустить</string>
<string name="text_restart">Перезапустить</string>
<string name="text_result">Результат</string>
<string name="text_revoke_autojs6_access_in_shizuku_app">Отмена привилегий AutoJs6 в приложении Shizuku</string>
<string name="text_root_mode_title">Проверка принудительной установки root</string>

View File

@@ -906,7 +906,7 @@
<string name="text_reset_succeed">重置成功</string>
<string name="text_reset_to_initial_content">重置為初始內容</string>
<string name="text_reset_to_initial_content_only_for_assets">只能重置示例代碼文件</string>
<string name="text_restart_app">重啓</string>
<string name="text_restart">重啓</string>
<string name="text_result">結果</string>
<string name="text_revoke_autojs6_access_in_shizuku_app">在 Shizuku 應用中撤銷 AutoJs6 權限</string>
<string name="text_root_mode_title">強制 Root 權限檢查</string>

View File

@@ -906,7 +906,7 @@
<string name="text_reset_succeed">重置成功</string>
<string name="text_reset_to_initial_content">重置為初始內容</string>
<string name="text_reset_to_initial_content_only_for_assets">只能重置示例程式碼檔案</string>
<string name="text_restart_app">重啟</string>
<string name="text_restart">重啟</string>
<string name="text_result">結果</string>
<string name="text_revoke_autojs6_access_in_shizuku_app">在 Shizuku 應用中撤銷 AutoJs6 許可權</string>
<string name="text_root_mode_title">強制 Root 許可權檢查</string>

View File

@@ -906,7 +906,7 @@
<string name="text_reset_succeed">重置成功</string>
<string name="text_reset_to_initial_content">重置为初始内容</string>
<string name="text_reset_to_initial_content_only_for_assets">只能重置示例代码文件</string>
<string name="text_restart_app">重启</string>
<string name="text_restart">重启</string>
<string name="text_result">结果</string>
<string name="text_revoke_autojs6_access_in_shizuku_app">在 Shizuku 应用中撤销 AutoJs6 权限</string>
<string name="text_root_mode_title">强制 Root 权限检查</string>

View File

@@ -1136,7 +1136,7 @@
<string name="text_reset_succeed">Reset succeeded</string>
<string name="text_reset_to_initial_content">Reset initially</string>
<string name="text_reset_to_initial_content_only_for_assets">Reset is only for samples</string>
<string name="text_restart_app">Restart</string>
<string name="text_restart">Restart</string>
<string name="text_result">Result</string>
<string name="text_revoke_autojs6_access_in_shizuku_app">Revoke AutoJs6 access in Shizuku app</string>
<string name="text_root_mode_title">Force set root check</string>