From cfb8557545769149a70ea5f6bc495562842311e1 Mon Sep 17 00:00:00 2001 From: SuperMonster003 Date: Fri, 27 Dec 2024 19:42:12 +0800 Subject: [PATCH] =?UTF-8?q?6.6.1=20-=20Alpha2=20-=20=E4=BC=98=E5=8C=96=20a?= =?UTF-8?q?pp.startActivity/startDualActivity=20=E7=AD=89=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E9=80=82=E9=85=8D=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changelog/lang_ar.json | 3 +- .changelog/lang_en.json | 3 +- .changelog/lang_es.json | 3 +- .changelog/lang_fr.json | 3 +- .changelog/lang_ja.json | 3 +- .changelog/lang_ko.json | 3 +- .changelog/lang_ru.json | 3 +- .changelog/lang_zh-Hans.json | 3 +- .changelog/lang_zh-Hant-HK.json | 3 +- .changelog/lang_zh-Hant-TW.json | 3 +- .readme/README-ar.md | 5 +- .readme/README-en.md | 5 +- .readme/README-es.md | 5 +- .readme/README-fr.md | 5 +- .readme/README-ja.md | 5 +- .readme/README-ko.md | 5 +- .readme/README-ru.md | 5 +- .readme/README-zh-Hans.md | 5 +- .readme/README-zh-Hant-HK.md | 5 +- .readme/README-zh-Hant-TW.md | 5 +- README.md | 5 +- app/src/main/assets-app/doc/CHANGELOG-ar.md | 3 +- app/src/main/assets-app/doc/CHANGELOG-en.md | 3 +- app/src/main/assets-app/doc/CHANGELOG-es.md | 3 +- app/src/main/assets-app/doc/CHANGELOG-fr.md | 3 +- app/src/main/assets-app/doc/CHANGELOG-ja.md | 3 +- app/src/main/assets-app/doc/CHANGELOG-ko.md | 3 +- app/src/main/assets-app/doc/CHANGELOG-ru.md | 3 +- .../main/assets-app/doc/CHANGELOG-zh-Hans.md | 3 +- .../assets-app/doc/CHANGELOG-zh-Hant-HK.md | 3 +- .../assets-app/doc/CHANGELOG-zh-Hant-TW.md | 3 +- app/src/main/assets-app/doc/CHANGELOG.md | 3 +- .../autojs/runtime/api/augment/app/App.kt | 401 +++++++++++------- .../runtime/api/augment/timers/Timers.kt | 5 +- version.properties | 6 +- 35 files changed, 333 insertions(+), 197 deletions(-) diff --git a/.changelog/lang_ar.json b/.changelog/lang_ar.json index 236660ec..e6b61ab4 100644 --- a/.changelog/lang_ar.json +++ b/.changelog/lang_ar.json @@ -1,7 +1,7 @@ { "$data": { "v6.6.1": { - "released_date": "2024/12/26", + "released_date": "2024/12/27", "feature": [ "وحدة Pinyin لتحويل النصوص الصينية إلى بينيين (راجع وثائق المشروع > [البينيين الصيني](https://docs.autojs6.com/#/pinyin))", "وحدة Pinyin4j لتحويل النصوص الصينية إلى بينيين (راجع وثائق المشروع > [البينيين الصيني](https://docs.autojs6.com/#/pinyin4j))", @@ -20,6 +20,7 @@ "استعادة أكبر قدر ممكن من المعلومات الأساسية لمشاريع النصوص عند تلف ملف project.json", "تحويل اللغة الصينية المبسطة تلقائيًا إلى نظام بينيين (بما في ذلك الحروف متعددة النغمات) عند توليد اللواحق للأسماء في الملفات المفردة", "دعم الوسائط السلبية في الطرق UiSelector#findOnce و UiSelector#find", + "تم تحسين تكيفية أساليب app.startActivity/startDualActivity", "دعم أشكال مختصرة إضافية لبادئات الأسماء في المصفوفات المرتبطة بعناصر الواجهة (مثل RecyclerView و Snackbar وغيرها)", "مزامنة أحدث كود من المصدر الرئيسي لمحرك Rhino وتكييفه مع المشروع الحالي" ], diff --git a/.changelog/lang_en.json b/.changelog/lang_en.json index 93b359b3..0fb0fd08 100644 --- a/.changelog/lang_en.json +++ b/.changelog/lang_en.json @@ -1,7 +1,7 @@ { "$data": { "v6.6.1": { - "released_date": "2024/12/26", + "released_date": "2024/12/27", "feature": [ "Pinyin module for Chinese Pinyin conversion (Refer to Project Documentation > [Chinese Pinyin](https://docs.autojs6.com/#/pinyin))", "Pinyin4j module for Chinese Pinyin conversion (Refer to Project Documentation > [Chinese Pinyin](https://docs.autojs6.com/#/pinyin4j))", @@ -20,6 +20,7 @@ "Recover as much critical information as possible for script projects when project.json is corrupted", "Automatically convert Simplified Chinese to Pinyin (including multi-tone characters) for generated package name suffixes when packaging single files", "Support for negative arguments in the UiSelector#findOnce and UiSelector#find methods", + "Enhanced adaptability of app.startActivity/startDualActivity methods", "UI elements and className-related selectors now support more package name prefix omission forms (e.g., RecyclerView, Snackbar, etc.)", "Synchronize with the latest upstream code of the Rhino engine and adapt it to the existing project" ], diff --git a/.changelog/lang_es.json b/.changelog/lang_es.json index 71215c8b..510a98f7 100644 --- a/.changelog/lang_es.json +++ b/.changelog/lang_es.json @@ -1,7 +1,7 @@ { "$data": { "v6.6.1": { - "released_date": "2024/12/26", + "released_date": "2024/12/27", "feature": [ "Módulo Pinyin para la conversión de pinyin en chino (Consulte la documentación del proyecto > [Pinyin chino](https://docs.autojs6.com/#/pinyin))", "Módulo Pinyin4j para la conversión de pinyin en chino (Consulte la documentación del proyecto > [Pinyin chino](https://docs.autojs6.com/#/pinyin4j))", @@ -20,6 +20,7 @@ "Recuperar la mayor cantidad de información crítica posible para proyectos de scripts cuando el archivo project.json está dañado", "Convertir automáticamente chino simplificado a Pinyin (incluyendo caracteres con múltiples tonos) para los sufijos de nombres de paquetes generados al empaquetar archivos individuales", "Soporte para argumentos negativos en los métodos UiSelector#findOnce y UiSelector#find", + "Se mejoró la adaptabilidad de los métodos app.startActivity/startDualActivity", "Mayor soporte para formas abreviadas de prefijos de nombres de paquetes en selectores relacionados con elementos UI y className (por ejemplo, RecyclerView, Snackbar, etc.)", "Sincronizar el código más reciente del upstream del motor Rhino y adaptarlo al proyecto existente" ], diff --git a/.changelog/lang_fr.json b/.changelog/lang_fr.json index 7f3d70fe..04cf75d8 100644 --- a/.changelog/lang_fr.json +++ b/.changelog/lang_fr.json @@ -1,7 +1,7 @@ { "$data": { "v6.6.1": { - "released_date": "2024/12/26", + "released_date": "2024/12/27", "feature": [ "Module Pinyin pour la conversion du pinyin chinois (Consultez la documentation du projet > [Pinyin chinois](https://docs.autojs6.com/#/pinyin))", "Module Pinyin4j pour la conversion du pinyin chinois (Consultez la documentation du projet > [Pinyin chinois](https://docs.autojs6.com/#/pinyin4j))", @@ -20,6 +20,7 @@ "Récupérer autant d'informations critiques que possible pour les projets de script en cas de corruption du fichier project.json", "Convertir automatiquement le chinois simplifié en pinyin (y compris les caractères à tons multiples) pour les suffixes de noms de paquet générés lors de l'empaquetage de fichiers uniques", "Soutien des arguments négatifs dans les méthodes UiSelector#findOnce et UiSelector#find", + "Amélioration de l'adaptabilité des méthodes app.startActivity/startDualActivity", "Prise en charge des formes abrégées supplémentaires pour les préfixes de noms de paquet dans les sélecteurs liés aux éléments de l'interface utilisateur et aux className (par exemple RecyclerView, Snackbar, etc.)", "Synchroniser le code en amont le plus récent du moteur Rhino et l'adapter au projet existant" ], diff --git a/.changelog/lang_ja.json b/.changelog/lang_ja.json index a4446984..1655467b 100644 --- a/.changelog/lang_ja.json +++ b/.changelog/lang_ja.json @@ -1,7 +1,7 @@ { "$data": { "v6.6.1": { - "released_date": "2024/12/26", + "released_date": "2024/12/27", "feature": [ "中国語のピンイン変換用の Pinyin モジュール (プロジェクトドキュメントを参照 > [中国語ピンイン](https://docs.autojs6.com/#/pinyin))", "中国語のピンイン変換用の Pinyin4j モジュール (プロジェクトドキュメントを参照 > [中国語ピンイン](https://docs.autojs6.com/#/pinyin4j))", @@ -20,6 +20,7 @@ "project.json ファイルが破損した場合でも, スクリプトプロジェクトの重要な情報を可能な限り復元", "単一ファイルをパッケージ化する際に, 自動生成されるパッケージ名のサフィックスを簡体字中国語からピンインに変換 (多音字対応)", "UiSelector#findOnce と UiSelector#find メソッドで負の引数をサポート", + "app.startActivity/startDualActivity メソッドの適応性が向上しました", "UI要素や className に関連するセレクターが RecyclerView や Snackbar などのパッケージ名プレフィックス省略形式にさらに対応", "Rhino エンジンの最新の上流コードを同期し, 既存のプロジェクトに適応させる" ], diff --git a/.changelog/lang_ko.json b/.changelog/lang_ko.json index 9de21b39..bf3d2bb8 100644 --- a/.changelog/lang_ko.json +++ b/.changelog/lang_ko.json @@ -1,7 +1,7 @@ { "$data": { "v6.6.1": { - "released_date": "2024/12/26", + "released_date": "2024/12/27", "feature": [ "중국어 병음 변환을 위한 Pinyin 모듈 (프로젝트 문서 참고 > [중국어 병음](https://docs.autojs6.com/#/pinyin))", "중국어 병음 변환을 위한 Pinyin4j 모듈 (프로젝트 문서 참고 > [중국어 병음](https://docs.autojs6.com/#/pinyin4j))", @@ -20,6 +20,7 @@ "project.json 파일이 손상된 경우에도 가능한 한 중요한 정보를 복원", "단일 파일을 패키징할 때 자동 생성된 패키지 이름 접미사를 간체자로부터 병음으로 변환 (다음 음도 지원)", "UiSelector#findOnce 및 UiSelector#find 메서드에서 음수 인수 지원", + "app.startActivity/startDualActivity 메서드의 적응성이 향상되었습니다", "UI 요소 및 className 관련 선택자가 RecyclerView, Snackbar 등과 같은 더욱 다양한 패키지 이름 접두사 생략 형식을 지원", "Rhino 엔진의 최신 업스트림 코드를 동기화하고 기존 프로젝트에 맞게 조정합니다" ], diff --git a/.changelog/lang_ru.json b/.changelog/lang_ru.json index b52a7c3d..cace4894 100644 --- a/.changelog/lang_ru.json +++ b/.changelog/lang_ru.json @@ -1,7 +1,7 @@ { "$data": { "v6.6.1": { - "released_date": "2024/12/26", + "released_date": "2024/12/27", "feature": [ "Модуль Pinyin для преобразования китайского пиньиня (См. документацию проекта > [Китайский Пиньинь](https://docs.autojs6.com/#/pinyin))", "Модуль Pinyin4j для преобразования китайского пиньиня (См. документацию проекта > [Китайский Пиньинь](https://docs.autojs6.com/#/pinyin4j))", @@ -20,6 +20,7 @@ "Максимальное восстановление ключевой информации для проектов скриптов в случае повреждения файла project.json", "Автоматическая конвертация упрощенного китайского в пиньинь (включая многозначные символы) для суффиксов пакетов, создаваемых при упаковке отдельных файлов", "Поддержка отрицательных аргументов в методах UiSelector#findOnce и UiSelector#find", + "Улучшена адаптивность методов app.startActivity/startDualActivity", "Поддержка дополнительных сокращённых форм префиксов имён пакетов в селекторах, связанных с элементами UI и className (например, RecyclerView, Snackbar и т. д.)", "Синхронизировать последний код из официального репозитория Rhino и адаптировать его к существующему проекту" ], diff --git a/.changelog/lang_zh-Hans.json b/.changelog/lang_zh-Hans.json index 880dfb10..dbd63ec5 100644 --- a/.changelog/lang_zh-Hans.json +++ b/.changelog/lang_zh-Hans.json @@ -1,7 +1,7 @@ { "$data": { "v6.6.1": { - "released_date": "2024/12/26", + "released_date": "2024/12/27", "feature": [ "pinyin 模块, 用于汉语拼音转换 (参阅 项目文档 > [汉语拼音](https://docs.autojs6.com/#/pinyin))", "pinyin4j 模块, 用于汉语拼音转换 (参阅 项目文档 > [汉语拼音](https://docs.autojs6.com/#/pinyin4j))", @@ -20,6 +20,7 @@ "脚本项目识别在 project.json 损坏情况下尽可能还原关键信息", "打包单文件时自动生成的包名后缀支持将简体中文转换为拼音 (支持多音字)", "UiSelector#findOnce 及 UiSelector#find 方法支持负数参数", + "app.startActivity/startDualActivity 方法增强适配性", "UI 元素及 className 相关选择器支持更多的包名前缀省略形式 (如 RecyclerView, Snackbar 等)", "同步最新的 Rhino 引擎官方上游代码并进行必要的代码适配" ], diff --git a/.changelog/lang_zh-Hant-HK.json b/.changelog/lang_zh-Hant-HK.json index 93bcd40a..94fd6e77 100644 --- a/.changelog/lang_zh-Hant-HK.json +++ b/.changelog/lang_zh-Hant-HK.json @@ -1,7 +1,7 @@ { "$data": { "v6.6.1": { - "released_date": "2024/12/26", + "released_date": "2024/12/27", "feature": [ "pinyin 模塊, 用於漢語拼音轉換 (參閲 項目文檔 > [漢語拼音](https://docs.autojs6.com/#/pinyin))", "pinyin4j 模塊, 用於漢語拼音轉換 (參閲 項目文檔 > [漢語拼音](https://docs.autojs6.com/#/pinyin4j))", @@ -20,6 +20,7 @@ "腳本項目識別在 project.json 損壞情況下儘可能還原關鍵信息", "打包單文件時自動生成的包名後綴支持將簡體中文轉換為拼音 (支持多音字)", "UiSelector#findOnce 及 UiSelector#find 方法支持負數參數", + "app.startActivity/startDualActivity 方法增強適配性", "UI 元素及 className 相關選擇器支持更多的包名前綴省略形式 (如 RecyclerView, Snackbar 等)", "同步最新的 Rhino 引擎官方上游代碼並進行必要的代碼適配" ], diff --git a/.changelog/lang_zh-Hant-TW.json b/.changelog/lang_zh-Hant-TW.json index 7546e319..2c2e7010 100644 --- a/.changelog/lang_zh-Hant-TW.json +++ b/.changelog/lang_zh-Hant-TW.json @@ -1,7 +1,7 @@ { "$data": { "v6.6.1": { - "released_date": "2024/12/26", + "released_date": "2024/12/27", "feature": [ "pinyin 模組, 用於漢語拼音轉換 (參閱 專案文件 > [漢語拼音](https://docs.autojs6.com/#/pinyin))", "pinyin4j 模組, 用於漢語拼音轉換 (參閱 專案文件 > [漢語拼音](https://docs.autojs6.com/#/pinyin4j))", @@ -20,6 +20,7 @@ "指令碼專案識別在 project.json 損壞情況下儘可能還原關鍵資訊", "打包單檔案時自動生成的包名字尾支援將簡體中文轉換為拼音 (支援多音字)", "UiSelector#findOnce 及 UiSelector#find 方法支援負數引數", + "app.startActivity/startDualActivity 方法增強適配性", "UI 元素及 className 相關選擇器支援更多的包名字首省略形式 (如 RecyclerView, Snackbar 等)", "同步最新的 Rhino 引擎官方上游程式碼並進行必要的程式碼適配" ], diff --git a/.readme/README-ar.md b/.readme/README-ar.md index 621958b5..185a96a4 100644 --- a/.readme/README-ar.md +++ b/.readme/README-ar.md @@ -156,7 +156,7 @@ # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `إضافة جديدة` وحدة Pinyin لتحويل النصوص الصينية إلى بينيين (راجع وثائق المشروع > [البينيين الصيني](https://docs.autojs6.com/#/pinyin)) * `إضافة جديدة` وحدة Pinyin4j لتحويل النصوص الصينية إلى بينيين (راجع وثائق المشروع > [البينيين الصيني](https://docs.autojs6.com/#/pinyin4j)) @@ -171,6 +171,7 @@ * `تحسين` استعادة أكبر قدر ممكن من المعلومات الأساسية لمشاريع النصوص عند تلف ملف project.json * `تحسين` تحويل اللغة الصينية المبسطة تلقائيًا إلى نظام بينيين (بما في ذلك الحروف متعددة النغمات) عند توليد اللواحق للأسماء في الملفات المفردة * `تحسين` دعم الوسائط السلبية في الطرق UiSelector#findOnce و UiSelector#find +* `تحسين` تم تحسين تكيفية أساليب app.startActivity/startDualActivity * `تحسين` دعم أشكال مختصرة إضافية لبادئات الأسماء في المصفوفات المرتبطة بعناصر الواجهة (مثل RecyclerView و Snackbar وغيرها) * `تحسين` مزامنة أحدث كود من المصدر الرئيسي لمحرك Rhino وتكييفه مع المشروع الحالي * `تحسين` تعديلات على إصدارات بعض التبعيات أو المكتبات المحلية _[`CHANGELOG.md`](http://project.autojs6.com/blob/master/app/src/main/assets-app/doc/CHANGELOG.md#v661)_ @@ -370,7 +371,7 @@ SDK Tools (أدوات SDK) (في النافذة اليمنى) يعتمد مشروع AutoJs6 على إصدار `JDK (مجموعة تطوير جافا)` بإصدار لا يقل عن `17`، ولكن يفضل الإصدار الذي لا يقل عن `19`. -اعتبارًا من 26 December 2024، الإصدار الأقصى المدعوم من JDK لمشروع AutoJs6 هو `23`. +اعتبارًا من 27 December 2024، الإصدار الأقصى المدعوم من JDK لمشروع AutoJs6 هو `23`. > ملاحظة: إذا كان نظام الكمبيوتر يحتوي على JDK والإصدار يفي بالمتطلبات المذكورة أعلاه، فيمكنك تخطي هذا القسم. diff --git a/.readme/README-en.md b/.readme/README-en.md index e1928fd0..0468bc90 100644 --- a/.readme/README-en.md +++ b/.readme/README-en.md @@ -156,7 +156,7 @@ Compared to the final open-source version `4.1.1 Alpha2` of Auto.js, the main up # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `Feature` Pinyin module for Chinese Pinyin conversion (Refer to Project Documentation > [Chinese Pinyin](https://docs.autojs6.com/#/pinyin)) * `Feature` Pinyin4j module for Chinese Pinyin conversion (Refer to Project Documentation > [Chinese Pinyin](https://docs.autojs6.com/#/pinyin4j)) @@ -171,6 +171,7 @@ Compared to the final open-source version `4.1.1 Alpha2` of Auto.js, the main up * `Improvement` Recover as much critical information as possible for script projects when project.json is corrupted * `Improvement` Automatically convert Simplified Chinese to Pinyin (including multi-tone characters) for generated package name suffixes when packaging single files * `Improvement` Support for negative arguments in the UiSelector#findOnce and UiSelector#find methods +* `Improvement` Enhanced adaptability of app.startActivity/startDualActivity methods * `Improvement` UI elements and className-related selectors now support more package name prefix omission forms (e.g., RecyclerView, Snackbar, etc.) * `Improvement` Synchronize with the latest upstream code of the Rhino engine and adapt it to the existing project * `Improvement` Some dependency or local library version adjustments _[`CHANGELOG.md`](http://project.autojs6.com/blob/master/app/src/main/assets-app/doc/CHANGELOG.md#v661)_ @@ -370,7 +371,7 @@ Check `Show Package Details`, click NDK and CMake respectively to ensure the cor The `JDK (Java Development Kit)` version required for the AutoJs6 project should be at least `17`, but `19` or higher is recommended. -As of Dec 26 , 2024, AutoJs6 supports up to version `23` of the JDK. +As of Dec 27 , 2024, AutoJs6 supports up to version `23` of the JDK. > Note: If the JDK is already installed on the computer system and the version meets the above requirements, this section can be skipped. diff --git a/.readme/README-es.md b/.readme/README-es.md index 073f575c..f2dc22e4 100644 --- a/.readme/README-es.md +++ b/.readme/README-es.md @@ -156,7 +156,7 @@ En comparación con la versión final de Auto.js `4.1.1 Alpha2`, AutoJs6 ha real # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `Nuevo` Módulo Pinyin para la conversión de pinyin en chino (Consulte la documentación del proyecto > [Pinyin chino](https://docs.autojs6.com/#/pinyin)) * `Nuevo` Módulo Pinyin4j para la conversión de pinyin en chino (Consulte la documentación del proyecto > [Pinyin chino](https://docs.autojs6.com/#/pinyin4j)) @@ -171,6 +171,7 @@ En comparación con la versión final de Auto.js `4.1.1 Alpha2`, AutoJs6 ha real * `Mejora` Recuperar la mayor cantidad de información crítica posible para proyectos de scripts cuando el archivo project.json está dañado * `Mejora` Convertir automáticamente chino simplificado a Pinyin (incluyendo caracteres con múltiples tonos) para los sufijos de nombres de paquetes generados al empaquetar archivos individuales * `Mejora` Soporte para argumentos negativos en los métodos UiSelector#findOnce y UiSelector#find +* `Mejora` Se mejoró la adaptabilidad de los métodos app.startActivity/startDualActivity * `Mejora` Mayor soporte para formas abreviadas de prefijos de nombres de paquetes en selectores relacionados con elementos UI y className (por ejemplo, RecyclerView, Snackbar, etc.) * `Mejora` Sincronizar el código más reciente del upstream del motor Rhino y adaptarlo al proyecto existente * `Mejora` Ajustes en algunas dependencias o versiones de bibliotecas locales _[`CHANGELOG.md`](http://project.autojs6.com/blob/master/app/src/main/assets-app/doc/CHANGELOG.md#v661)_ @@ -370,7 +371,7 @@ Marca `Show Package Details (Mostrar detalles del paquete)`, haz clic en NDK y C La versión mínima requerida del `JDK (Kit de Desarrollo de Java)` para el proyecto AutoJs6 es `17`, pero se recomienda usar una versión no inferior a `19`. -Hasta el 26 de December de 2024, AutoJs6 soporta hasta la versión `23` de JDK. +Hasta el 27 de December de 2024, AutoJs6 soporta hasta la versión `23` de JDK. > Nota: Si el sistema ya tiene instalado JDK y cumple con los requisitos anteriores, puedes omitir esta sección. diff --git a/.readme/README-fr.md b/.readme/README-fr.md index 64f103c2..010fd3d9 100644 --- a/.readme/README-fr.md +++ b/.readme/README-fr.md @@ -156,7 +156,7 @@ Par rapport à la version finale open source de Auto.js `4.1.1 Alpha2`, AutoJs6 # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `Fonctionnalité` Module Pinyin pour la conversion du pinyin chinois (Consultez la documentation du projet > [Pinyin chinois](https://docs.autojs6.com/#/pinyin)) * `Fonctionnalité` Module Pinyin4j pour la conversion du pinyin chinois (Consultez la documentation du projet > [Pinyin chinois](https://docs.autojs6.com/#/pinyin4j)) @@ -171,6 +171,7 @@ Par rapport à la version finale open source de Auto.js `4.1.1 Alpha2`, AutoJs6 * `Amélioration` Récupérer autant d'informations critiques que possible pour les projets de script en cas de corruption du fichier project.json * `Amélioration` Convertir automatiquement le chinois simplifié en pinyin (y compris les caractères à tons multiples) pour les suffixes de noms de paquet générés lors de l'empaquetage de fichiers uniques * `Amélioration` Soutien des arguments négatifs dans les méthodes UiSelector#findOnce et UiSelector#find +* `Amélioration` Amélioration de l'adaptabilité des méthodes app.startActivity/startDualActivity * `Amélioration` Prise en charge des formes abrégées supplémentaires pour les préfixes de noms de paquet dans les sélecteurs liés aux éléments de l'interface utilisateur et aux className (par exemple RecyclerView, Snackbar, etc.) * `Amélioration` Synchroniser le code en amont le plus récent du moteur Rhino et l'adapter au projet existant * `Amélioration` Certaines dépendances ou versions de bibliothèques locales ont été ajustées _[`CHANGELOG.md`](http://project.autojs6.com/blob/master/app/src/main/assets-app/doc/CHANGELOG.md#v661)_ @@ -370,7 +371,7 @@ Cochez `Show Package Details (afficher les détails du package)`, puis cliquez r La version de JDK (Kit de développement Java) requise pour le projet AutoJs6 doit être au moins `17`, mais il est recommandé d'avoir au moins `19`. -À partir du 26 December 2024, AutoJs6 prend en charge la version maximale de JDK `23`. +À partir du 27 December 2024, AutoJs6 prend en charge la version maximale de JDK `23`. > Note : Si le JDK est déjà installé sur le système informatique et que la version répond aux exigences ci-dessus, vous pouvez ignorer cette section. diff --git a/.readme/README-ja.md b/.readme/README-ja.md index ebeeb9aa..7c7155a0 100644 --- a/.readme/README-ja.md +++ b/.readme/README-ja.md @@ -156,7 +156,7 @@ Auto.js の最終オープンソースバージョン `4.1.1 Alpha2` と比較 # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `新機能` 中国語のピンイン変換用の Pinyin モジュール (プロジェクトドキュメントを参照 > [中国語ピンイン](https://docs.autojs6.com/#/pinyin)) * `新機能` 中国語のピンイン変換用の Pinyin4j モジュール (プロジェクトドキュメントを参照 > [中国語ピンイン](https://docs.autojs6.com/#/pinyin4j)) @@ -171,6 +171,7 @@ Auto.js の最終オープンソースバージョン `4.1.1 Alpha2` と比較 * `改善` project.json ファイルが破損した場合でも, スクリプトプロジェクトの重要な情報を可能な限り復元 * `改善` 単一ファイルをパッケージ化する際に, 自動生成されるパッケージ名のサフィックスを簡体字中国語からピンインに変換 (多音字対応) * `改善` UiSelector#findOnce と UiSelector#find メソッドで負の引数をサポート +* `改善` app.startActivity/startDualActivity メソッドの適応性が向上しました * `改善` UI要素や className に関連するセレクターが RecyclerView や Snackbar などのパッケージ名プレフィックス省略形式にさらに対応 * `改善` Rhino エンジンの最新の上流コードを同期し, 既存のプロジェクトに適応させる * `改善` 一部の依存関係またはローカルライブラリのバージョン調整 _[`CHANGELOG.md`](http://project.autojs6.com/blob/master/app/src/main/assets-app/doc/CHANGELOG.md#v661)_ @@ -370,7 +371,7 @@ SDK Tools (SDK ツール) (右側のウィンドウにあります) AutoJs6プロジェクトが依存する `JDK (Java開発キット)` のリリースバージョンは少なくとも `17` で、それ以下のバージョンは推奨されませんが、最低でも `19` の使用を推奨します。. -2024 年 12 月 26 日 現在、AutoJs6がサポートする最大のJDKバージョンは `23` です。. +2024 年 12 月 27 日 現在、AutoJs6がサポートする最大のJDKバージョンは `23` です。. > 注: コンピュータシステムに適切なバージョンのJDKがインストールされている場合、この節の内容をスキップできます。. diff --git a/.readme/README-ko.md b/.readme/README-ko.md index 919ece93..21c6e4d5 100644 --- a/.readme/README-ko.md +++ b/.readme/README-ko.md @@ -156,7 +156,7 @@ Auto.js 최종 오픈 소스 버전 `4.1.1 Alpha2`와 비교하여 AutoJs6는 # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `추가` 중국어 병음 변환을 위한 Pinyin 모듈 (프로젝트 문서 참고 > [중국어 병음](https://docs.autojs6.com/#/pinyin)) * `추가` 중국어 병음 변환을 위한 Pinyin4j 모듈 (프로젝트 문서 참고 > [중국어 병음](https://docs.autojs6.com/#/pinyin4j)) @@ -171,6 +171,7 @@ Auto.js 최종 오픈 소스 버전 `4.1.1 Alpha2`와 비교하여 AutoJs6는 * `개선` project.json 파일이 손상된 경우에도 가능한 한 중요한 정보를 복원 * `개선` 단일 파일을 패키징할 때 자동 생성된 패키지 이름 접미사를 간체자로부터 병음으로 변환 (다음 음도 지원) * `개선` UiSelector#findOnce 및 UiSelector#find 메서드에서 음수 인수 지원 +* `개선` app.startActivity/startDualActivity 메서드의 적응성이 향상되었습니다 * `개선` UI 요소 및 className 관련 선택자가 RecyclerView, Snackbar 등과 같은 더욱 다양한 패키지 이름 접두사 생략 형식을 지원 * `개선` Rhino 엔진의 최신 업스트림 코드를 동기화하고 기존 프로젝트에 맞게 조정합니다 * `개선` 일부 의존성 또는 로컬 라이브러리 버전 조정 _[`CHANGELOG.md`](http://project.autojs6.com/blob/master/app/src/main/assets-app/doc/CHANGELOG.md#v661)_ @@ -370,7 +371,7 @@ SDK Tools (SDK 도구) (오른쪽 창에 위치) AutoJs6 프로젝트는 `JDK (Java 개발 도구 키트)` 버전이 `17` 이상이어야 하지만, `19` 이상을 권장합니다.. -2024 년 12 월 26 일 기준으로, AutoJs6이 지원하는 최대 JDK 버전은 `23`입니다.. +2024 년 12 월 27 일 기준으로, AutoJs6이 지원하는 최대 JDK 버전은 `23`입니다.. > 메모: 시스템에 JDK가 설치되어 있고, 버전이 위의 요구 사항을 충족하는 경우, 이 섹션을 건너뛸 수 있습니다.. diff --git a/.readme/README-ru.md b/.readme/README-ru.md index 973ead74..e3cae0a5 100644 --- a/.readme/README-ru.md +++ b/.readme/README-ru.md @@ -156,7 +156,7 @@ AutoJs6 разработан на основе финальной версии # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `Новое` Модуль Pinyin для преобразования китайского пиньиня (См. документацию проекта > [Китайский Пиньинь](https://docs.autojs6.com/#/pinyin)) * `Новое` Модуль Pinyin4j для преобразования китайского пиньиня (См. документацию проекта > [Китайский Пиньинь](https://docs.autojs6.com/#/pinyin4j)) @@ -171,6 +171,7 @@ AutoJs6 разработан на основе финальной версии * `Улучшение` Максимальное восстановление ключевой информации для проектов скриптов в случае повреждения файла project.json * `Улучшение` Автоматическая конвертация упрощенного китайского в пиньинь (включая многозначные символы) для суффиксов пакетов, создаваемых при упаковке отдельных файлов * `Улучшение` Поддержка отрицательных аргументов в методах UiSelector#findOnce и UiSelector#find +* `Улучшение` Улучшена адаптивность методов app.startActivity/startDualActivity * `Улучшение` Поддержка дополнительных сокращённых форм префиксов имён пакетов в селекторах, связанных с элементами UI и className (например, RecyclerView, Snackbar и т. д.) * `Улучшение` Синхронизировать последний код из официального репозитория Rhino и адаптировать его к существующему проекту * `Улучшение` Изменения версий некоторых зависимостей или локальных библиотек _[`CHANGELOG.md`](http://project.autojs6.com/blob/master/app/src/main/assets-app/doc/CHANGELOG.md#v661)_ @@ -370,7 +371,7 @@ SDK Tools (SDK Инструменты) (находится в правом ок Для проекта AutoJs6 требуется версия `JDK (Java Development Kit)` не ниже `17`, но рекомендуется не ниже `19`. -По состоянию на 26 December 2024 г. AutoJs6 поддерживает JDK максимальной версии `23`. +По состоянию на 27 December 2024 г. AutoJs6 поддерживает JDK максимальной версии `23`. > Примечание: Если на компьютере уже установлен JDK и версия соответствует указанным требованиям, этот раздел можно пропустить. diff --git a/.readme/README-zh-Hans.md b/.readme/README-zh-Hans.md index c2c011e6..d2717f12 100644 --- a/.readme/README-zh-Hans.md +++ b/.readme/README-zh-Hans.md @@ -156,7 +156,7 @@ AutoJs6 在 Auto.js 最终项目的基础上, 于 `2021/12/01` 进行二次开 # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `新增` pinyin 模块, 用于汉语拼音转换 (参阅 项目文档 > [汉语拼音](https://docs.autojs6.com/#/pinyin)) * `新增` pinyin4j 模块, 用于汉语拼音转换 (参阅 项目文档 > [汉语拼音](https://docs.autojs6.com/#/pinyin4j)) @@ -171,6 +171,7 @@ AutoJs6 在 Auto.js 最终项目的基础上, 于 `2021/12/01` 进行二次开 * `优化` 脚本项目识别在 project.json 损坏情况下尽可能还原关键信息 * `优化` 打包单文件时自动生成的包名后缀支持将简体中文转换为拼音 (支持多音字) * `优化` UiSelector#findOnce 及 UiSelector#find 方法支持负数参数 +* `优化` app.startActivity/startDualActivity 方法增强适配性 * `优化` UI 元素及 className 相关选择器支持更多的包名前缀省略形式 (如 RecyclerView, Snackbar 等) * `优化` 同步最新的 Rhino 引擎官方上游代码并进行必要的代码适配 * `优化` 部分依赖或本地库版本调整 _[`CHANGELOG.md`](http://project.autojs6.com/blob/master/app/src/main/assets-app/doc/CHANGELOG.md#v661)_ @@ -370,7 +371,7 @@ SDK Tools (SDK 工具) (位于右侧窗口) AutoJs6 项目依赖的 `JDK (Java 开发工具包)` 发行版本不低于 `17`, 但建议不低于 `19`. -截至 2024 年 12 月 26 日, AutoJs6 可支持 JDK 最高版本为 `23`. +截至 2024 年 12 月 27 日, AutoJs6 可支持 JDK 最高版本为 `23`. > 注: 如果计算机系统已安装 JDK 且版本满足上述要求, 则可跳过此小节内容. diff --git a/.readme/README-zh-Hant-HK.md b/.readme/README-zh-Hant-HK.md index e6534944..88eae7fc 100644 --- a/.readme/README-zh-Hant-HK.md +++ b/.readme/README-zh-Hant-HK.md @@ -156,7 +156,7 @@ AutoJs6 在 Auto.js 最終項目的基礎上, 於 `2021/12/01` 進行二次開 # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `新增` pinyin 模塊, 用於漢語拼音轉換 (參閲 項目文檔 > [漢語拼音](https://docs.autojs6.com/#/pinyin)) * `新增` pinyin4j 模塊, 用於漢語拼音轉換 (參閲 項目文檔 > [漢語拼音](https://docs.autojs6.com/#/pinyin4j)) @@ -171,6 +171,7 @@ AutoJs6 在 Auto.js 最終項目的基礎上, 於 `2021/12/01` 進行二次開 * `優化` 腳本項目識別在 project.json 損壞情況下儘可能還原關鍵信息 * `優化` 打包單文件時自動生成的包名後綴支持將簡體中文轉換為拼音 (支持多音字) * `優化` UiSelector#findOnce 及 UiSelector#find 方法支持負數參數 +* `優化` app.startActivity/startDualActivity 方法增強適配性 * `優化` UI 元素及 className 相關選擇器支持更多的包名前綴省略形式 (如 RecyclerView, Snackbar 等) * `優化` 同步最新的 Rhino 引擎官方上游代碼並進行必要的代碼適配 * `優化` 部分依賴或本地庫版本調整 _[`CHANGELOG.md`](http://project.autojs6.com/blob/master/app/src/main/assets-app/doc/CHANGELOG.md#v661)_ @@ -370,7 +371,7 @@ SDK Tools (SDK 工具) (位於右側窗口) AutoJs6 項目依賴的 `JDK (Java 開發工具包)` 發行版本不低於 `17`, 但建議不低於 `19`. -截至 2024 年 12 月 26 日, AutoJs6 可支持 JDK 最高版本為 `23`. +截至 2024 年 12 月 27 日, AutoJs6 可支持 JDK 最高版本為 `23`. > 注: 如果計算機系統已安裝 JDK 且版本滿足上述要求, 則可跳過此小節內容. diff --git a/.readme/README-zh-Hant-TW.md b/.readme/README-zh-Hant-TW.md index 624f63c5..97d73ec1 100644 --- a/.readme/README-zh-Hant-TW.md +++ b/.readme/README-zh-Hant-TW.md @@ -156,7 +156,7 @@ AutoJs6 在 Auto.js 最終專案的基礎上, 於 `2021/12/01` 進行二次開 # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `新增` pinyin 模組, 用於漢語拼音轉換 (參閱 專案文件 > [漢語拼音](https://docs.autojs6.com/#/pinyin)) * `新增` pinyin4j 模組, 用於漢語拼音轉換 (參閱 專案文件 > [漢語拼音](https://docs.autojs6.com/#/pinyin4j)) @@ -171,6 +171,7 @@ AutoJs6 在 Auto.js 最終專案的基礎上, 於 `2021/12/01` 進行二次開 * `最佳化` 指令碼專案識別在 project.json 損壞情況下儘可能還原關鍵資訊 * `最佳化` 打包單檔案時自動生成的包名字尾支援將簡體中文轉換為拼音 (支援多音字) * `最佳化` UiSelector#findOnce 及 UiSelector#find 方法支援負數引數 +* `最佳化` app.startActivity/startDualActivity 方法增強適配性 * `最佳化` UI 元素及 className 相關選擇器支援更多的包名字首省略形式 (如 RecyclerView, Snackbar 等) * `最佳化` 同步最新的 Rhino 引擎官方上游程式碼並進行必要的程式碼適配 * `最佳化` 部分依賴或本地庫版本調整 _[`CHANGELOG.md`](http://project.autojs6.com/blob/master/app/src/main/assets-app/doc/CHANGELOG.md#v661)_ @@ -370,7 +371,7 @@ SDK Tools (SDK 工具) (位於右側視窗) AutoJs6 專案依賴的 `JDK (Java 開發工具包)` 發行版本不低於 `17`, 但建議不低於 `19`. -截至 2024 年 12 月 26 日, AutoJs6 可支援 JDK 最高版本為 `23`. +截至 2024 年 12 月 27 日, AutoJs6 可支援 JDK 最高版本為 `23`. > 注: 如果計算機系統已安裝 JDK 且版本滿足上述要求, 則可跳過此小節內容. diff --git a/README.md b/README.md index c2c011e6..d2717f12 100644 --- a/README.md +++ b/README.md @@ -156,7 +156,7 @@ AutoJs6 在 Auto.js 最终项目的基础上, 于 `2021/12/01` 进行二次开 # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `新增` pinyin 模块, 用于汉语拼音转换 (参阅 项目文档 > [汉语拼音](https://docs.autojs6.com/#/pinyin)) * `新增` pinyin4j 模块, 用于汉语拼音转换 (参阅 项目文档 > [汉语拼音](https://docs.autojs6.com/#/pinyin4j)) @@ -171,6 +171,7 @@ AutoJs6 在 Auto.js 最终项目的基础上, 于 `2021/12/01` 进行二次开 * `优化` 脚本项目识别在 project.json 损坏情况下尽可能还原关键信息 * `优化` 打包单文件时自动生成的包名后缀支持将简体中文转换为拼音 (支持多音字) * `优化` UiSelector#findOnce 及 UiSelector#find 方法支持负数参数 +* `优化` app.startActivity/startDualActivity 方法增强适配性 * `优化` UI 元素及 className 相关选择器支持更多的包名前缀省略形式 (如 RecyclerView, Snackbar 等) * `优化` 同步最新的 Rhino 引擎官方上游代码并进行必要的代码适配 * `优化` 部分依赖或本地库版本调整 _[`CHANGELOG.md`](http://project.autojs6.com/blob/master/app/src/main/assets-app/doc/CHANGELOG.md#v661)_ @@ -370,7 +371,7 @@ SDK Tools (SDK 工具) (位于右侧窗口) AutoJs6 项目依赖的 `JDK (Java 开发工具包)` 发行版本不低于 `17`, 但建议不低于 `19`. -截至 2024 年 12 月 26 日, AutoJs6 可支持 JDK 最高版本为 `23`. +截至 2024 年 12 月 27 日, AutoJs6 可支持 JDK 最高版本为 `23`. > 注: 如果计算机系统已安装 JDK 且版本满足上述要求, 则可跳过此小节内容. diff --git a/app/src/main/assets-app/doc/CHANGELOG-ar.md b/app/src/main/assets-app/doc/CHANGELOG-ar.md index 23d3c58b..80a17b62 100644 --- a/app/src/main/assets-app/doc/CHANGELOG-ar.md +++ b/app/src/main/assets-app/doc/CHANGELOG-ar.md @@ -6,7 +6,7 @@ # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `إضافة جديدة` وحدة Pinyin لتحويل النصوص الصينية إلى بينيين (راجع وثائق المشروع > [البينيين الصيني](https://docs.autojs6.com/#/pinyin)) * `إضافة جديدة` وحدة Pinyin4j لتحويل النصوص الصينية إلى بينيين (راجع وثائق المشروع > [البينيين الصيني](https://docs.autojs6.com/#/pinyin4j)) @@ -21,6 +21,7 @@ * `تحسين` استعادة أكبر قدر ممكن من المعلومات الأساسية لمشاريع النصوص عند تلف ملف project.json * `تحسين` تحويل اللغة الصينية المبسطة تلقائيًا إلى نظام بينيين (بما في ذلك الحروف متعددة النغمات) عند توليد اللواحق للأسماء في الملفات المفردة * `تحسين` دعم الوسائط السلبية في الطرق UiSelector#findOnce و UiSelector#find +* `تحسين` تم تحسين تكيفية أساليب app.startActivity/startDualActivity * `تحسين` دعم أشكال مختصرة إضافية لبادئات الأسماء في المصفوفات المرتبطة بعناصر الواجهة (مثل RecyclerView و Snackbar وغيرها) * `تحسين` مزامنة أحدث كود من المصدر الرئيسي لمحرك Rhino وتكييفه مع المشروع الحالي * `التبعيات` إضافة Pinyin4j الإصدار 2.5.0 diff --git a/app/src/main/assets-app/doc/CHANGELOG-en.md b/app/src/main/assets-app/doc/CHANGELOG-en.md index c7c4693d..f32b8738 100644 --- a/app/src/main/assets-app/doc/CHANGELOG-en.md +++ b/app/src/main/assets-app/doc/CHANGELOG-en.md @@ -6,7 +6,7 @@ # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `Feature` Pinyin module for Chinese Pinyin conversion (Refer to Project Documentation > [Chinese Pinyin](https://docs.autojs6.com/#/pinyin)) * `Feature` Pinyin4j module for Chinese Pinyin conversion (Refer to Project Documentation > [Chinese Pinyin](https://docs.autojs6.com/#/pinyin4j)) @@ -21,6 +21,7 @@ * `Improvement` Recover as much critical information as possible for script projects when project.json is corrupted * `Improvement` Automatically convert Simplified Chinese to Pinyin (including multi-tone characters) for generated package name suffixes when packaging single files * `Improvement` Support for negative arguments in the UiSelector#findOnce and UiSelector#find methods +* `Improvement` Enhanced adaptability of app.startActivity/startDualActivity methods * `Improvement` UI elements and className-related selectors now support more package name prefix omission forms (e.g., RecyclerView, Snackbar, etc.) * `Improvement` Synchronize with the latest upstream code of the Rhino engine and adapt it to the existing project * `Dependency` Added Pinyin4j version 2.5.0 diff --git a/app/src/main/assets-app/doc/CHANGELOG-es.md b/app/src/main/assets-app/doc/CHANGELOG-es.md index 55baff13..e0f7a2fb 100644 --- a/app/src/main/assets-app/doc/CHANGELOG-es.md +++ b/app/src/main/assets-app/doc/CHANGELOG-es.md @@ -6,7 +6,7 @@ # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `Nuevo` Módulo Pinyin para la conversión de pinyin en chino (Consulte la documentación del proyecto > [Pinyin chino](https://docs.autojs6.com/#/pinyin)) * `Nuevo` Módulo Pinyin4j para la conversión de pinyin en chino (Consulte la documentación del proyecto > [Pinyin chino](https://docs.autojs6.com/#/pinyin4j)) @@ -21,6 +21,7 @@ * `Mejora` Recuperar la mayor cantidad de información crítica posible para proyectos de scripts cuando el archivo project.json está dañado * `Mejora` Convertir automáticamente chino simplificado a Pinyin (incluyendo caracteres con múltiples tonos) para los sufijos de nombres de paquetes generados al empaquetar archivos individuales * `Mejora` Soporte para argumentos negativos en los métodos UiSelector#findOnce y UiSelector#find +* `Mejora` Se mejoró la adaptabilidad de los métodos app.startActivity/startDualActivity * `Mejora` Mayor soporte para formas abreviadas de prefijos de nombres de paquetes en selectores relacionados con elementos UI y className (por ejemplo, RecyclerView, Snackbar, etc.) * `Mejora` Sincronizar el código más reciente del upstream del motor Rhino y adaptarlo al proyecto existente * `Dependencia` Agregado Pinyin4j versión 2.5.0 diff --git a/app/src/main/assets-app/doc/CHANGELOG-fr.md b/app/src/main/assets-app/doc/CHANGELOG-fr.md index a29a65d6..0d847bd4 100644 --- a/app/src/main/assets-app/doc/CHANGELOG-fr.md +++ b/app/src/main/assets-app/doc/CHANGELOG-fr.md @@ -6,7 +6,7 @@ # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `Fonctionnalité` Module Pinyin pour la conversion du pinyin chinois (Consultez la documentation du projet > [Pinyin chinois](https://docs.autojs6.com/#/pinyin)) * `Fonctionnalité` Module Pinyin4j pour la conversion du pinyin chinois (Consultez la documentation du projet > [Pinyin chinois](https://docs.autojs6.com/#/pinyin4j)) @@ -21,6 +21,7 @@ * `Amélioration` Récupérer autant d'informations critiques que possible pour les projets de script en cas de corruption du fichier project.json * `Amélioration` Convertir automatiquement le chinois simplifié en pinyin (y compris les caractères à tons multiples) pour les suffixes de noms de paquet générés lors de l'empaquetage de fichiers uniques * `Amélioration` Soutien des arguments négatifs dans les méthodes UiSelector#findOnce et UiSelector#find +* `Amélioration` Amélioration de l'adaptabilité des méthodes app.startActivity/startDualActivity * `Amélioration` Prise en charge des formes abrégées supplémentaires pour les préfixes de noms de paquet dans les sélecteurs liés aux éléments de l'interface utilisateur et aux className (par exemple RecyclerView, Snackbar, etc.) * `Amélioration` Synchroniser le code en amont le plus récent du moteur Rhino et l'adapter au projet existant * `Dépendance` Ajout de Pinyin4j version 2.5.0 diff --git a/app/src/main/assets-app/doc/CHANGELOG-ja.md b/app/src/main/assets-app/doc/CHANGELOG-ja.md index 5630497e..c4904416 100644 --- a/app/src/main/assets-app/doc/CHANGELOG-ja.md +++ b/app/src/main/assets-app/doc/CHANGELOG-ja.md @@ -6,7 +6,7 @@ # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `新機能` 中国語のピンイン変換用の Pinyin モジュール (プロジェクトドキュメントを参照 > [中国語ピンイン](https://docs.autojs6.com/#/pinyin)) * `新機能` 中国語のピンイン変換用の Pinyin4j モジュール (プロジェクトドキュメントを参照 > [中国語ピンイン](https://docs.autojs6.com/#/pinyin4j)) @@ -21,6 +21,7 @@ * `改善` project.json ファイルが破損した場合でも, スクリプトプロジェクトの重要な情報を可能な限り復元 * `改善` 単一ファイルをパッケージ化する際に, 自動生成されるパッケージ名のサフィックスを簡体字中国語からピンインに変換 (多音字対応) * `改善` UiSelector#findOnce と UiSelector#find メソッドで負の引数をサポート +* `改善` app.startActivity/startDualActivity メソッドの適応性が向上しました * `改善` UI要素や className に関連するセレクターが RecyclerView や Snackbar などのパッケージ名プレフィックス省略形式にさらに対応 * `改善` Rhino エンジンの最新の上流コードを同期し, 既存のプロジェクトに適応させる * `依存関係` Pinyin4j バージョン 2.5.0 を追加 diff --git a/app/src/main/assets-app/doc/CHANGELOG-ko.md b/app/src/main/assets-app/doc/CHANGELOG-ko.md index 5550b7cf..a489c3f5 100644 --- a/app/src/main/assets-app/doc/CHANGELOG-ko.md +++ b/app/src/main/assets-app/doc/CHANGELOG-ko.md @@ -6,7 +6,7 @@ # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `추가` 중국어 병음 변환을 위한 Pinyin 모듈 (프로젝트 문서 참고 > [중국어 병음](https://docs.autojs6.com/#/pinyin)) * `추가` 중국어 병음 변환을 위한 Pinyin4j 모듈 (프로젝트 문서 참고 > [중국어 병음](https://docs.autojs6.com/#/pinyin4j)) @@ -21,6 +21,7 @@ * `개선` project.json 파일이 손상된 경우에도 가능한 한 중요한 정보를 복원 * `개선` 단일 파일을 패키징할 때 자동 생성된 패키지 이름 접미사를 간체자로부터 병음으로 변환 (다음 음도 지원) * `개선` UiSelector#findOnce 및 UiSelector#find 메서드에서 음수 인수 지원 +* `개선` app.startActivity/startDualActivity 메서드의 적응성이 향상되었습니다 * `개선` UI 요소 및 className 관련 선택자가 RecyclerView, Snackbar 등과 같은 더욱 다양한 패키지 이름 접두사 생략 형식을 지원 * `개선` Rhino 엔진의 최신 업스트림 코드를 동기화하고 기존 프로젝트에 맞게 조정합니다 * `의존성` Pinyin4j 버전 2.5.0 추가 diff --git a/app/src/main/assets-app/doc/CHANGELOG-ru.md b/app/src/main/assets-app/doc/CHANGELOG-ru.md index 183bc67c..d6d25873 100644 --- a/app/src/main/assets-app/doc/CHANGELOG-ru.md +++ b/app/src/main/assets-app/doc/CHANGELOG-ru.md @@ -6,7 +6,7 @@ # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `Новое` Модуль Pinyin для преобразования китайского пиньиня (См. документацию проекта > [Китайский Пиньинь](https://docs.autojs6.com/#/pinyin)) * `Новое` Модуль Pinyin4j для преобразования китайского пиньиня (См. документацию проекта > [Китайский Пиньинь](https://docs.autojs6.com/#/pinyin4j)) @@ -21,6 +21,7 @@ * `Улучшение` Максимальное восстановление ключевой информации для проектов скриптов в случае повреждения файла project.json * `Улучшение` Автоматическая конвертация упрощенного китайского в пиньинь (включая многозначные символы) для суффиксов пакетов, создаваемых при упаковке отдельных файлов * `Улучшение` Поддержка отрицательных аргументов в методах UiSelector#findOnce и UiSelector#find +* `Улучшение` Улучшена адаптивность методов app.startActivity/startDualActivity * `Улучшение` Поддержка дополнительных сокращённых форм префиксов имён пакетов в селекторах, связанных с элементами UI и className (например, RecyclerView, Snackbar и т. д.) * `Улучшение` Синхронизировать последний код из официального репозитория Rhino и адаптировать его к существующему проекту * `Зависимость` Добавлена Pinyin4j версии 2.5.0 diff --git a/app/src/main/assets-app/doc/CHANGELOG-zh-Hans.md b/app/src/main/assets-app/doc/CHANGELOG-zh-Hans.md index 90f73568..f65f7022 100644 --- a/app/src/main/assets-app/doc/CHANGELOG-zh-Hans.md +++ b/app/src/main/assets-app/doc/CHANGELOG-zh-Hans.md @@ -6,7 +6,7 @@ # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `新增` pinyin 模块, 用于汉语拼音转换 (参阅 项目文档 > [汉语拼音](https://docs.autojs6.com/#/pinyin)) * `新增` pinyin4j 模块, 用于汉语拼音转换 (参阅 项目文档 > [汉语拼音](https://docs.autojs6.com/#/pinyin4j)) @@ -21,6 +21,7 @@ * `优化` 脚本项目识别在 project.json 损坏情况下尽可能还原关键信息 * `优化` 打包单文件时自动生成的包名后缀支持将简体中文转换为拼音 (支持多音字) * `优化` UiSelector#findOnce 及 UiSelector#find 方法支持负数参数 +* `优化` app.startActivity/startDualActivity 方法增强适配性 * `优化` UI 元素及 className 相关选择器支持更多的包名前缀省略形式 (如 RecyclerView, Snackbar 等) * `优化` 同步最新的 Rhino 引擎官方上游代码并进行必要的代码适配 * `依赖` 附加 Pinyin4j 版本 2.5.0 diff --git a/app/src/main/assets-app/doc/CHANGELOG-zh-Hant-HK.md b/app/src/main/assets-app/doc/CHANGELOG-zh-Hant-HK.md index 3e6a1814..4c1c5e37 100644 --- a/app/src/main/assets-app/doc/CHANGELOG-zh-Hant-HK.md +++ b/app/src/main/assets-app/doc/CHANGELOG-zh-Hant-HK.md @@ -6,7 +6,7 @@ # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `新增` pinyin 模塊, 用於漢語拼音轉換 (參閲 項目文檔 > [漢語拼音](https://docs.autojs6.com/#/pinyin)) * `新增` pinyin4j 模塊, 用於漢語拼音轉換 (參閲 項目文檔 > [漢語拼音](https://docs.autojs6.com/#/pinyin4j)) @@ -21,6 +21,7 @@ * `優化` 腳本項目識別在 project.json 損壞情況下儘可能還原關鍵信息 * `優化` 打包單文件時自動生成的包名後綴支持將簡體中文轉換為拼音 (支持多音字) * `優化` UiSelector#findOnce 及 UiSelector#find 方法支持負數參數 +* `優化` app.startActivity/startDualActivity 方法增強適配性 * `優化` UI 元素及 className 相關選擇器支持更多的包名前綴省略形式 (如 RecyclerView, Snackbar 等) * `優化` 同步最新的 Rhino 引擎官方上游代碼並進行必要的代碼適配 * `依賴` 附加 Pinyin4j 版本 2.5.0 diff --git a/app/src/main/assets-app/doc/CHANGELOG-zh-Hant-TW.md b/app/src/main/assets-app/doc/CHANGELOG-zh-Hant-TW.md index 4f54900b..2b8a2f25 100644 --- a/app/src/main/assets-app/doc/CHANGELOG-zh-Hant-TW.md +++ b/app/src/main/assets-app/doc/CHANGELOG-zh-Hant-TW.md @@ -6,7 +6,7 @@ # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `新增` pinyin 模組, 用於漢語拼音轉換 (參閱 專案文件 > [漢語拼音](https://docs.autojs6.com/#/pinyin)) * `新增` pinyin4j 模組, 用於漢語拼音轉換 (參閱 專案文件 > [漢語拼音](https://docs.autojs6.com/#/pinyin4j)) @@ -21,6 +21,7 @@ * `最佳化` 指令碼專案識別在 project.json 損壞情況下儘可能還原關鍵資訊 * `最佳化` 打包單檔案時自動生成的包名字尾支援將簡體中文轉換為拼音 (支援多音字) * `最佳化` UiSelector#findOnce 及 UiSelector#find 方法支援負數引數 +* `最佳化` app.startActivity/startDualActivity 方法增強適配性 * `最佳化` UI 元素及 className 相關選擇器支援更多的包名字首省略形式 (如 RecyclerView, Snackbar 等) * `最佳化` 同步最新的 Rhino 引擎官方上游程式碼並進行必要的程式碼適配 * `依賴` 附加 Pinyin4j 版本 2.5.0 diff --git a/app/src/main/assets-app/doc/CHANGELOG.md b/app/src/main/assets-app/doc/CHANGELOG.md index 90f73568..f65f7022 100644 --- a/app/src/main/assets-app/doc/CHANGELOG.md +++ b/app/src/main/assets-app/doc/CHANGELOG.md @@ -6,7 +6,7 @@ # v6.6.1 -###### 2024/12/26 +###### 2024/12/27 * `新增` pinyin 模块, 用于汉语拼音转换 (参阅 项目文档 > [汉语拼音](https://docs.autojs6.com/#/pinyin)) * `新增` pinyin4j 模块, 用于汉语拼音转换 (参阅 项目文档 > [汉语拼音](https://docs.autojs6.com/#/pinyin4j)) @@ -21,6 +21,7 @@ * `优化` 脚本项目识别在 project.json 损坏情况下尽可能还原关键信息 * `优化` 打包单文件时自动生成的包名后缀支持将简体中文转换为拼音 (支持多音字) * `优化` UiSelector#findOnce 及 UiSelector#find 方法支持负数参数 +* `优化` app.startActivity/startDualActivity 方法增强适配性 * `优化` UI 元素及 className 相关选择器支持更多的包名前缀省略形式 (如 RecyclerView, Snackbar 等) * `优化` 同步最新的 Rhino 引擎官方上游代码并进行必要的代码适配 * `依赖` 附加 Pinyin4j 版本 2.5.0 diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/app/App.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/app/App.kt index 31a96881..2eb6fb43 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/app/App.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/app/App.kt @@ -18,11 +18,13 @@ import org.autojs.autojs.runtime.api.AppUtils.Companion.BroadcastShortForm import org.autojs.autojs.runtime.api.WrappedShizuku import org.autojs.autojs.runtime.api.augment.Augmentable import org.autojs.autojs.runtime.api.augment.shell.Shell -import org.autojs.autojs.runtime.exception.WrappedIllegalArgumentException import org.autojs.autojs.runtime.exception.ShouldNeverHappenException +import org.autojs.autojs.runtime.exception.WrappedIllegalArgumentException import org.autojs.autojs.util.RhinoUtils +import org.autojs.autojs.util.RhinoUtils.UNDEFINED import org.autojs.autojs.util.RhinoUtils.coerceBoolean import org.autojs.autojs.util.RhinoUtils.coerceString +import org.autojs.autojs.util.RhinoUtils.js_object_assign import org.autojs.autojs.util.RhinoUtils.newNativeArray import org.autojs.autojs.util.RhinoUtils.newNativeObject import org.autojs.autojs.util.RhinoUtils.undefined @@ -56,6 +58,7 @@ class App(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { ::sendLocalBroadcastSync.name, ::parseUri.name, ::openUrl.name, + ::openDualUrl.name, ::getUriForFile.name, ::getAppByAlias.name, ::launch.name to AS_GLOBAL, @@ -98,131 +101,117 @@ class App(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { @JvmStatic @RhinoFunctionBody - fun intentRhinoWithRuntime(scriptRuntime: ScriptRuntime, o: Any?): Intent { - - if (o is Intent) return o - - require(o is NativeObject) { - "Argument for app.intent must be a JavaScript Object rather than ${o?.javaClass?.name ?: "null"}" - } - - val intent = Intent() - - if (!o.prop("url").isJsNullish()) { - o.put("data", o, parseIntentUrl(scriptRuntime, o)) - } - - if (!o.prop("package").isJsNullish()) { - if (o.prop("packageName").isJsNullish()) { - o.put("packageName", o, o.prop("package")) - } - } else { - if (!o.prop("packageName").isJsNullish()) { - o.put("package", o, o.prop("packageName")) - } - } - - if (!o.prop("packageName").isJsNullish()) { - val k = Context.toString(o.prop("packageName")) - if (k in presetPackageNames) { - o.defineProp("packageName", presetPackageNames[k]) - } - if (!o.prop("className").isJsNullish()) { - intent.setClassName(coerceString(o.prop("packageName")), parseClassName(o)) - } else { - // @Hint by SuperMonster003 on Jun 23, 2020. - // ! the Intent can only match the components - // ! in the given application package with setPackage(). - // ! Otherwise, if there's more than one app that can handle the intent, - // ! the system presents the user with a dialog to pick which app to use. - // ! zh-CN: - // ! Intent 只能匹配通过 setPackage() 设置的给定应用包中的组件. - // ! 否则, 如果有多个应用可以处理该 Intent, - // ! 系统会向用户展示一个对话框, 让用户选择要使用哪个应用. - intent.setPackage(coerceString(o.prop("packageName"))) - } - } - - if (o.prop("extras") is NativeObject) { - (o.prop("extras") as NativeObject).entries.forEach { entry -> - val (key, value) = entry - RhinoUtils.putExtraForIntent(intent, key, value) - } - } - - if (!o.prop("category").isJsNullish()) { - if (o.prop("category") is Iterable<*>) { - (o.prop("category") as Iterable<*>).forEach { cat -> - intent.addCategory(Context.toString(cat)) - } - } else { - intent.addCategory(Context.toString(o.prop("category"))) - } - } - - if (!o.prop("action").isJsNullish()) { - intent.setAction(parseIntentAction(o.prop("action"))) - } - - if (!o.prop("flags").isJsNullish()) { - intent.setFlags(parseIntentFlags(o.prop("flags"))) - } - - if (!o.prop("type").isJsNullish()) { - if (!o.prop("data").isJsNullish()) { - intent.setDataAndType(parseUriRhinoWithRuntime(scriptRuntime, o.prop("data")), Context.toString(o.prop("type"))) - } else { - intent.setType(Context.toString(o.prop("type"))) - } - } else { - if (!o.prop("data").isJsNullish()) { - intent.setData(Uri.parse(Context.toString(o.prop("data")))) - } - } - - return intent + fun intentRhinoWithRuntime(scriptRuntime: ScriptRuntime, o: Any?): Intent = when (o) { + is Intent -> o + is NativeObject -> Intent().configure(scriptRuntime, o) + else -> throw IllegalArgumentException("Argument for app.intent must be either an Intent or a JavaScript Object rather than ${o.jsBrief()}") } @JvmStatic @RhinoRuntimeFunctionInterface - fun startActivity(scriptRuntime: ScriptRuntime, args: Array): Unit = ensureArgumentsOnlyOne(args) { o -> - when (o) { + @Suppress("HttpUrlsUsage") + fun startActivity(scriptRuntime: ScriptRuntime, args: Array): Undefined = ensureArgumentsLengthInRange(args, 1..2) { argList -> + val (obj, options) = argList + when (obj) { is String -> when { - o.contains("://") -> { - openUrlRhino(o) - } - rexWebSiteWithoutProtocol.matches(o) -> { - @Suppress("HttpUrlsUsage") - openUrlRhino("http://$o") - } + !options.isJsNullish() -> throw IllegalArgumentException("Method app.startActivity can only have one argument when argument[0] is String") + obj.contains("://") -> openUrlRhino(obj) + rexWebSiteWithoutProtocol.matches(obj) -> openUrlRhino("http://$obj") else -> runCatching { - startActivityWithGlobalContext(Intent(globalContext, ActivityShortForm.valueOf(o.uppercase()).classType)) + startActivityWithGlobalContext(Intent(globalContext, ActivityShortForm.valueOf(obj.uppercase()).classType)) }.getOrElse { when (it) { - is WrappedIllegalArgumentException -> throw WrappedIllegalArgumentException("Activity short form $o cannot be found") + is WrappedIllegalArgumentException -> throw WrappedIllegalArgumentException("Activity short form $obj cannot be found") else -> throw it } } } is Intent -> when { - WrappedShizuku.isOperational() -> WrappedShizuku.execCommand("am start ${toIntentToShell(scriptRuntime, o)}") - else -> startActivityWithGlobalContext(o) + options.isJsNullish() -> startActivityWithGlobalContext(obj) + options is NativeObject -> obj.configure(scriptRuntime, options).let { configuredIntent -> + when { + checkDualProperty(options) -> startDualActivity(scriptRuntime, args) + checkRootProperty(options) && RootUtils.isRootAvailable() -> { + val tmpIntent = configuredIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + Shell.execCommand(scriptRuntime, arrayOf("am start ${intentToShellRhino(tmpIntent)}", /* withRoot = */ true)).throwIfError() + } + checkShizukuProperty(options) && WrappedShizuku.isOperational() -> { + val tmpIntent = configuredIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + WrappedShizuku.execCommand("am start ${intentToShellRhino(tmpIntent)}").throwIfError() + } + else -> startActivityWithGlobalContext(configuredIntent) + } + } + else -> throw IllegalArgumentException("Argument[1] for app.startActivity must be a JavaScript Object when argument[0] is Intent") } - is URI -> openUrlRhino(o) - is NativeObject -> when { - checkDualProperty(o) -> startDualActivity(scriptRuntime, args) - checkRootProperty(o) -> Shell.execCommand(scriptRuntime, arrayOf("am start ${toIntentToShell(scriptRuntime, o)}", true)).throwIfError() - WrappedShizuku.isOperational() -> WrappedShizuku.execCommand("am start ${toIntentToShell(scriptRuntime, o)}").throwIfError() - else -> startActivityWithGlobalContext(scriptRuntime, o) + is URI -> when { + !options.isJsNullish() -> throw IllegalArgumentException("Method app.startActivity can only have one argument when argument[0] is URI") + else -> openUrlRhino(obj) } - else -> startActivityWithGlobalContext(scriptRuntime, o) + is NativeObject -> { + val opt = when { + options.isJsNullish() -> obj + options is NativeObject -> js_object_assign(js_object_assign(newNativeObject(), obj), options) as NativeObject + else -> throw IllegalArgumentException("Argument[1] for app.startActivity must be a JavaScript Object when argument[0] is JavaScript Object") + } + when { + checkDualProperty(opt) -> startDualActivity(scriptRuntime, args) + checkRootProperty(opt) && RootUtils.isRootAvailable() -> { + val tmpIntent = intentRhinoWithRuntime(scriptRuntime, opt).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) } + Shell.execCommand(scriptRuntime, arrayOf("am start ${intentToShellRhino(tmpIntent)}", /* withRoot = */ true)).throwIfError() + } + checkShizukuProperty(opt) && WrappedShizuku.isOperational() -> { + val tmpIntent = intentRhinoWithRuntime(scriptRuntime, opt).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) } + val intentCommand = intentToShellRhino(tmpIntent) + WrappedShizuku.execCommand("am start $intentCommand").throwIfError() + } + else -> startActivityWithGlobalContext(scriptRuntime, opt) + } + } + else -> throw IllegalArgumentException("Unknown type of argument[0]: ${obj.jsBrief()}; method: app.startActivity") } + UNDEFINED } @JvmStatic @RhinoRuntimeFunctionInterface - fun startDualActivity(scriptRuntime: ScriptRuntime, args: Array): Unit = ensureArgumentsOnlyOne(args) { intent -> - execCommandByDualUser(scriptRuntime, intent) + @Suppress("HttpUrlsUsage") + fun startDualActivity(scriptRuntime: ScriptRuntime, args: Array): Undefined = ensureArgumentsLengthInRange(args, 1..2) { argList -> + val (obj, options) = argList + when (obj) { + is String -> when { + !options.isJsNullish() -> throw IllegalArgumentException("Method app.startDualActivity can only have one argument when argument[0] is String") + obj.contains("://") -> openDualUrlRhino(scriptRuntime, obj) + rexWebSiteWithoutProtocol.matches(obj) -> openDualUrlRhino(scriptRuntime, "http://$obj") + else -> runCatching { + startActivityForDualUser(scriptRuntime, Intent(globalContext, ActivityShortForm.valueOf(obj.uppercase()).classType)) + }.getOrElse { + when (it) { + is WrappedIllegalArgumentException -> throw WrappedIllegalArgumentException("Activity short form $obj cannot be found") + else -> throw it + } + } + } + is Intent -> when { + options.isJsNullish() -> startActivityForDualUser(scriptRuntime, obj) + options is NativeObject -> startActivityForDualUser(scriptRuntime, obj.configure(scriptRuntime, options)) + else -> throw IllegalArgumentException("Argument[1] for app.startDualActivity must be a JavaScript Object when argument[0] is Intent") + } + is URI -> when { + !options.isJsNullish() -> throw IllegalArgumentException("Method app.startDualActivity can only have one argument when argument[0] is URI") + else -> openUrlRhino(obj) + } + is NativeObject -> { + val opt = when { + options.isJsNullish() -> obj + options is NativeObject -> js_object_assign(js_object_assign(newNativeObject(), obj), options) as NativeObject + else -> throw IllegalArgumentException("Argument[1] for app.startDualActivity must be a JavaScript Object when argument[0] is JavaScript Object") + } + startActivityForDualUser(scriptRuntime, opt) + } + else -> throw IllegalArgumentException("Unknown type of argument[0]: ${obj.jsBrief()}; method: app.startDualActivity") + } + UNDEFINED } @JvmStatic @@ -383,19 +372,20 @@ class App(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { @JvmStatic @RhinoRuntimeFunctionInterface - fun startService(scriptRuntime: ScriptRuntime, args: Array): Unit = ensureArgumentsOnlyOne(args) { o -> + fun startService(scriptRuntime: ScriptRuntime, args: Array): Undefined = ensureArgumentsOnlyOne(args) { o -> when { o is NativeObject && checkRootProperty(o) -> { @Suppress("SpellCheckingInspection") - Shell.execCommand(scriptRuntime, arrayOf(/* cmd = */ "am startservice ${intentToShellRhino(o)}", /* withRoot = */ 1)) + Shell.execCommand(scriptRuntime, arrayOf(/* cmd = */ "am startservice ${intentToShellRhino(o)}", /* withRoot = */ true)) } else -> globalContext.startService(intentRhinoWithRuntime(scriptRuntime, o)) } + UNDEFINED } @JvmStatic @RhinoRuntimeFunctionInterface - fun sendEmail(scriptRuntime: ScriptRuntime, args: Array): Unit = ensureArgumentsOnlyOne(args) { options -> + fun sendEmail(scriptRuntime: ScriptRuntime, args: Array): Undefined = ensureArgumentsOnlyOne(args) { options -> val optionsMap = options as? NativeObject ?: newNativeObject() val emailIntent = Intent(Intent.ACTION_SEND).apply { @@ -422,11 +412,13 @@ class App(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { } startActivityWithGlobalContext(Intent.createChooser(emailIntent, "Send Email")) + + UNDEFINED } @JvmStatic @RhinoRuntimeFunctionInterface - fun sendBroadcast(scriptRuntime: ScriptRuntime, args: Array): Unit = ensureArgumentsOnlyOne(args) { o -> + fun sendBroadcast(scriptRuntime: ScriptRuntime, args: Array): Undefined = ensureArgumentsOnlyOne(args) { o -> when (o) { is String -> { runCatching { @@ -443,11 +435,12 @@ class App(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { } else -> when { o is NativeObject && checkRootProperty(o) -> { - Shell.execCommand(scriptRuntime, arrayOf("am broadcast ${intentToShellRhino(o)}", 1)) + Shell.execCommand(scriptRuntime, arrayOf("am broadcast ${intentToShellRhino(o)}", /* withRoot = */ true)) } else -> globalContext.sendBroadcast(intentRhinoWithRuntime(scriptRuntime, o)) } } + UNDEFINED } @JvmStatic @@ -490,10 +483,20 @@ class App(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { openUrlRhino(it) } + @JvmStatic + @RhinoRuntimeFunctionInterface + fun openDualUrl(scriptRuntime: ScriptRuntime, args: Array): Undefined = ensureArgumentsOnlyOne(args) { + openDualUrlRhino(scriptRuntime, it) + } + @JvmStatic @RhinoFunctionBody fun openUrlRhino(url: Any?) = undefined { openUrlInternal(coerceString(url)) } + @JvmStatic + @RhinoFunctionBody + fun openDualUrlRhino(scriptRuntime: ScriptRuntime, url: Any?) = undefined { openDualUrlInternal(scriptRuntime, coerceString(url)) } + @Suppress("HttpUrlsUsage") fun openUrlInternal(url: String) { val prefix = "http://".takeUnless { url.contains("://") } ?: "" @@ -503,6 +506,15 @@ class App(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { .let { globalContext.startActivity(it) } } + @Suppress("HttpUrlsUsage") + private fun openDualUrlInternal(scriptRuntime: ScriptRuntime, url: String) { + val prefix = "http://".takeUnless { url.contains("://") } ?: "" + Intent(Intent.ACTION_VIEW) + .setData(Uri.parse(prefix + url)) + .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + .let { startActivityForDualUser(scriptRuntime, it) } + } + @JvmStatic @RhinoRuntimeFunctionInterface fun getUriForFile(scriptRuntime: ScriptRuntime, args: Array): Uri? = ensureArgumentsOnlyOne(args) { o -> @@ -559,7 +571,7 @@ class App(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { o is PresetApp -> launchDualPackageInternal(scriptRuntime, o.packageName) else -> launchDualPackageInternal(scriptRuntime, getAppByAliasRhino(o)?.packageName ?: Context.toString(o)) } - }.isSuccess + }.getOrElse { false } } @JvmStatic @@ -588,7 +600,7 @@ class App(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { launchDualPackageInternal(scriptRuntime, it.packageName) } ?: launchDualAppInternal(scriptRuntime, Context.toString(o)) } - }.isSuccess + }.getOrElse { false } } @JvmStatic @@ -656,7 +668,7 @@ class App(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { @JvmStatic @RhinoRuntimeFunctionInterface - fun uninstall(scriptRuntime: ScriptRuntime, args: Array): Unit = ensureArgumentsOnlyOne(args) { o -> + fun uninstall(scriptRuntime: ScriptRuntime, args: Array): Undefined = ensureArgumentsOnlyOne(args) { o -> when { o.isJsNullish() -> Unit o is PresetApp -> scriptRuntime.app.uninstall(o.packageName) @@ -664,11 +676,12 @@ class App(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { scriptRuntime.app.uninstall(it.packageName) } ?: scriptRuntime.app.uninstall(Context.toString(o)) } + UNDEFINED } @JvmStatic @RhinoRuntimeFunctionInterface - fun uninstallDual(scriptRuntime: ScriptRuntime, args: Array): Unit = ensureArgumentsOnlyOne(args) { o -> + fun uninstallDual(scriptRuntime: ScriptRuntime, args: Array): Undefined = ensureArgumentsOnlyOne(args) { o -> when { o.isJsNullish() -> Unit o is PresetApp -> uninstallDualInternal(scriptRuntime, o.packageName) @@ -676,6 +689,7 @@ class App(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { uninstallDualInternal(scriptRuntime, it.packageName) } ?: uninstallDualInternal(scriptRuntime, Context.toString(o)) } + UNDEFINED } // TODO by SuperMonster003 on May 23, 2024. @@ -728,10 +742,10 @@ class App(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { val packageName = getPackageName(scriptRuntime, argList) ?: return@ensureArgumentsLength false val command = "am force-stop $packageName" when { - RootUtils.isRootAvailable() -> Shell.execCommand(scriptRuntime, arrayOf(command, true)).code == 0 - WrappedShizuku.isOperational() -> WrappedShizuku.execCommand(command).code == 0 - else -> Shell.execCommand(scriptRuntime, arrayOf(command, false)).code == 0 - } + RootUtils.isRootAvailable() -> Shell.execCommand(scriptRuntime, arrayOf(command, /* withRoot = */ true)) + WrappedShizuku.isOperational() -> WrappedShizuku.execCommand(command) + else -> Shell.execCommand(scriptRuntime, arrayOf(command, /* withRoot = */ false)) + }.code == 0 } // @Hint by SuperMonster003 on Oct 30, 2024. @@ -743,7 +757,7 @@ class App(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { fun killDual(scriptRuntime: ScriptRuntime, args: Array): Boolean = ensureArgumentsLength(args, 1) { argList -> val packageName = getPackageName(scriptRuntime, argList) ?: return@ensureArgumentsLength false val command = "am force-stop $packageName" - runCatching { execCommandByDualUser(scriptRuntime, command, RootUtils.isRootAvailable()) }.isSuccess + runCatching { execCommandForDualUser(scriptRuntime, command, RootUtils.isRootAvailable(), WrappedShizuku.isOperational()) }.isSuccess } private fun parseClassName(o: NativeObject): String { @@ -761,11 +775,18 @@ class App(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { private fun parseIntentFlags(flags: Any?): Int { - fun parse(o: Any?) = + fun parse(o: Any?): Int = when (o) { - is String -> Intent::class.java.fields - .firstOrNull { it.name == "FLAG_${o.uppercase()}" } - ?.getInt(null) + is String -> { + if (o.contains("|")) { + o.split(Regex("\\s*\\|\\s*")).map(::parse).fold(0) { a, b -> a or b } + } else { + Intent::class.java.fields.firstOrNull { + val sanitizedInputRegex = Regex.escape(o.replace(Regex("\\W"), "_")) + it.name.matches(Regex("(flag_)?(activity_)?$sanitizedInputRegex(_task)?", RegexOption.IGNORE_CASE)) + }?.getInt(null) + } + } is Number -> o.toInt() else -> null } ?: throw WrappedIllegalArgumentException("Invalid flags: $o") @@ -830,21 +851,20 @@ class App(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { globalContext.startActivity(o.apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) }) } - private fun toIntentToShell(scriptRuntime: ScriptRuntime, intent: Any?) = intentToShellRhino(intentRhinoWithRuntime(scriptRuntime, intent)) - - private fun execCommandByDualUser(scriptRuntime: ScriptRuntime, intent: Any?) { - executeCommandForDualUser(scriptRuntime, { userIdentifier -> - "am start ${toIntentToShell(scriptRuntime, intent)} --user $userIdentifier" - }, intent is NativeObject && checkRootProperty(intent)) + private fun startActivityForDualUser(scriptRuntime: ScriptRuntime, o: Any?) { + val intent = intentRhinoWithRuntime(scriptRuntime, o).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) } + val command = "am start ${intentToShellRhino(intent)}" + when (o) { + is NativeObject -> { + val withRoot = o.inquire("root", ::coerceBoolean, true) + val withShizuku = o.inquire("shizuku", ::coerceBoolean, true) + execCommandForDualUser(scriptRuntime, command, withRoot, withShizuku) + } + else -> execCommandForDualUser(scriptRuntime, command) + } } - private fun execCommandByDualUser(scriptRuntime: ScriptRuntime, command: String, withRoot: Boolean) { - executeCommandForDualUser(scriptRuntime, { userIdentifier -> - "$command --user $userIdentifier" - }, withRoot) - } - - private fun executeCommandForDualUser(scriptRuntime: ScriptRuntime, commandSupplier: (Int) -> String, withRoot: Boolean) { + private fun execCommandForDualUser(scriptRuntime: ScriptRuntime, command: String, withRoot: Boolean = true, withShizuku: Boolean = true) { val userManager = globalContext.getSystemService(Class.forName("android.os.UserManager")) val getUserProfilesMethod = userManager.javaClass.getDeclaredMethod("getUserProfiles") @@ -861,11 +881,11 @@ class App(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { for (userHandle in userProfiles) { val currentUserIdentifier = getIdentifierMethod.invoke(userHandle) as Int if (currentUserIdentifier != processUserIdentifier) { - val command = commandSupplier(currentUserIdentifier) + val niceCommand = "$command --user $currentUserIdentifier" when { - withRoot -> Shell.execCommand(scriptRuntime, arrayOf(command, 1)) - WrappedShizuku.isOperational() -> WrappedShizuku.execCommand(command) - else -> Shell.execCommand(scriptRuntime, arrayOf(command, 0)) + withRoot && RootUtils.isRootAvailable() -> Shell.execCommand(scriptRuntime, arrayOf(niceCommand, /* withRoot = */ true)) + withShizuku && WrappedShizuku.isOperational() -> WrappedShizuku.execCommand(niceCommand) + else -> Shell.execCommand(scriptRuntime, arrayOf(niceCommand, /* withRoot = */ false)) }.throwIfError() } } @@ -875,32 +895,113 @@ class App(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { return o?.let { PresetApp.getAppByAlias(Context.toString(it)) } } - private fun launchDualPackageInternal(scriptRuntime: ScriptRuntime, o: String) { + private fun launchDualPackageInternal(scriptRuntime: ScriptRuntime, o: String): Boolean { val nicePackageName = getAppByAlias(scriptRuntime, arrayOf(o))?.packageName ?: (/* packageName = */ o) - val intent = globalContext.packageManager.getLaunchIntentForPackage(nicePackageName) ?: return - execCommandByDualUser(scriptRuntime, intent) + val intent = globalContext.packageManager.getLaunchIntentForPackage(nicePackageName) ?: return false + startActivityForDualUser(scriptRuntime, intent) + return true } - private fun launchDualAppInternal(scriptRuntime: ScriptRuntime, packageName: String) { - getPackageName(scriptRuntime, arrayOf(packageName))?.let { launchDualPackageInternal(scriptRuntime, it) } ?: false + private fun launchDualAppInternal(scriptRuntime: ScriptRuntime, packageName: String): Boolean { + return getPackageName(scriptRuntime, arrayOf(packageName))?.let { launchDualPackageInternal(scriptRuntime, it) } ?: false } private fun launchDualSettingsInternal(scriptRuntime: ScriptRuntime, packageName: String) { - execCommandByDualUser(scriptRuntime, Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply { - addCategory(Intent.CATEGORY_DEFAULT) - addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + startActivityForDualUser(scriptRuntime, Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply { data = Uri.parse("package:$packageName") }) } private fun uninstallDualInternal(scriptRuntime: ScriptRuntime, packageName: String) { - execCommandByDualUser(scriptRuntime, Intent(Intent.ACTION_DELETE, Uri.parse("package:$packageName"))) + startActivityForDualUser(scriptRuntime, Intent(Intent.ACTION_DELETE).apply { + data = Uri.parse("package:$packageName") + }) } private fun checkRootProperty(o: NativeObject) = o.inquire("root", ::coerceBoolean, false) + private fun checkShizukuProperty(o: NativeObject) = o.inquire("shizuku", ::coerceBoolean, false) && WrappedShizuku.isOperational() + private fun checkDualProperty(o: NativeObject) = o.inquire("dual", ::coerceBoolean, false) + private fun Intent.configure(scriptRuntime: ScriptRuntime, o: NativeObject): Intent { + val intent = this + + if (!o.prop("url").isJsNullish()) { + o.put("data", o, parseIntentUrl(scriptRuntime, o)) + } + + if (!o.prop("package").isJsNullish()) { + if (o.prop("packageName").isJsNullish()) { + o.put("packageName", o, o.prop("package")) + } + } else { + if (!o.prop("packageName").isJsNullish()) { + o.put("package", o, o.prop("packageName")) + } + } + + if (!o.prop("packageName").isJsNullish()) { + val k = Context.toString(o.prop("packageName")) + if (k in presetPackageNames) { + o.defineProp("packageName", presetPackageNames[k]) + } + if (!o.prop("className").isJsNullish()) { + intent.setClassName(coerceString(o.prop("packageName")), parseClassName(o)) + } else { + // @Hint by SuperMonster003 on Jun 23, 2020. + // ! the Intent can only match the components + // ! in the given application package with setPackage(). + // ! Otherwise, if there's more than one app that can handle the intent, + // ! the system presents the user with a dialog to pick which app to use. + // ! zh-CN: + // ! Intent 只能匹配通过 setPackage() 设置的给定应用包中的组件. + // ! 否则, 如果有多个应用可以处理该 Intent, + // ! 系统会向用户展示一个对话框, 让用户选择要使用哪个应用. + intent.setPackage(coerceString(o.prop("packageName"))) + } + } + + if (o.prop("extras") is NativeObject) { + (o.prop("extras") as NativeObject).entries.forEach { entry -> + val (key, value) = entry + RhinoUtils.putExtraForIntent(intent, key, value) + } + } + + if (!o.prop("category").isJsNullish()) { + if (o.prop("category") is Iterable<*>) { + (o.prop("category") as Iterable<*>).forEach { cat -> + intent.addCategory(Context.toString(cat)) + } + } else { + intent.addCategory(Context.toString(o.prop("category"))) + } + } + + if (!o.prop("action").isJsNullish()) { + intent.setAction(parseIntentAction(o.prop("action"))) + } + + if (!o.prop("flags").isJsNullish()) { + intent.setFlags(parseIntentFlags(o.prop("flags"))) + } + + if (!o.prop("type").isJsNullish()) { + if (!o.prop("data").isJsNullish()) { + intent.setDataAndType(parseUriRhinoWithRuntime(scriptRuntime, o.prop("data")), Context.toString(o.prop("type"))) + } else { + intent.setType(Context.toString(o.prop("type"))) + } + } else { + if (!o.prop("data").isJsNullish()) { + intent.setData(Uri.parse(Context.toString(o.prop("data")))) + } + } + + return intent + } + } } \ No newline at end of file diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/timers/Timers.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/timers/Timers.kt index 8dcbe054..2ee571fc 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/timers/Timers.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/timers/Timers.kt @@ -7,11 +7,13 @@ import org.autojs.autojs.extension.FlexibleArray import org.autojs.autojs.runtime.ScriptRuntime import org.autojs.autojs.runtime.api.augment.Augmentable import org.autojs.autojs.runtime.exception.ShouldNeverHappenException +import org.autojs.autojs.util.RhinoUtils.UNDEFINED import org.autojs.autojs.util.RhinoUtils.coerceFunction import org.autojs.autojs.util.RhinoUtils.coerceLongNumber import org.autojs.autojs.util.RhinoUtils.coerceNumber import org.autojs.autojs6.R import org.mozilla.javascript.BaseFunction +import org.mozilla.javascript.Undefined @Suppress("unused", "UNUSED_PARAMETER") open class Timers(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { @@ -89,10 +91,11 @@ open class Timers(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { @JvmStatic @RhinoRuntimeFunctionInterface - fun loop(scriptRuntime: ScriptRuntime, args: Array): Unit = ensureArgumentsIsEmpty(args) { + fun loop(scriptRuntime: ScriptRuntime, args: Array): Undefined = ensureArgumentsIsEmpty(args) { AutoJs.instance.globalConsole.warn("") AutoJs.instance.globalConsole.warn(AutoJs.instance.applicationContext.getString(R.string.error_abandoned_method, "loop")) AutoJs.instance.globalConsole.warn("") + UNDEFINED } @JvmStatic diff --git a/version.properties b/version.properties index 154f2aed..24a7b93e 100644 --- a/version.properties +++ b/version.properties @@ -1,5 +1,5 @@ -#Thu Dec 26 16:05:49 CST 2024 -BUILD_TIME=1735200349007 +#Fri Dec 27 19:33:23 CST 2024 +BUILD_TIME=1735299203014 COMPILE_SDK_VERSION=34 JAVA_VERSION=23 JAVA_VERSION_MIN_RADICAL=0 @@ -17,6 +17,6 @@ RAPID_OCR_OPENCV_MOBILE_LABEL_VERSION=13 RAPID_OCR_OPENCV_MOBILE_VERSION=4.5.3 TARGET_SDK_VERSION=34 TARGET_SDK_VERSION_INRT=29 -VERSION_BUILD=2926 +VERSION_BUILD=2929 VERSION_NAME=6.6.1 Alpha2 VSCODE_EXT_REQUIRED_VERSION=1.0.8