diff --git a/app/build.gradle b/app/build.gradle index 003bc9cb1..b8f3c81a0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -291,6 +291,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['oppo-mcssdk-2.0.2.jar']) // xplan flutter module implementation project(path: ':flutter') + implementation project(path: ':flutter_boost') } repositories { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d29174b56..71922af3f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1271,10 +1271,17 @@ tools:remove="android:screenOrientation" /> + android:windowSoftInputMode="adjustResize" > + + + + + diff --git a/app/src/main/java/com/yizhuan/erban/MainActivity.java b/app/src/main/java/com/yizhuan/erban/MainActivity.java index f03c722a7..559bcf09c 100644 --- a/app/src/main/java/com/yizhuan/erban/MainActivity.java +++ b/app/src/main/java/com/yizhuan/erban/MainActivity.java @@ -23,6 +23,8 @@ import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentTransaction; +import com.idlefish.flutterboost.FlutterBoost; +import com.idlefish.flutterboost.containers.FlutterBoostFragment; import com.netease.nim.uikit.StatusBarUtil; import com.netease.nim.uikit.api.NimUIKit; import com.netease.nim.uikit.api.model.contact.ContactEventListener; @@ -60,6 +62,7 @@ import com.yizhuan.erban.community.publish.view.PublishActivity; import com.yizhuan.erban.community.square.SquareFragment; import com.yizhuan.erban.family.view.activity.FamilyHomeActivity; import com.yizhuan.erban.home.fragment.ContactsListFragment; +import com.yizhuan.erban.home.fragment.HomeFlutterFragment; import com.yizhuan.erban.home.fragment.HomeFragment; import com.yizhuan.erban.home.fragment.MeFragment; import com.yizhuan.erban.home.presenter.MainPresenter; @@ -238,9 +241,9 @@ public class MainActivity extends BaseMvpActivity fragmentArray.put(MainTabLayout.MAIN_TAB_POS_MSG, new ContactsListFragment()); fragmentArray.put(MainTabLayout.MAIN_TAB_POS_SQUARE, new SquareFragment()); fragmentArray.put(MainTabLayout.MAIN_TAB_POS_ME, new MeFragment()); - fragmentArray.put(MainTabLayout.MAIN_TAB_POS_GAME, FlutterFragment - .withCachedEngine("xplan_engine") - .renderMode(RenderMode.texture) + fragmentArray.put(MainTabLayout.MAIN_TAB_POS_GAME, new FlutterBoostFragment + .CachedEngineFragmentBuilder(FlutterBoostFragment.class, FlutterBoost.ENGINE_ID) + .url("/") .build()); } diff --git a/app/src/main/java/com/yizhuan/erban/application/XChatApplication.java b/app/src/main/java/com/yizhuan/erban/application/XChatApplication.java index f93d1fb45..4175f4d2a 100644 --- a/app/src/main/java/com/yizhuan/erban/application/XChatApplication.java +++ b/app/src/main/java/com/yizhuan/erban/application/XChatApplication.java @@ -5,6 +5,7 @@ import android.annotation.TargetApi; import android.app.ActivityManager; import android.app.Application; import android.content.Context; +import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.graphics.Color; @@ -24,6 +25,9 @@ import com.baidu.mobstat.StatService; import com.bumptech.glide.request.target.ViewTarget; import com.coorchice.library.utils.LogUtils; import com.huawei.hms.support.common.ActivityMgr; +import com.idlefish.flutterboost.FlutterBoost; +import com.idlefish.flutterboost.FlutterBoostDelegate; +import com.idlefish.flutterboost.containers.FlutterBoostActivity; import com.ishumei.smantifraud.SmAntiFraud; import com.llew.huawei.verifier.LoadedApkHuaWei; import com.microquation.linkedme.android.LinkedME; @@ -104,9 +108,11 @@ import com.yizhuan.xchat_android_library.utils.config.BasicConfig; import java.io.File; import java.io.IOException; +import java.util.HashMap; import java.util.Map; import java.util.Objects; +import io.flutter.embedding.android.FlutterActivityLaunchConfigs; import io.flutter.embedding.engine.FlutterEngine; import io.flutter.embedding.engine.FlutterEngineCache; import io.flutter.embedding.engine.dart.DartExecutor; @@ -251,13 +257,26 @@ public class XChatApplication extends Application { } dealHuaWeiCrash(); - FlutterEngine flutterEngine = new FlutterEngine(this); - flutterEngine.getDartExecutor().executeDartEntrypoint( - DartExecutor.DartEntrypoint.createDefault() - ); - FlutterEngineCache - .getInstance() - .put("xplan_engine", flutterEngine); + FlutterBoost.instance().setup(this, new FlutterBoostDelegate() { + + @Override + public void pushNativeRoute(String pageName, HashMap arguments) { + + } + + @Override + public void pushFlutterRoute(String pageName, String uniqueId, HashMap arguments) { + Intent intent = new FlutterBoostActivity.CachedEngineIntentBuilder(FlutterBoostActivity.class, FlutterBoost.ENGINE_ID) + .backgroundMode(FlutterActivityLaunchConfigs.BackgroundMode.opaque) + .destroyEngineWithActivity(false) + .url(pageName) + .urlParams(arguments) + .build(FlutterBoost.instance().currentActivity()); + FlutterBoost.instance().currentActivity().startActivity(intent); + } + }, engine->{ + engine.getPlugins(); + } ); LogUtils.d("init time = " +(System.currentTimeMillis() - startTime) +"ms"); } diff --git a/app/src/main/java/com/yizhuan/erban/home/fragment/HomeFlutterFragment.java b/app/src/main/java/com/yizhuan/erban/home/fragment/HomeFlutterFragment.java new file mode 100644 index 000000000..1a88842af --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/home/fragment/HomeFlutterFragment.java @@ -0,0 +1,31 @@ +package com.yizhuan.erban.home.fragment; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.Nullable; + +import com.idlefish.flutterboost.containers.FlutterBoostFragment; + +public class HomeFlutterFragment extends FlutterBoostFragment { + + private String uniqueId; + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return super.onCreateView(inflater, container, savedInstanceState); + } + + @Override + public void onResume() { + super.onResume(); + } + + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + } +} diff --git a/app/src/main/java/com/yizhuan/erban/ui/setting/LabActivity.java b/app/src/main/java/com/yizhuan/erban/ui/setting/LabActivity.java index 7366ddd98..9daadd229 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/setting/LabActivity.java +++ b/app/src/main/java/com/yizhuan/erban/ui/setting/LabActivity.java @@ -5,6 +5,7 @@ import android.view.View; import android.widget.RadioButton; import android.widget.RadioGroup; +import com.idlefish.flutterboost.FlutterBoost; import com.yizhuan.erban.R; import com.yizhuan.erban.base.BaseActivity; import com.yizhuan.erban.ui.webview.CommonWebViewActivity; @@ -33,7 +34,7 @@ public class LabActivity extends BaseActivity { findViewById(R.id.rb_h5_test).setOnClickListener(v -> CommonWebViewActivity.start(context, "http://192.168.10.7:5503/")); //vue测试地址 findViewById(R.id.rb_vue_test).setOnClickListener(v -> CommonWebViewActivity.start(context, "http://192.168.10.7:8080/")); - findViewById(R.id.rb_flutter_test).setOnClickListener(v -> startActivity(FlutterActivity.withCachedEngine("xplan_engine").build(context))); + findViewById(R.id.rb_flutter_test).setOnClickListener(v -> FlutterBoost.instance().open("/", null)); int enviroment = CommonPref.instance(BasicConfig.INSTANCE.getAppContext()).getInt(Env.KEY_ENVIRONMENT); //根据ID找到RadioGroup实例 RadioGroup group = (RadioGroup) this.findViewById(R.id.radioGroup); diff --git a/app/src/main/res/drawable/bg_flutter_splash.xml b/app/src/main/res/drawable/bg_flutter_splash.xml new file mode 100644 index 000000000..b96af5cbf --- /dev/null +++ b/app/src/main/res/drawable/bg_flutter_splash.xml @@ -0,0 +1,6 @@ + + + + diff --git a/settings.gradle b/settings.gradle index eab46f086..bc2b9bc54 100644 --- a/settings.gradle +++ b/settings.gradle @@ -3,8 +3,6 @@ include ':core' include ':library' include ':nim_uikit' // 添加 flutter module 依赖 -setBinding(new Binding([gradle: this]))// new -evaluate(new File( // new - settingsDir.parentFile, // new - 'accompany-android/xplan-flutter/.android/include_flutter.groovy' // new -)) \ No newline at end of file +setBinding(new Binding([gradle: this])) +evaluate(new File(settingsDir.parentFile, + 'accompany-android/xplan-flutter/.android/include_flutter.groovy')) \ No newline at end of file diff --git a/xplan-flutter b/xplan-flutter index 56db6f3e6..a9508182c 160000 --- a/xplan-flutter +++ b/xplan-flutter @@ -1 +1 @@ -Subproject commit 56db6f3e626936904e3d6c8a3c867bcd38fe2403 +Subproject commit a9508182ce1041a20614b54eaf96c9b9ddffd8b3