diff --git a/.idea/modules.xml b/.idea/modules.xml index 4fac18b4..7e950955 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,8 +2,8 @@ + - diff --git a/app/src/main/java/com/stardust/scriptdroid/build/ApkBuilderPluginHelper.java b/app/src/main/java/com/stardust/scriptdroid/build/ApkBuilderPluginHelper.java index b7992505..d8667b63 100644 --- a/app/src/main/java/com/stardust/scriptdroid/build/ApkBuilderPluginHelper.java +++ b/app/src/main/java/com/stardust/scriptdroid/build/ApkBuilderPluginHelper.java @@ -1,11 +1,13 @@ package com.stardust.scriptdroid.build; import android.content.Context; +import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Build; -import com.stardust.BuildConfig; import com.stardust.pio.UncheckedIOException; +import com.stardust.scriptdroid.BuildConfig; +import com.stardust.scriptdroid.ui.build.BuildActivity; import com.stardust.util.DeveloperUtils; import java.io.IOException; @@ -20,7 +22,7 @@ public class ApkBuilderPluginHelper { private static final String PLUGIN_PACKAGE_NAME = "org.autojs.apkbuilderplugin"; private static final String TEMPLATE_APK_PATH = "template.apk"; - public static boolean checkPlugin(Context context) { + public static boolean isPluginAvailable(Context context) { return DeveloperUtils.checkSignature(context, PLUGIN_PACKAGE_NAME); } @@ -37,4 +39,17 @@ public class ApkBuilderPluginHelper { throw new RuntimeException(e); } } + + public static int getPluginVersion(Context context) { + try { + PackageInfo info = context.getPackageManager().getPackageInfo(PLUGIN_PACKAGE_NAME, 0); + return info.versionCode; + } catch (PackageManager.NameNotFoundException e) { + return -1; + } + } + + public static int getSuitablePluginVersion() { + return BuildConfig.VERSION_CODE - 200; + } } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/build/BuildActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/build/BuildActivity.java index a06df7bc..34601b30 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/build/BuildActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/build/BuildActivity.java @@ -9,12 +9,12 @@ import android.support.design.widget.TextInputEditText; import android.support.design.widget.TextInputLayout; import android.text.TextUtils; import android.util.Log; -import android.widget.EditText; import android.widget.ImageView; import android.widget.Toast; import com.afollestad.materialdialogs.MaterialDialog; import com.stardust.autojs.project.ProjectConfig; +import com.stardust.scriptdroid.BuildConfig; import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.autojs.build.AutoJsApkBuilder; import com.stardust.scriptdroid.build.ApkBuilderPluginHelper; @@ -35,6 +35,7 @@ import org.androidannotations.annotations.ViewById; import java.io.File; import java.io.InputStream; +import java.util.Locale; import java.util.concurrent.Callable; import io.reactivex.Observable; @@ -82,25 +83,41 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog if (sourcePath != null) { setupWithSourceFile(new ScriptFile(sourcePath)); } - showPluginDownloadDialogIfNeeded(); + checkApkBuilderPlugin(); } - private void showPluginDownloadDialogIfNeeded() { - if (ApkBuilderPluginHelper.checkPlugin(this)) { + private void checkApkBuilderPlugin() { + if (!ApkBuilderPluginHelper.isPluginAvailable(this)) { + showPluginDownloadDialog(R.string.no_apk_builder_plugin, true); return; } + int version = ApkBuilderPluginHelper.getPluginVersion(this); + if (version < 0) { + showPluginDownloadDialog(R.string.no_apk_builder_plugin, true); + return; + } + if (version < ApkBuilderPluginHelper.getSuitablePluginVersion()) { + showPluginDownloadDialog(R.string.apk_builder_plugin_version_too_low, false); + } + + } + + private void showPluginDownloadDialog(int msgRes, boolean finishIfCanceled) { new ThemeColorMaterialDialogBuilder(this) - .content(R.string.no_apk_builder_plugin) + .content(msgRes) .positiveText(R.string.ok) .negativeText(R.string.text_exit) .onPositive((dialog, which) -> downloadPlugin()) - .onNegative((dialog, which) -> finish()) + .onNegative((dialog, which) -> { + if (finishIfCanceled) finish(); + }) .show(); } private void downloadPlugin() { - IntentUtil.browse(this, "https://www.autojs.org/assets/autojs/plugin.apk"); + IntentUtil.browse(this, String.format(Locale.getDefault(), + "https://i.autojs.org/autojs/plugin/%d.apk", ApkBuilderPluginHelper.getSuitablePluginVersion())); } private void setupWithSourceFile(ScriptFile file) { @@ -165,7 +182,7 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog @Click(R.id.fab) void buildApk() { - if (!ApkBuilderPluginHelper.checkPlugin(this)) { + if (!ApkBuilderPluginHelper.isPluginAvailable(this)) { Toast.makeText(this, R.string.text_apk_builder_plugin_unavailable, Toast.LENGTH_SHORT).show(); return; } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 66c32ed7..2c1d3716 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -350,4 +350,5 @@ 字体大小: %d 正则表达式不能向前查找 通知 + 打包插件版本过低,打包的应用可能无法正常运行。是否立即下载对应版本的打包插件? diff --git a/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvas.java b/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvas.java index 495553de..2041e491 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvas.java +++ b/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvas.java @@ -25,14 +25,14 @@ import com.stardust.autojs.runtime.ScriptRuntime; public class ScriptCanvas { - private android.graphics.Canvas mCanvas; + private Canvas mCanvas; - public ScriptCanvas(android.graphics.Canvas canvas) { + public ScriptCanvas(Canvas canvas) { mCanvas = canvas; } public ScriptCanvas(@NonNull Bitmap bitmap) { - mCanvas = new android.graphics.Canvas(bitmap); + mCanvas = new Canvas(bitmap); } public ScriptCanvas(@NonNull ImageWrapper image) { @@ -239,15 +239,15 @@ public class ScriptCanvas { mCanvas.setDrawFilter(filter); } - public boolean quickReject(@NonNull RectF rect, @NonNull android.graphics.Canvas.EdgeType type) { + public boolean quickReject(@NonNull RectF rect, @NonNull Canvas.EdgeType type) { return mCanvas.quickReject(rect, type); } - public boolean quickReject(@NonNull Path path, @NonNull android.graphics.Canvas.EdgeType type) { + public boolean quickReject(@NonNull Path path, @NonNull Canvas.EdgeType type) { return mCanvas.quickReject(path, type); } - public boolean quickReject(float left, float top, float right, float bottom, @NonNull android.graphics.Canvas.EdgeType type) { + public boolean quickReject(float left, float top, float right, float bottom, @NonNull Canvas.EdgeType type) { return mCanvas.quickReject(left, top, right, bottom, type); } @@ -382,7 +382,7 @@ public class ScriptCanvas { mCanvas.drawBitmapMesh(bitmap, meshWidth, meshHeight, verts, vertOffset, colors, colorOffset, paint); } - public void drawVertices(@NonNull android.graphics.Canvas.VertexMode mode, int vertexCount, @NonNull float[] verts, int vertOffset, @Nullable float[] texs, int texOffset, @Nullable int[] colors, int colorOffset, @Nullable short[] indices, int indexOffset, int indexCount, @NonNull Paint paint) { + public void drawVertices(@NonNull Canvas.VertexMode mode, int vertexCount, @NonNull float[] verts, int vertOffset, @Nullable float[] texs, int texOffset, @Nullable int[] colors, int colorOffset, @Nullable short[] indices, int indexOffset, int indexCount, @NonNull Paint paint) { mCanvas.drawVertices(mode, vertexCount, verts, vertOffset, texs, texOffset, colors, colorOffset, indices, indexOffset, indexCount, paint); }