From fa0a16dee33a82338c87b54a1429289243f77596 Mon Sep 17 00:00:00 2001 From: TonyJiangWJ Date: Thu, 24 Sep 2020 18:45:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=BF=E6=8D=A2bugly=E7=9A=84key=E7=94=A8?= =?UTF-8?q?=E4=BA=8E=E7=BB=9F=E8=AE=A1=E9=94=99=E8=AF=AF=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E3=80=82=E4=BF=AE=E5=A4=8D=E5=81=B6=E5=8F=91=E7=9A=84=E5=B9=B6?= =?UTF-8?q?=E5=8F=91=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 +++- app/src/main/AndroidManifest.xml | 1 + app/src/main/java/org/autojs/autojs/App.kt | 4 ++-- .../java/com/stardust/autojs/ScriptEngineService.java | 4 ++-- .../stardust/autojs/core/image/TemplateMatching.java | 2 +- .../java/com/stardust/autojs/core/looper/Loopers.java | 4 +++- .../com/stardust/autojs/rhino/RhinoAndroidHelper.java | 11 ++++++++--- 7 files changed, 20 insertions(+), 10 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 475e1eb0..413e8e2b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -46,6 +46,7 @@ android { ] } } + ndk { } } buildTypes { debug { @@ -197,7 +198,8 @@ dependencies { // Flurry implementation 'com.flurry.android:analytics:7.0.0@aar' // Bugly - implementation 'com.tencent.bugly:crashreport:2.6.6' + implementation 'com.tencent.bugly:crashreport:3.2.3' + implementation 'com.tencent.bugly:nativecrashreport:3.7.47' // MaterialDialogCommon implementation('com.afollestad.material-dialogs:commons:0.9.2.3', { exclude group: 'com.android.support' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f466ec0a..ae02bd74 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -10,6 +10,7 @@ + diff --git a/app/src/main/java/org/autojs/autojs/App.kt b/app/src/main/java/org/autojs/autojs/App.kt index c27283af..1486503b 100644 --- a/app/src/main/java/org/autojs/autojs/App.kt +++ b/app/src/main/java/org/autojs/autojs/App.kt @@ -53,7 +53,7 @@ class App : MultiDexApplication() { return FlurryAgent.Builder() .withLogEnabled(BuildConfig.DEBUG) - .build(this, "D42MH48ZN4PJC5TKNYZD") + .build(this, "V5B5VT5NP6TT5F78PZXR") } private fun setUpDebugEnvironment() { @@ -164,7 +164,7 @@ class App : MultiDexApplication() { companion object { private val TAG = "App" - private val BUGLY_APP_ID = "19b3607b53" + private val BUGLY_APP_ID = "e020acad30" private lateinit var instance: WeakReference diff --git a/autojs/src/main/java/com/stardust/autojs/ScriptEngineService.java b/autojs/src/main/java/com/stardust/autojs/ScriptEngineService.java index ceb38e6d..1b45556e 100644 --- a/autojs/src/main/java/com/stardust/autojs/ScriptEngineService.java +++ b/autojs/src/main/java/com/stardust/autojs/ScriptEngineService.java @@ -26,10 +26,10 @@ import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import java.util.Collection; -import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArraySet; import static com.stardust.autojs.runtime.exception.ScriptInterruptedException.causedByInterrupted; @@ -227,7 +227,7 @@ public class ScriptEngineService { private static class EngineLifecycleObserver implements ScriptEngineManager.EngineLifecycleCallback { - private final Set mEngineLifecycleCallbacks = new LinkedHashSet<>(); + private final Set mEngineLifecycleCallbacks = new CopyOnWriteArraySet<>(); @Override public void onEngineCreate(ScriptEngine engine) { diff --git a/autojs/src/main/java/com/stardust/autojs/core/image/TemplateMatching.java b/autojs/src/main/java/com/stardust/autojs/core/image/TemplateMatching.java index 9eb1ae6c..14c1b74d 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/image/TemplateMatching.java +++ b/autojs/src/main/java/com/stardust/autojs/core/image/TemplateMatching.java @@ -190,7 +190,7 @@ public class TemplateMatching { private static int selectPyramidLevel(Mat img, Mat template) { int minDim = Nath.min(img.rows(), img.cols(), template.rows(), template.cols()); //这里选取16为图像缩小后的最小宽高,从而用log(2, minDim / 16)得到最多可以经过几次缩小。 - int maxLevel = (int) (Math.log(minDim / 16) / Math.log(2)); + int maxLevel = (int) (Math.log(minDim / 16.0) / Math.log(2)); if (maxLevel < 0) { return 0; } diff --git a/autojs/src/main/java/com/stardust/autojs/core/looper/Loopers.java b/autojs/src/main/java/com/stardust/autojs/core/looper/Loopers.java index 64d340b1..1eba15bd 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/looper/Loopers.java +++ b/autojs/src/main/java/com/stardust/autojs/core/looper/Loopers.java @@ -227,6 +227,8 @@ public class Loopers implements MessageQueue.IdleHandler { Log.d(LOG_TAG, "notifyThreadExit: " + thread); //当子线程退成时,主线程需要检查自身是否退出(主线程在所有子线程执行完成后才能退出,如果主线程已经执行完任务仍然要等待所有子线程), //此时通过向主线程发送一个空的Runnable,主线程执行完这个Runnable后会触发IdleHandler,从而检查自身是否退出 - mMainHandler.post(EMPTY_RUNNABLE); + if (mMainHandler != null) { + mMainHandler.post(EMPTY_RUNNABLE); + } } } diff --git a/autojs/src/main/java/com/stardust/autojs/rhino/RhinoAndroidHelper.java b/autojs/src/main/java/com/stardust/autojs/rhino/RhinoAndroidHelper.java index b3ec0809..0069da67 100644 --- a/autojs/src/main/java/com/stardust/autojs/rhino/RhinoAndroidHelper.java +++ b/autojs/src/main/java/com/stardust/autojs/rhino/RhinoAndroidHelper.java @@ -50,8 +50,13 @@ public class RhinoAndroidHelper { * @return a context prepared for android */ public Context enterContext() { - if (!SecurityController.hasGlobal()) - SecurityController.initGlobal(new NoSecurityController()); + if (!SecurityController.hasGlobal()) { + synchronized (RhinoAndroidHelper.class) { + if (!SecurityController.hasGlobal()) { + SecurityController.initGlobal(new NoSecurityController()); + } + } + } return getContextFactory().enterContext(); } @@ -59,7 +64,7 @@ public class RhinoAndroidHelper { * @return The Context factory which has to be used on android. */ @VisibleForTesting - public AndroidContextFactory getContextFactory() { + public synchronized AndroidContextFactory getContextFactory() { AndroidContextFactory factory; if (!ContextFactory.hasExplicitGlobal()) { factory = new AndroidContextFactory(cacheDirectory);