diff --git a/android/app/build.gradle b/android/app/build.gradle index 6358b05..f9ff9f1 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -110,6 +110,7 @@ android { dependencies { // The version of react-native is set by the React Native Gradle Plugin implementation("com.facebook.react:react-android") + implementation("org.greenrobot:eventbus:3.3.1") if (hermesEnabled.toBoolean()) { implementation("com.facebook.react:hermes-android") diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index e5677ec..27fcbfe 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -12,7 +12,7 @@ android:supportsRtl="true" android:theme="@style/AppTheme"> + diff --git a/android/app/src/main/assets/android.zip b/android/app/src/main/assets/android.zip new file mode 100644 index 0000000..977fc61 Binary files /dev/null and b/android/app/src/main/assets/android.zip differ diff --git a/android/app/src/main/assets/bundle.zip b/android/app/src/main/assets/bundle.zip deleted file mode 100644 index 47bb707..0000000 Binary files a/android/app/src/main/assets/bundle.zip and /dev/null differ diff --git a/android/app/src/main/java/com/trust/ywx/BuzActivity.kt b/android/app/src/main/java/com/trust/ywx/BuzActivity.kt index b1ad5d9..8cca016 100644 --- a/android/app/src/main/java/com/trust/ywx/BuzActivity.kt +++ b/android/app/src/main/java/com/trust/ywx/BuzActivity.kt @@ -32,8 +32,6 @@ class BuzActivity : ReactActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) AppManager.addActivity(this) - Toast.makeText(this, "BuzActivity:" + NavigationHelper.routerName, Toast.LENGTH_SHORT) - .show() } override fun onResume() { diff --git a/android/app/src/main/java/com/trust/ywx/MainApplication.kt b/android/app/src/main/java/com/trust/ywx/MainApplication.kt index 2b3f0cc..7f9bec4 100644 --- a/android/app/src/main/java/com/trust/ywx/MainApplication.kt +++ b/android/app/src/main/java/com/trust/ywx/MainApplication.kt @@ -9,8 +9,12 @@ import com.facebook.react.ReactNativeHost import com.facebook.react.ReactPackage import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost import com.facebook.react.defaults.DefaultReactNativeHost +import com.trust.ywx.event.BundleUpdateEvent import com.trust.ywx.specs.navigation.NavigationPackage +import com.trust.ywx.utils.BUNDLE_VERSION_CODE import com.trust.ywx.utils.FileHelper +import com.trust.ywx.utils.SHARED_PREFERENCES_NAME +import org.greenrobot.eventbus.EventBus import java.io.File class MainApplication : Application(), ReactApplication { @@ -30,7 +34,7 @@ class MainApplication : Application(), ReactApplication { override fun getJSBundleFile(): String? = if (getUseDeveloperSupport()) { null } else { - FileHelper.getFilePath("common.android.bundle", this@MainApplication, "bundles") + FileHelper.getFilePath("common.android.bundle", this@MainApplication, "bundles/android") } override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG @@ -43,23 +47,46 @@ class MainApplication : Application(), ReactApplication { get() = getDefaultReactHost(applicationContext, reactNativeHost) companion object { - var isNew = true + var isInit = false } override fun onCreate() { - val f = File(FileHelper.getDirPath(this, "bundles")) - val bf = File(FileHelper.getFilePath("bundle.zip", this, "bundles")) - if (!f.exists() || !f.isDirectory) { - f.mkdirs() - } - if (f.list().size <= 1) { - bf.delete() - FileHelper.copyAssetFileToInternalStorage(this, "bundle.zip", bf) - if (bf.exists()) { - FileHelper.unzip(bf, f) - } - } super.onCreate() + if (!BuildConfig.DEBUG) + createOrUpdateBundle() loadReactNative(this) } + + private fun createOrUpdateBundle() { + // 使用中的bundle版本 + val sharedPref = getSharedPreferences(SHARED_PREFERENCES_NAME, MODE_PRIVATE) + val bundleVersion = sharedPref.getInt("bundle_version", 0) + + // apk携带的bundle版本 + val localBundleVersion = BUNDLE_VERSION_CODE + // 本地bundle目录 + val f = File(FileHelper.getDirPath(this, "bundles")) + + // 使用中的bundle比apk携带的小,则直接复制解压 + if (bundleVersion < localBundleVersion || !f.exists() || !f.isDirectory) { + // bundle.zip在本地的路径 + val bf = File(FileHelper.getFilePath("bundle.zip", this, "bundles")) + // 果断点,直接删除重建 + if (f.exists() && !f.isDirectory) { + f.delete() + } + f.mkdirs() + // 拷贝bundle.zip + FileHelper.copyAssetFileToInternalStorage(this, "android.zip", bf) + if (bf.exists()) { + // 复制成功后,直接解压 + FileHelper.unzip(bf, f) + isInit = true + EventBus.getDefault().post(BundleUpdateEvent()) + } + } else { + isInit = true + } + + } } diff --git a/android/app/src/main/java/com/trust/ywx/WelcomeActivity.kt b/android/app/src/main/java/com/trust/ywx/WelcomeActivity.kt new file mode 100644 index 0000000..3287e7d --- /dev/null +++ b/android/app/src/main/java/com/trust/ywx/WelcomeActivity.kt @@ -0,0 +1,51 @@ +package com.trust.ywx + +import android.content.Intent +import android.os.Bundle +import android.os.Handler +import android.os.Looper +import androidx.appcompat.app.AppCompatActivity +import com.trust.ywx.event.BundleUpdateEvent +import org.greenrobot.eventbus.EventBus +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode + + +class WelcomeActivity : AppCompatActivity() { + val handler = Handler(Looper.getMainLooper()) + val runnable = Runnable { + if (MainApplication.isInit) { + startActivity(Intent(this@WelcomeActivity, MainActivity::class.java)) + finish() + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + AppManager.addActivity(this) + handler.postDelayed(runnable, 3000) + } + + @Subscribe(threadMode = ThreadMode.MAIN) + fun onMessageEvent(event: BundleUpdateEvent) { + handler.removeCallbacks(runnable) + startActivity(Intent(this@WelcomeActivity, MainActivity::class.java)) + finish() + } + + override fun onStart() { + super.onStart() + EventBus.getDefault().register(this); + } + + override fun onStop() { + super.onStop() + EventBus.getDefault().unregister(this); + } + + override fun onDestroy() { + super.onDestroy() + AppManager.removeActivity(this) + } +} diff --git a/android/app/src/main/java/com/trust/ywx/event/BundleUpdateEvent.java b/android/app/src/main/java/com/trust/ywx/event/BundleUpdateEvent.java new file mode 100644 index 0000000..a293ef8 --- /dev/null +++ b/android/app/src/main/java/com/trust/ywx/event/BundleUpdateEvent.java @@ -0,0 +1,4 @@ +package com.trust.ywx.event; + +public class BundleUpdateEvent { +} diff --git a/android/app/src/main/java/com/trust/ywx/multiple/MultipleReactActivityDelegate.kt b/android/app/src/main/java/com/trust/ywx/multiple/MultipleReactActivityDelegate.kt index 208e648..79b92ce 100644 --- a/android/app/src/main/java/com/trust/ywx/multiple/MultipleReactActivityDelegate.kt +++ b/android/app/src/main/java/com/trust/ywx/multiple/MultipleReactActivityDelegate.kt @@ -52,9 +52,9 @@ class MultipleReactActivityDelegate( helper.loadBundle( JSBundleLoader.createFileLoader( FileHelper.getFilePath( - "$mainComponentName.android.bundle", + "buz.android.bundle", this.reactActivity.applicationContext, - "bundles" + "bundles/android" ) ), ) @@ -91,7 +91,7 @@ class MultipleReactActivityDelegate( val fileName = FileHelper.getFilePath( "$mainComponentName.android.bundle", reactActivity.applicationContext, - "bundles" + "bundles/android" ) instance?.loadScriptFromFile( fileName, diff --git a/android/app/src/main/java/com/trust/ywx/utils/VersionHelper.kt b/android/app/src/main/java/com/trust/ywx/utils/VersionHelper.kt new file mode 100644 index 0000000..4b34a51 --- /dev/null +++ b/android/app/src/main/java/com/trust/ywx/utils/VersionHelper.kt @@ -0,0 +1,10 @@ +package com.trust.ywx.utils + +// 每次发版得改一下这里,保证bundle是最新的 +const val BUNDLE_VERSION_CODE = 1 + + +/** + * 以下为常量,不需要修改 + */ +const val SHARED_PREFERENCES_NAME = "com.trust.ywx.PREFERENCE_FILE_KEY" \ No newline at end of file diff --git a/android/app/src/main/res/layout/activity_main.xml b/android/app/src/main/res/layout/activity_main.xml index 61c821c..07b095d 100644 --- a/android/app/src/main/res/layout/activity_main.xml +++ b/android/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,12 @@ -