gpt4 book ai didi

android - Expo - APK 包必须包含预期的嵌入式 Assets

转载 作者:行者123 更新时间:2023-12-03 20:53:34 25 4
gpt4 key购买 nike

我是 react 新手,我尝试运行我的应用程序,但出现以下错误

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.bits.bee.bwc, PID: 12601
java.lang.AssertionError: APK bundle must contain the expected embedded asset asset_c2f3d742a18a28238b7cd34a5d4b7316.png
at expo.modules.updates.loader.EmbeddedLoader.copyAllAssets(EmbeddedLoader.java:174)
at expo.modules.updates.loader.EmbeddedLoader.processManifest(EmbeddedLoader.java:137)
at expo.modules.updates.loader.EmbeddedLoader.loadEmbeddedUpdate(EmbeddedLoader.java:57)
at expo.modules.updates.UpdatesController.start(UpdatesController.java:286)
at expo.modules.updates.UpdatesController.initialize(UpdatesController.java:96)
at com.bits.bee.bwc.MainApplication.onCreate(MainApplication.java:98)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1011)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4552)
at android.app.ActivityThread.access$1500(ActivityThread.java:147)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5255)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652)

有人可以向我解释它是如何工作的,因为我在我的 Assets 文件夹中查找了它,没有像这样命名的东西。我该如何解决这个问题?谢谢

最佳答案

信息
这个异常只发生在我使用 react-native run-android 运行调试版本时。并且在使用 react-native run-android --variant=release 运行发布版本时没有出现异常.
解决方案
检查 MainApplication.java 中是否有以下行如果它在那里,那么 删除该行 :

import com.facebook.react.BuildConfig;

解释
import com.facebook.react.BuildConfig;原因 UpdatesController.initialize(this);在不应发生的 Debug模式下调用。
更多详情 :
当您查看您的 Stacktrace 时,您发布了该行
at com.bits.bee.bwc.MainApplication.onCreate(MainApplication.java:98)
指向 UpdatesController.initialize(this); .包括上面和下面的行就是它的样子:
if (!BuildConfig.DEBUG) {
UpdatesController.initialize(this);
}
这个 BuildConfig这里指向 BuildConfig在构建期间创建的包的类( com.bits.bee.bwc 在你的情况下)。如果您导入 com.facebook.react.BuildConfig它将指向另一个 BuildConfig不包含正确 DEBUG 的类你想要的值(value)。
由于 BuildConfig.DEBUG然后将是 undefinedfalse , UpdatesController.initialize(this);被调用,尽管它不应该在调试构建期间调用。因此,由于调试版本不会嵌入 Assets , copyAllAssets最终调用的函数将找不到任何 Assets ,我们得到上述错误。

我最终导入 com.facebook.react.BuildConfig; 的一些背景
我遇到了 java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so 的问题在我的发布版本中并按照建议添加该行,如此处所述 https://stackoverflow.com/questions/57036317/react-native-java-lang-unsatisfiedlinkerror-couldnt-find-dso-to-load-libherm/63048532#answer-62119615 .它没有对发布版本进行更改,我忘记了。直到后来,当我尝试进行调试构建时,我才得到了这个错误。我花了很长时间才意识到这个添加的行是问题的原因!
我从调试这个问题中学到了什么:
  • 不要只是添加东西,因为你认为它不会受到伤害。如果它没有达到特定目的或没有效果,请立即删除更改。否则它可能会在以后引起奇怪的副作用。
  • 如果您在使用 Android 时遇到构建问题,请使用 Android Studio 而不是 Flipper 进行调试。 Flipper 不会向您显示整个 Stacktrace,在 Android Studio 中,您可以轻松浏览所有 Java 文件,这些文件最终帮助我理解了这个异常。
  • 关于android - Expo - APK 包必须包含预期的嵌入式 Assets ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61883343/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com