【问题标题】:Signed React Native app not loading assets correctly签名的 React Native 应用程序未正确加载资产
【发布时间】:2019-10-14 03:41:40
【问题描述】:

所以,我使用 USB 电缆在调试模式下运行应用程序,它运行良好。然后,我使用 USB 电缆运行发布版本,它也可以正常工作,直到我将其与手机断开并重新启动应用程序。该应用程序无法再加载资产。我已经尝试了所有引用herehere 的方法,但仍然没有帮助。

当应用无法加载资产时,它会记录以下消息:

[Error: Could not fetch data from url http://localhost:8081/assets/src/assets/modelv2.pb?platform=android&hash=889b05962c1b1b35b1c07a84b98bcc63]
      framesToPop: 1,
      code: 'EUNSPECIFIED',
      line: 17119,
      column: 31,
      sourceURL: 'http://localhost:8081/index.delta?platform=android&dev=true&minify=false' }

因此,这意味着它仍在尝试从已死的本地主机打包程序中获取资产。请帮帮我!

反应原生:^0.55.4

反应:^16.3.1

index.js

import { AppRegistry } from 'react-native';
import App from './App'; 
AppRegistry.registerComponent('TagMosquito', () => App);

【问题讨论】:

  • 它如何影响资产捆绑?
  • 你是如何创建 budle 和资产的?

标签: android react-native localhost react-native-android packager


【解决方案1】:

如果你想创建一个签名的 APK(签名的 apk 用于 Android APK,所以我认为你想创建一个 APK)你首先需要创建一个包。 如果你已经创建了它,那么让我知道你使用的命令,也只是分享你的项目结构的屏幕截图,它应该显示你的主索引文件和 android 资产文件夹路径,然后我会给你命令。现在你只是。

如果不使用下面的命令。

安卓

react-native bundle --entry-file index.js --platform android --dev false --bundle-output ./android/app/src/main/assets/index.android.bundle -- assets-dest ./android/app/src/main/res/

iOS(它自己创建捆绑包,如果不是请使用下面的命令)

react-native bundle --entry-file index.js --platform ios --dev false --bundle-output main.jsbundle

如果有任何命令不起作用,请告诉我,那么它需要一些修改。如果它可以工作,您需要检查是否会创建一个名为 ma​​in.jsbundle

的新文件

【讨论】:

  • 我使用了上面的命令,看起来它创建并保存了包,但签名的应用程序由于某种原因无法访问它。这是捆绑包的路径:android/app/build/intermediates/assets/release/index.android.bundle
  • 但是我在这里没有看到任何 main.jsbundle 文件。此外,这里是 android 资产 android/app/src/main/assets 的路径。 index.js文件代码我分享一下,不过也就5行吧。
  • 1.您的捆绑包应该在资产文件夹中,而不是任何其他地方。 android/app/src/main/assets/index.android.bundle 2. 我不需要 index.js 代码我想要它的路径,并且在路径下方应该有一个 assets 文件夹。 android/app/src/main/assets 3. 同样,在 bundle 命令完成后,您的资产将自动复制到您的 android res 文件夹,并带有一些新名称。 4. 然后你需要创建 APK 文件。(要么叹气要么不发布构建) 5. 在发布 APK 测试时停止你的 npm 服务器。
  • 您需要在运行 npm startyarn start 命令的同一级别运行您的 bundle 命令。
【解决方案2】:

在这种情况下,将shrinkResources 设置为false 将起作用。如果您在应用程序的build.gradle 文件中启用shrinkResources,Gradle 可以代表您自动删除资源(未使用)。

release {
            ..
            minifyEnabled true
            shrinkResources false    <-- set this false
            proguardFiles getDefaultProguardFile()
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 2015-08-29
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多