6.6.3 - Alpha - 打包单文件时自动读取并勾选已安装应用的声明权限 (issue #362)

This commit is contained in:
SuperMonster003
2025-04-18 17:41:14 +08:00
parent 102c058226
commit eb0e9141f7
39 changed files with 134 additions and 31 deletions

View File

@@ -24,6 +24,7 @@
* `تصليح` المشكلة التي كان فيها floaty.window/floaty.rawWindow لا يمكن تنفيذها في الخيوط الثانوية
* `تصليح` المشكلة التي كان فيها floaty.getClip قد لا يسترجع محتوى الحافظة بشكل صحيح _[`issue #341`](http://issues.autojs6.com/341)_
* `تصليح` المشكلة التي كان فيها ناتج ui.inflate يفتقد إلى طرق البروتوتايب مثل attr و on و click
* `تصليح` مشكلة يتم فيها ربط سياق النطاق بشكل غير صحيح عند استخدام صياغة XML لاستخدام تعبير JavaScript كقيمة لخاصية _[`issue #319`](http://issues.autojs6.com/319)_
* `تصليح` المشكلة التي كانت فيها استثناءات بعض الطرق لا يتم التقاطها بواسطة كتلة try..catch _[`issue #345`](http://issues.autojs6.com/345)_
* `تصليح` المشكلة التي كان فيها توليد الكود في صفحة تحليل التخطيطات قد يؤدي إلى تعطل التطبيق _[`issue #288`](http://issues.autojs6.com/288)_
* `تصليح` المشكلة التي كان فيها التطبيقات المعبأة لا يمكنها استخدام وحدة shizuku بشكل صحيح _[`issue #227`](http://issues.autojs6.com/227)_ _[`issue #231`](http://issues.autojs6.com/231)_ _[`issue #284`](http://issues.autojs6.com/284)_ _[`issue #287`](http://issues.autojs6.com/287)_ _[`issue #304`](http://issues.autojs6.com/304)_

View File

@@ -24,6 +24,7 @@
* `Fix` Issue where floaty.window/floaty.rawWindow could not be executed on background threads
* `Fix` Issue where floaty.getClip might not correctly retrieve clipboard content _[`issue #341`](http://issues.autojs6.com/341)_
* `Fix` Issue where ui.inflate returned values were missing prototype methods such as attr/on/click
* `Fix` Issue where incorrect scope context binding when using XML syntax to use a JavaScript expression as an attribute value _[`issue #319`](http://issues.autojs6.com/319)_
* `Fix` Issue where exceptions in some method calls could not be caught by try..catch blocks _[`issue #345`](http://issues.autojs6.com/345)_
* `Fix` Issue where generating code on the layout analysis page could cause the app to crash _[`issue #288`](http://issues.autojs6.com/288)_
* `Fix` Issue where packaged applications could not properly use the shizuku module _[`issue #227`](http://issues.autojs6.com/227)_ _[`issue #231`](http://issues.autojs6.com/231)_ _[`issue #284`](http://issues.autojs6.com/284)_ _[`issue #287`](http://issues.autojs6.com/287)_ _[`issue #304`](http://issues.autojs6.com/304)_

View File

@@ -24,6 +24,7 @@
* `Corrección` Problema en el que floaty.window / floaty.rawWindow no puede ejecutarse en subprocesos
* `Corrección` Problema en el que floaty.getClip puede no obtener correctamente el contenido del portapapeles _[`issue #341`](http://issues.autojs6.com/341)_
* `Corrección` Problema en el que el retorno de ui.inflate pierde métodos de prototipo como attr, on y click
* `Corrección` Problema en el que se produce un enlace incorrecto del contexto de ámbito al utilizar la sintaxis XML para usar una expresión JavaScript como valor de atributo _[`issue #319`](http://issues.autojs6.com/319)_
* `Corrección` Problema en el que algunas llamadas a métodos, al producir excepciones, no son capturadas por bloques try..catch _[`issue #345`](http://issues.autojs6.com/345)_
* `Corrección` Problema en el que la generación de código en la página de análisis de layouts puede provocar que la aplicación se bloquee _[`issue #288`](http://issues.autojs6.com/288)_
* `Corrección` Problema en el que las aplicaciones empaquetadas no pueden utilizar correctamente el módulo shizuku _[`issue #227`](http://issues.autojs6.com/227)_ _[`issue #231`](http://issues.autojs6.com/231)_ _[`issue #284`](http://issues.autojs6.com/284)_ _[`issue #287`](http://issues.autojs6.com/287)_ _[`issue #304`](http://issues.autojs6.com/304)_

View File

@@ -24,6 +24,7 @@
* `Correction` Problème où floaty.window/floaty.rawWindow ne peut pas être exécuté dans un thread secondaire
* `Correction` Problème où floaty.getClip risque de ne pas récupérer correctement le contenu du presse-papiers _[`issue #341`](http://issues.autojs6.com/341)_
* `Correction` Problème où ui.inflate renvoie un résultat auquel il manque les méthodes de prototype telles que attr, on et click
* `Correction` Problème où le contexte de portée n'est pas correctement lié lors de l'utilisation de la syntaxe XML pour utiliser une expression JavaScript comme valeur d'attribut _[`issue #319`](http://issues.autojs6.com/319)_
* `Correction` Problème où certaines exceptions générées lors de l'appel de méthodes ne sont pas capturées par un bloc try..catch _[`issue #345`](http://issues.autojs6.com/345)_
* `Correction` Problème où la génération de code dans la page d'analyse de la mise en page peut provoquer un crash de l'application _[`issue #288`](http://issues.autojs6.com/288)_
* `Correction` Problème où les applications packagées ne peuvent pas utiliser correctement le module shizuku _[`issue #227`](http://issues.autojs6.com/227)_ _[`issue #231`](http://issues.autojs6.com/231)_ _[`issue #284`](http://issues.autojs6.com/284)_ _[`issue #287`](http://issues.autojs6.com/287)_ _[`issue #304`](http://issues.autojs6.com/304)_

View File

@@ -24,6 +24,7 @@
* `修正` floaty.window / floaty.rawWindow がサブスレッドで実行できない問題を修正
* `修正` floaty.getClip がクリップボードの内容を正しく取得できない場合がある問題を修正 _[`issue #341`](http://issues.autojs6.com/341)_
* `修正` ui.inflate の返り値から attr, on, click などのプロトタイプメソッドが欠落する問題を修正
* `修正` XML 構文を用いて JavaScript の式を属性値として使用する際, スコープのコンテキストが不正にバインドされる問題 _[`issue #319`](http://issues.autojs6.com/319)_
* `修正` 一部メソッドで発生する例外が try..catch によって捕捉されない問題を修正 _[`issue #345`](http://issues.autojs6.com/345)_
* `修正` レイアウト解析ページでコード生成時にアプリがクラッシュする可能性がある問題を修正 _[`issue #288`](http://issues.autojs6.com/288)_
* `修正` パッケージ化されたアプリが shizuku モジュールを正しく利用できない問題を修正 _[`issue #227`](http://issues.autojs6.com/227)_ _[`issue #231`](http://issues.autojs6.com/231)_ _[`issue #284`](http://issues.autojs6.com/284)_ _[`issue #287`](http://issues.autojs6.com/287)_ _[`issue #304`](http://issues.autojs6.com/304)_

View File

@@ -24,6 +24,7 @@
* `수정` floaty.window / floaty.rawWindow 가 서브 스레드에서 실행되지 않는 문제를 수정
* `수정` floaty.getClip 이 클립보드 내용을 올바르게 가져오지 못하는 문제를 수정 _[`issue #341`](http://issues.autojs6.com/341)_
* `수정` ui.inflate 의 반환 값에서 attr, on, click 등의 프로토타입 메서드가 누락되는 문제를 수정
* `수정` XML 구문을 사용하여 JavaScript 표현식을 속성 값으로 사용할 때, 스코프 컨텍스트가 올바르게 바인딩되지 않는 문제 _[`issue #319`](http://issues.autojs6.com/319)_
* `수정` 일부 메서드 호출 시 발생하는 예외가 try..catch 로 처리되지 않는 문제를 수정 _[`issue #345`](http://issues.autojs6.com/345)_
* `수정` 레이아웃 분석 페이지에서 코드 생성 중 앱이 종료되는 문제를 수정 _[`issue #288`](http://issues.autojs6.com/288)_
* `수정` 패키지화된 앱에서 shizuku 모듈을 제대로 사용할 수 없는 문제를 수정 _[`issue #227`](http://issues.autojs6.com/227)_ _[`issue #231`](http://issues.autojs6.com/231)_ _[`issue #284`](http://issues.autojs6.com/284)_ _[`issue #287`](http://issues.autojs6.com/287)_ _[`issue #304`](http://issues.autojs6.com/304)_

View File

@@ -24,6 +24,7 @@
* `Исправление` Проблема, при которой floaty.window/floaty.rawWindow не могут выполняться в дополнительных потоках
* `Исправление` Проблема, при которой floaty.getClip может неправильно получать содержимое буфера обмена _[`issue #341`](http://issues.autojs6.com/341)_
* `Исправление` Проблема, при которой результат ui.inflate лишён методов прототипа, таких как attr, on и click
* `Исправление` Проблема, при которой некорректно связывается контекст области видимости при использовании XML-синтаксиса для задания выражения JavaScript в качестве значения атрибута _[`issue #319`](http://issues.autojs6.com/319)_
* `Исправление` Проблема, при которой исключения некоторых методов не перехватываются блоком try..catch _[`issue #345`](http://issues.autojs6.com/345)_
* `Исправление` Проблема, при которой генерация кода на странице анализа макета может приводить к сбою приложения _[`issue #288`](http://issues.autojs6.com/288)_
* `Исправление` Проблема, при которой упакованные приложения не могут корректно использовать модуль shizuku _[`issue #227`](http://issues.autojs6.com/227)_ _[`issue #231`](http://issues.autojs6.com/231)_ _[`issue #284`](http://issues.autojs6.com/284)_ _[`issue #287`](http://issues.autojs6.com/287)_ _[`issue #304`](http://issues.autojs6.com/304)_

View File

@@ -6,9 +6,13 @@
# v6.6.3
###### 2025/04/16
###### 2025/04/18
* `修复` 主页文档标签显示在线文档时部分内容被系统导航栏遮挡的问题
* `修复` 部分设备代码编辑器空行显示方框字符的问题
* `修复` console.setContentTextColor 方法导致日志字体颜色丢失默认值的问题 _[`issue #346`](http://issues.autojs6.com/346)_
* `优化` 打包单文件时自动读取并勾选已安装应用的声明权限 _[`issue #362`](http://issues.autojs6.com/362)_
* `依赖` 升级 Gradle 版本 8.14-rc-1 -> 8.14-rc-2
# v6.6.2
@@ -30,6 +34,7 @@
* `修复` floaty.window/floaty.rawWindow 无法在子线程执行的问题
* `修复` floaty.getClip 可能无法正常获取剪切板内容的问题 _[`issue #341`](http://issues.autojs6.com/341)_
* `修复` ui.inflate 返回值丢失 attr/on/click 等原型方法的问题
* `修复` 使用 XML 语法将 JavaScript 表达式作为属性值时, 其作用域上下文绑定错误的问题 _[`issue #319`](http://issues.autojs6.com/319)_
* `修复` 部分方法调用出现异常时无法被 try..catch 块捕获的问题 _[`issue #345`](http://issues.autojs6.com/345)_
* `修复` 布局分析页面生成代码时可能导致应用崩溃的问题 _[`issue #288`](http://issues.autojs6.com/288)_
* `修复` 打包应用无法正常使用 shizuku 模块的问题 _[`issue #227`](http://issues.autojs6.com/227)_ _[`issue #231`](http://issues.autojs6.com/231)_ _[`issue #284`](http://issues.autojs6.com/284)_ _[`issue #287`](http://issues.autojs6.com/287)_ _[`issue #304`](http://issues.autojs6.com/304)_

View File

@@ -24,6 +24,7 @@
* `修復` floaty.window/floaty.rawWindow 無法在子線程執行的問題
* `修復` floaty.getClip 可能無法正常獲取剪切板內容的問題 _[`issue #341`](http://issues.autojs6.com/341)_
* `修復` ui.inflate 返回值丟失 attr/on/click 等原型方法的問題
* `修復` 使用 XML 語法將 JavaScript 表達式作為屬性值時, 其作用域上下文綁定錯誤的問題 _[`issue #319`](http://issues.autojs6.com/319)_
* `修復` 部分方法調用出現異常時無法被 try..catch 塊捕獲的問題 _[`issue #345`](http://issues.autojs6.com/345)_
* `修復` 佈局分析頁面生成代碼時可能導致應用崩潰的問題 _[`issue #288`](http://issues.autojs6.com/288)_
* `修復` 打包應用無法正常使用 shizuku 模塊的問題 _[`issue #227`](http://issues.autojs6.com/227)_ _[`issue #231`](http://issues.autojs6.com/231)_ _[`issue #284`](http://issues.autojs6.com/284)_ _[`issue #287`](http://issues.autojs6.com/287)_ _[`issue #304`](http://issues.autojs6.com/304)_

View File

@@ -24,6 +24,7 @@
* `修復` floaty.window/floaty.rawWindow 無法在子執行緒執行的問題
* `修復` floaty.getClip 可能無法正常獲取剪下板內容的問題 _[`issue #341`](http://issues.autojs6.com/341)_
* `修復` ui.inflate 返回值丟失 attr/on/click 等原型方法的問題
* `修復` 使用 XML 語法將 JavaScript 表示式作為屬性值時, 其作用域上下文繫結錯誤的問題 _[`issue #319`](http://issues.autojs6.com/319)_
* `修復` 部分方法調用出現異常時無法被 try..catch 塊捕獲的問題 _[`issue #345`](http://issues.autojs6.com/345)_
* `修復` 佈局分析頁面生成程式碼時可能導致應用崩潰的問題 _[`issue #288`](http://issues.autojs6.com/288)_
* `修復` 打包應用無法正常使用 shizuku 模組的問題 _[`issue #227`](http://issues.autojs6.com/227)_ _[`issue #231`](http://issues.autojs6.com/231)_ _[`issue #284`](http://issues.autojs6.com/284)_ _[`issue #287`](http://issues.autojs6.com/287)_ _[`issue #304`](http://issues.autojs6.com/304)_

View File

@@ -6,9 +6,13 @@
# v6.6.3
###### 2025/04/16
###### 2025/04/18
* `修复` 主页文档标签显示在线文档时部分内容被系统导航栏遮挡的问题
* `修复` 部分设备代码编辑器空行显示方框字符的问题
* `修复` console.setContentTextColor 方法导致日志字体颜色丢失默认值的问题 _[`issue #346`](http://issues.autojs6.com/346)_
* `优化` 打包单文件时自动读取并勾选已安装应用的声明权限 _[`issue #362`](http://issues.autojs6.com/362)_
* `依赖` 升级 Gradle 版本 8.14-rc-1 -> 8.14-rc-2
# v6.6.2
@@ -30,6 +34,7 @@
* `修复` floaty.window/floaty.rawWindow 无法在子线程执行的问题
* `修复` floaty.getClip 可能无法正常获取剪切板内容的问题 _[`issue #341`](http://issues.autojs6.com/341)_
* `修复` ui.inflate 返回值丢失 attr/on/click 等原型方法的问题
* `修复` 使用 XML 语法将 JavaScript 表达式作为属性值时, 其作用域上下文绑定错误的问题 _[`issue #319`](http://issues.autojs6.com/319)_
* `修复` 部分方法调用出现异常时无法被 try..catch 块捕获的问题 _[`issue #345`](http://issues.autojs6.com/345)_
* `修复` 布局分析页面生成代码时可能导致应用崩溃的问题 _[`issue #288`](http://issues.autojs6.com/288)_
* `修复` 打包应用无法正常使用 shizuku 模块的问题 _[`issue #227`](http://issues.autojs6.com/227)_ _[`issue #231`](http://issues.autojs6.com/231)_ _[`issue #284`](http://issues.autojs6.com/284)_ _[`issue #287`](http://issues.autojs6.com/287)_ _[`issue #304`](http://issues.autojs6.com/304)_

View File

@@ -18,10 +18,13 @@ object MaterialDialogExtensions {
}
}
@JvmStatic
fun MaterialDialog.makeTextCopyable(textViewGetter: (dialog: MaterialDialog) -> TextView?) {
makeTextCopyable(textViewGetter(this))
}
@JvmStatic
@JvmOverloads
fun MaterialDialog.makeTextCopyable(textView: TextView?, textValue: String? = textView?.text?.toString()) {
if (textValue != null) {
val context = this.context

View File

@@ -750,7 +750,7 @@ class UI(private val scriptRuntime: ScriptRuntime) : AugmentableProxy(scriptRunt
* ```
*
* @param expression The JavaScript expression to evaluate as a string. (zh-CN: 用于执行的表达式.)
* @param ctx The context (scriptable scope) in which the expression should be evaluated. (zh-CN: 提供给参数 expression 的作用上下文.)
* @param ctx The context (scriptable scope) in which the expression should be evaluated. (zh-CN: 提供给参数 expression 的作用上下文.)
* @return The result of evaluating the expression. (zh-CN: 参数 expression 执行结果.)
*/
private fun evalInContext(expression: String, ctx: Scriptable): Any? {

View File

@@ -4,6 +4,7 @@ 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;
import org.autojs.autojs6.R;
@@ -34,7 +35,7 @@ public class ErrorDialogActivity extends BaseActivity {
}
// Show dialog
new MaterialDialog.Builder(this)
var materialDialog = new MaterialDialog.Builder(this)
.title(title)
.content(message)
.positiveText(positiveButtonText)
@@ -44,6 +45,8 @@ public class ErrorDialogActivity extends BaseActivity {
.onPositive((dialog, which) -> finish())
.dismissListener(dialog -> finish())
.show();
MaterialDialogExtensions.makeTextCopyable(materialDialog, materialDialog.getContentView());
}
/**

View File

@@ -3,6 +3,7 @@ package org.autojs.autojs.ui.project;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Editable;
@@ -26,6 +27,8 @@ import androidx.lifecycle.ViewModelProvider;
import com.afollestad.materialdialogs.MaterialDialog;
import com.google.android.flexbox.FlexboxLayout;
import com.google.android.material.textfield.TextInputLayout;
import com.jaredrummler.apkparser.ApkParser;
import com.jaredrummler.apkparser.model.ApkMeta;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
@@ -35,12 +38,12 @@ import org.autojs.autojs.core.pref.Language;
import org.autojs.autojs.model.explorer.Explorers;
import org.autojs.autojs.model.script.ScriptFile;
import org.autojs.autojs.project.ProjectConfig;
import org.autojs.autojs.runtime.ScriptRuntime;
import org.autojs.autojs.runtime.api.AppUtils;
import org.autojs.autojs.runtime.api.AppUtils.Companion.SimpleVersionInfo;
import org.autojs.autojs.runtime.api.augment.pinyin.Pinyin;
import org.autojs.autojs.ui.BaseActivity;
import org.autojs.autojs.ui.common.NotAskAgainDialog;
import org.autojs.autojs.ui.error.ErrorDialogActivity;
import org.autojs.autojs.ui.filechooser.FileChooserDialogBuilder;
import org.autojs.autojs.ui.keystore.ManageKeyStoreActivity;
import org.autojs.autojs.ui.main.scripts.ApkInfoDialogManager;
@@ -595,6 +598,8 @@ public class BuildActivity extends BaseActivity implements ApkBuilder.ProgressCa
mIsDefaultIcon = false;
}
mIconView.setVisibility(View.VISIBLE);
updatePermissionsCheckboxes(packageName);
}, throwable -> {
mPackageNameView.setText(getString(R.string.format_default_package_name, file.getSimplifiedName().toLowerCase(Language.getPrefLanguage().getLocale())));
mVersionNameView.setText(R.string.default_build_apk_version_name);
@@ -608,6 +613,46 @@ public class BuildActivity extends BaseActivity implements ApkBuilder.ProgressCa
setSource(file);
}
private void updatePermissionsCheckboxes(String packageName) {
ApkParser parser;
try {
parser = ApkParser.create(getPackageManager(), packageName);
} catch (PackageManager.NameNotFoundException e) {
return;
}
try {
ApkMeta meta = parser.getApkMeta();
if (meta == null || meta.usesPermissions == null) {
return;
}
var initialPermissions = meta.usesPermissions;
IntStream.range(0, mFlexboxPermissionsView.getChildCount())
.mapToObj(i -> mFlexboxPermissionsView.getChildAt(i))
.forEach(child -> {
CharSequence viewCharSequence = child instanceof RoundCheckboxWithText
? ((RoundCheckboxWithText) child).getText()
: child instanceof CheckBox ? ((CheckBox) child).getText() : null;
if (viewCharSequence == null) {
return;
}
String viewText = viewCharSequence.toString().split("\n")[0].trim();
if (!initialPermissions.contains(viewText)) {
return;
}
if (child instanceof RoundCheckboxWithText) {
((RoundCheckboxWithText) child).setChecked(true);
} else {
((CheckBox) child).setChecked(true);
}
});
} catch (Exception ignored) {
/* Ignored. */
} finally {
parser.close();
}
}
private static String generatePackageNameSuffix(ScriptFile file) {
String name = file.getSimplifiedName();
if (name.matches(".*[\\u4e00-\\u9fff].*")) {
@@ -871,7 +916,7 @@ public class BuildActivity extends BaseActivity implements ApkBuilder.ProgressCa
@NotNull
private ArrayList<String> collectCheckedItems(FlexboxLayout flexboxLayout) {
ArrayList<String> libs = new ArrayList<>();
ArrayList<String> result = new ArrayList<>();
for (int i = 0; i < flexboxLayout.getChildCount(); i += 1) {
View child = flexboxLayout.getChildAt(i);
@@ -879,19 +924,19 @@ public class BuildActivity extends BaseActivity implements ApkBuilder.ProgressCa
if (((RoundCheckboxWithText) child).isChecked()) {
CharSequence charSequence = ((RoundCheckboxWithText) child).getText();
if (charSequence != null) {
libs.add(charSequence.toString());
result.add(charSequence.toString());
}
}
} else if (child instanceof CheckBox) {
if (((CheckBox) child).isChecked()) {
CharSequence charSequence = ((CheckBox) child).getText();
if (charSequence != null) {
libs.add(charSequence.toString().split("\n")[0]);
result.add(charSequence.toString().split("\n")[0]);
}
}
}
}
return libs;
return result;
}
private ApkBuilder callApkBuilder(File buildPath, File outApk, ProjectConfig projectConfig) throws Exception {
@@ -918,9 +963,7 @@ public class BuildActivity extends BaseActivity implements ApkBuilder.ProgressCa
mProgressDialog.dismiss();
mProgressDialog = null;
}
String message = getString(R.string.text_failed_to_build) + "\n" + error.getMessage();
ViewUtils.showToast(this, message, true);
ScriptRuntime.popException(message);
ErrorDialogActivity.showErrorDialog(this, R.string.text_failed_to_build, error.getMessage());
Log.e(LOG_TAG, "Failed to build", error);
}