diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 9d8d20d50d..5974cf305a 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -84,7 +84,6 @@
-
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java
index f07612f681..5ec595594c 100644
--- a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java
@@ -86,6 +86,7 @@ public class AMapViewWrapper implements IMogoMapView,
private Location mLastDriveLocationShadow = null;
private EnumMapUI mCurrentUI;
private boolean mIsLightStyle = false;
+ private boolean mMapLoaded = false;
public AMapViewWrapper( MapAutoView mMapView ) {
startTime = System.currentTimeMillis();
@@ -345,7 +346,7 @@ public class AMapViewWrapper implements IMogoMapView,
@Override
public void moveToCenter( MogoLatLng latLng ) {
-
+ moveToCenter( latLng, true );
}
private void setUIMode( EnumMapUI ui ) {
@@ -698,7 +699,7 @@ public class AMapViewWrapper implements IMogoMapView,
}
NaviClient.getInstance( getContext() ).syncCarLocation( sysLocation );
- if ( checkAMapView() ) {
+ if ( checkAMapView() && mMapLoaded ) {
// 避免设置之后被其他初始化给重置为其他模式
UiThreadHandler.postDelayed( () -> {
MapStyleController.getInstance().onLocationChanged( location, this );
@@ -718,6 +719,7 @@ public class AMapViewWrapper implements IMogoMapView,
public void onMapLoaded() {
Logger.i( TAG, "autoop--onMapLoaded: " );
MogoMapListenerHandler.getInstance().onMapLoaded();
+ mMapLoaded = true;
CameraPosition cameraPosition = mMapView.getMapAutoViewHelper().getCameraPosition();
if ( cameraPosition != null ) {
Trace.beginSection( "timer.onCameraChangeFinish" );
@@ -727,9 +729,6 @@ public class AMapViewWrapper implements IMogoMapView,
cameraPosition.getBearing() );
Trace.endSection();
}
-
- getMap().getUIController().setAnchorRate( 0.01f );
- getMap().getUIController().setAnchorScale( 1.2f, 2.7f );
}
@Override
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/CustomMapApiBuilder.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/CustomMapApiBuilder.java
index 4656d28323..5660221fb5 100644
--- a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/CustomMapApiBuilder.java
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/CustomMapApiBuilder.java
@@ -99,8 +99,14 @@ class CustomMapApiBuilder implements IMogoMapApiBuilder {
.setZoom( 16 )
.setPointToCenter( 0.734375f, 0.5f )
.setStyleMode( MapParams.MAP_STYLE_NIGHT ), NavParams.Companion.init() );
- MapAutoView mapAutoView = new MapAutoView( context );
- IMogoMapView mapView = new AMapViewWrapper( mapAutoView );
+ MapAutoView mapAutoView = new MapAutoView(context);
+ Logger.w(TAG, "mapAutoView==" + mapAutoView);
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ IMogoMapView mapView = new AMapViewWrapper(mapAutoView);
return mapView;
}
diff --git a/modules/mogo-module-common/CMakeLists.txt b/modules/mogo-module-common/CMakeLists.txt
deleted file mode 100644
index e66e013af7..0000000000
--- a/modules/mogo-module-common/CMakeLists.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-# For more information about using CMake with Android Studio, read the
-# documentation: https://d.android.com/studio/projects/add-native-code.html
-
-# Sets the minimum version of CMake required to build the native library.
-
-cmake_minimum_required(VERSION 3.4.1)
-
-# Creates and names a library, sets it as either STATIC
-# or SHARED, and provides the relative paths to its source code.
-# You can define multiple libraries, and CMake builds them for you.
-# Gradle automatically packages shared libraries with your APK.
-
-add_library( # Sets the name of the library.
- method-hook-lib
-
- # Sets the library as a shared library.
- SHARED
-
- # Provides a relative path to your source file(s).
- src/main/cpp/method-hook-lib.cpp )
-
-# Searches for a specified prebuilt library and stores the path as a
-# variable. Because CMake includes system libraries in the search path by
-# default, you only need to specify the name of the public NDK library
-# you want to add. CMake verifies that the library exists before
-# completing its build.
-
-find_library( # Sets the name of the path variable.
- log-lib
-
- # Specifies the name of the NDK library that
- # you want CMake to locate.
- log )
-
-# Specifies libraries CMake should link to your target library. You
-# can link multiple libraries, such as libraries you define in this
-# build script, prebuilt third-party libraries, or system libraries.
-
-target_link_libraries( # Specifies the target library.
- method-hook-lib
-
- # Links the target library to the log library
- # included in the NDK.
- ${log-lib} )
\ No newline at end of file
diff --git a/modules/mogo-module-common/build.gradle b/modules/mogo-module-common/build.gradle
index 783a180702..e6efc88b0b 100644
--- a/modules/mogo-module-common/build.gradle
+++ b/modules/mogo-module-common/build.gradle
@@ -11,17 +11,6 @@ android {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro'
-
- externalNativeBuild {
- cmake {
- cppFlags "-std=c++11 -frtti -fexceptions"
- }
- }
- }
- externalNativeBuild {
- cmake {
- path "CMakeLists.txt"
- }
}
buildTypes {
release {
@@ -44,6 +33,7 @@ dependencies {
implementation rootProject.ext.dependencies.androidxconstraintlayout
implementation rootProject.ext.dependencies.arouter
implementation rootProject.ext.dependencies.callchatprovider
+ api "com.mogo.libs:hook:1.0"
if (Boolean.valueOf(RELEASE)) {
api rootProject.ext.dependencies.mogomap
api rootProject.ext.dependencies.mogomapapi
diff --git a/modules/mogo-module-common/src/main/cpp/method-hook-lib.cpp b/modules/mogo-module-common/src/main/cpp/method-hook-lib.cpp
deleted file mode 100644
index dd5111ea23..0000000000
--- a/modules/mogo-module-common/src/main/cpp/method-hook-lib.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-#include
-#include
-
-//
-// Created by donghongyu on 12/10/20 1:34 PM.
-// 源码地址 https://github.com/pqpo/methodhook
-// 方法hook jni类
-static const char *kClassMethodHookChar = "com/mogo/module/common/hook/MethodHook";
-
-static struct {
- jmethodID m1;
- jmethodID m2;
- size_t methodSize;
-} methodHookClassInfo;
-
-
-/**
- * 替换指定类中的方法
- * @param env
- * @param type
- * @param srcMethodObj 目标方法对象
- * @param destMethodObj 替换的方法对象
- * @return
- */
-static jlong methodHook(JNIEnv *env, jclass type, jobject srcMethodObj, jobject destMethodObj) {
- // 反射:获取了Java对象的在native层的 ArtMethod指针
- void *srcMethod = reinterpret_cast(env->FromReflectedMethod(srcMethodObj));
- void *destMethod = reinterpret_cast(env->FromReflectedMethod(destMethodObj));
- // 定义存储方法ID的数组
- int *backupMethod = new int[methodHookClassInfo.methodSize];
- // 使用的内存拷贝函数
- // 将旧方法ID拷贝到数组中
- memcpy(backupMethod, srcMethod, methodHookClassInfo.methodSize);
- // 将新方法替换到旧方法地址上
- memcpy(srcMethod, destMethod, methodHookClassInfo.methodSize);
- // 将旧方法ID返回给java层,用来做方法还原使用
- return reinterpret_cast(backupMethod);
-}
-
-/**
- * 恢复指定类中的方法
- * @param env
- * @param type
- * @param srcMethod 目标方法对象
- * @param methodPtr
- * @return
- */
-static jobject methodRestore(JNIEnv *env, jclass type, jobject srcMethod, jlong methodPtr) {
- // 要还原的旧方法 指针
- int *backupMethod = reinterpret_cast(methodPtr);
- // 获取了Java对象的在native层的 ArtMethod指针
- void *artMethodSrc = reinterpret_cast(env->FromReflectedMethod(srcMethod));
- // 将旧方法指针,替换到 artMethodSrc 中
- memcpy(artMethodSrc, backupMethod, methodHookClassInfo.methodSize);
- // 删除旧方法备份指针
- delete[]backupMethod;
- // 返回旧方法
- return srcMethod;
-}
-
-// 定义要注册的方法
-static JNINativeMethod gMethods[] = {
- {
- "hook_native",
- "(Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;)J",
- (void *) methodHook
- },
- {
- "restore_native",
- "(Ljava/lang/reflect/Method;J)Ljava/lang/reflect/Method;",
- (void *) methodRestore
- }
-};
-
-extern "C"
-JNIEXPORT jint JNICALL
-/**
- * 在jni加载的时候进行方法参数获取
- * @param vm
- * @param reserved
- * @return
- */
-JNI_OnLoad(JavaVM *vm, void *reserved) {
- JNIEnv *env = nullptr;
- if (vm->GetEnv((void **) &env, JNI_VERSION_1_4) != JNI_OK) {
- return JNI_FALSE;
- }
- // 加载指定java class
- jclass classEvaluateUtil = env->FindClass(kClassMethodHookChar);
- // 注册
- if (env->RegisterNatives(classEvaluateUtil, gMethods, sizeof(gMethods) / sizeof(gMethods[0])) <
- 0) {
- return JNI_FALSE;
- }
- // 获取 MethodHook m1、m2 的方法ID
- methodHookClassInfo.m1 = env->GetStaticMethodID(classEvaluateUtil, "m1", "()V");
- methodHookClassInfo.m2 = env->GetStaticMethodID(classEvaluateUtil, "m2", "()V");
- // 获取artMethod的大小,
- methodHookClassInfo.methodSize = reinterpret_cast(methodHookClassInfo.m2) -
- reinterpret_cast(methodHookClassInfo.m1);
- return JNI_VERSION_1_4;
-}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/hook/HookManager.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/hook/HookManager.java
deleted file mode 100644
index 6dc15753b1..0000000000
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/hook/HookManager.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.mogo.module.common.hook;
-
-
-import android.util.Pair;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * 替换管理
- * Created by donghongyu on 12/29/20 1:34 PM
- */
-public final class HookManager {
-
- private HookManager() {
- }
-
- public static HookManager get() {
- return InstanceHolder.sInstance;
- }
-
- private static class InstanceHolder {
- private static HookManager sInstance = new HookManager();
- }
-
- private Map, MethodHook> methodHookMap = new ConcurrentHashMap<>();
-
- /**
- * 替换方法
- *
- * @param originMethod 原始方法
- * @param hookMethod 替换方法
- */
- public void hookMethod(Method originMethod, Method hookMethod) {
- if (originMethod == null || hookMethod == null) {
- throw new IllegalArgumentException("argument cannot be null");
- }
-
- Pair key = Pair.create(hookMethod.getDeclaringClass().getName(), hookMethod.getName());
- if (methodHookMap.containsKey(key)) {
- MethodHook methodHook = methodHookMap.get(key);
- methodHook.restore();
- }
- MethodHook methodHook = new MethodHook(originMethod, hookMethod);
- methodHookMap.put(key, methodHook);
- methodHook.hook();
- }
-
- public void callOrigin(Object receiver, Object... args) {
- StackTraceElement stackTrace = Thread.currentThread().getStackTrace()[3];
- String className = stackTrace.getClassName();
- String methodName = stackTrace.getMethodName();
- MethodHook methodHook = methodHookMap.get(Pair.create(className, methodName));
- if (methodHook != null) {
- try {
- methodHook.callOrigin(receiver, args);
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- }
- }
-
-}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/hook/MethodHook.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/hook/MethodHook.java
deleted file mode 100644
index 8586ac1adc..0000000000
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/hook/MethodHook.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package com.mogo.module.common.hook;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-/**
- * 替换类与c++代码对应
- * Created by donghongyu on 12/29/20 1:34 PM
- */
-public class MethodHook {
-
- public static void m1() {
- }
-
- public static void m2() {
- }
-
- // 目标方法
- private Method srcMethod;
- // 要替换的方法
- private Method hookMethod;
-
- // 备份目标替换方法ID
- private long backupMethodPtr;
-
- /**
- * hook方法
- *
- * @param src 要替换的方法对象
- * @param dest 被替换的方法对象
- */
- public MethodHook(Method src, Method dest) {
- srcMethod = src;
- hookMethod = dest;
- srcMethod.setAccessible(true);
- hookMethod.setAccessible(true);
- }
-
- /**
- * 调用 native 层,完成替换
- */
- public void hook() {
- if (backupMethodPtr == 0) {
- backupMethodPtr = hook_native(srcMethod, hookMethod);
- }
- }
-
- /**
- * 调用 native 层,完成方法还原
- */
- public void restore() {
- if (backupMethodPtr != 0) {
- restore_native(srcMethod, backupMethodPtr);
- backupMethodPtr = 0;
- }
- }
-
- /**
- * 调用原来class 对象中的方法
- *
- * @param receiver 接受对象
- * @param args 方法列表
- * @throws InvocationTargetException
- * @throws IllegalAccessException
- */
- public void callOrigin(Object receiver, Object... args)
- throws InvocationTargetException, IllegalAccessException {
- if (backupMethodPtr != 0) {
- restore();
- srcMethod.invoke(receiver, args);
- hook();
- } else {
- srcMethod.invoke(receiver, args);
- }
- }
-
- /**
- * 调用 native 方法完成 方法替换
- *
- * @param src 旧方法
- * @param dest 新方法
- * @return 就方法ID
- */
- private static native long hook_native(Method src, Method dest);
-
- /**
- * 调用 native 方法完成 方法还原
- *
- * @param src
- * @param methodPtr
- * @return
- */
- private static native Method restore_native(Method src, long methodPtr);
-
- static {
- // 加载本地方法 so
- System.loadLibrary("method-hook-lib");
- }
-
-}
diff --git a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallVisionProvider.java b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallVisionProvider.java
index 42503d9055..98e6bef0a9 100644
--- a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallVisionProvider.java
+++ b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallVisionProvider.java
@@ -14,8 +14,8 @@ import androidx.fragment.app.Fragment;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.amap.api.col.n3.lg;
import com.amap.api.col.n3.lg2;
+import com.mogo.hook.HookManager;
import com.mogo.module.common.MogoApisHandler;
-import com.mogo.module.common.hook.HookManager;
import com.mogo.module.common.wm.WindowManagerView;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.map.IMogoSmallMapProvider;