在没有开发服务器的设备上构建和安装unsigned apk?

kAy*_*270 131 android apk react-native

因为我是反应原生的新手,所以如果步骤中有任何错误,请告诉我.

我根据文档使用命令构建了一个react native android应用程序

react-native android

在设备上运行时,使用了以下命令

react-native run-android

这给了我在我的projectfolder/android/app/build/outputs/apk中输出的2个apk文件

在此输入图像描述

现在,当我在安装后使用安装这个apk时,它要求开发服务器连接到捆绑JS.但我的要求是,用户不需要为开发服务器而烦恼,只需要安装apk即可完成所有操作.

已经完成了一些stackoverflow问题但没有帮助构建不需要开发服务器的unsigned apk.

你能帮助我找到如何在反应原生中构建和未签名的apk的方法吗?

Dmi*_*mov 207

您需要手动为调试版本创建捆绑包.

捆绑调试版本:

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

#React-Native 0.49.0+
react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

#React-Native 0-0.49.0
react-native bundle --dev false --platform android --entry-file index.android.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug
Run Code Online (Sandbox Code Playgroud)

然后在捆绑后构建APK:

$ cd android
#Create debug build:
$ ./gradlew assembleDebug
#Create release build:
$ ./gradlew assembleRelease #Generated `apk` will be located at `android/app/build/outputs/apk`
Run Code Online (Sandbox Code Playgroud)

PS另一种方法可能是修改gradle脚本.

  • 如果在启动应用程序时这样做会给我一个大红屏?(注意:我在弹出后直接运行它) (10认同)
  • 有最新版本的人,请将入口点更改为--entry-file index.js,谢谢. (8认同)
  • 万一某人缺少资产:这对我有用--assets-dest。/ android / app / src / main / res /` (3认同)
  • 如何构建最新版本,因为我们没有index.android.js? (3认同)
  • ***react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets -dest ./android/app/build/intermediates/res/merged/debug***用于新的反应型版本,其中index.js统一用于ios和android (3认同)

小智 84

请按照这些步骤操作.

捆绑你的js:

如果项目根目录中有index.android.js则运行

react-native bundle --dev false --platform android --entry-file index.android.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug
Run Code Online (Sandbox Code Playgroud)

如果项目根目录中有index.js则运行

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
Run Code Online (Sandbox Code Playgroud)

创建调试apk:

cd android/
./gradlew assembleDebug
Run Code Online (Sandbox Code Playgroud)

然后你可以在这里找到你的apk:

cd app/build/outputs/apk/
Run Code Online (Sandbox Code Playgroud)

  • 如果在启动应用程序时这样做会给我一个大红屏?(注意:我在弹出后直接运行它) (9认同)
  • @SimonForsberg如果你正在使用react ^ 0.5,将入口点更改为index.js而不是App.js或index.android.js,`react-native bundle --dev false --platform android --entry-file index. js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest./ android/app/build/intermediates/res/merged/debug` (2认同)
  • 无法正常运行,此命令将构建一个apk,但该apk在没有打包程序服务器的情况下无法运行。 (2认同)
  • 这是行不通的,因为它需要一个开发服务器 (2认同)
  • 我遇到了同样的问题,当生成调试APK时,我可以安装它,但是我需要开发服务器,当我使用发布APK时,我无法将它安装在我的手机上,我不知道什么是错误的 (2认同)

Nha*_*Cao 28

在我看来,在项目目录中运行以下命令.

对于本机旧版本(您将在root中看到index.android.js):

mkdir -p android/app/src/main/assets && rm -rf android/app/build && react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res && cd android && ./gradlew clean assembleRelease && cd ../
Run Code Online (Sandbox Code Playgroud)

对于本机新版本(您只需在root中看到index.js):

mkdir -p android/app/src/main/assets && rm -rf android/app/build && react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res && cd android && ./gradlew clean assembleRelease && cd ../
Run Code Online (Sandbox Code Playgroud)

apk文件将在以下位置生成:

  • Gradle <3.0:android/app/build/outputs/apk /
  • Gradle 3.0+:android/app/build/outputs/apk/release /

  • 对我来说,它是`$ mkdir -p android/app/src/main/assets && rm -rf android/app/build && react-native bundle --platform android --dev false --entry-file index.js - bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res && cd android && ./gradlew assembleDebug` (6认同)

小智 23

最新更新

在您的根项目目录中

确保您已经有目录android / app / src / main / assets /,如果没有创建目录,则在此之后创建新文件并另存为index.android.bundle,然后将文件放入android / app / src / main / assets / index.android 。束

在那之后运行这个

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

cd android && ./gradlew assembleDebug
Run Code Online (Sandbox Code Playgroud)

然后你就可以得到apk应用程序/生成/输出/ APK /调试/ APP-debug.apk

  • 创建“index.android.bundle”对于不在主机中使用开发服务器非常重要。 (3认同)

Er *_*n G 12

无需开发服务器即可生成调试 APK

如果您确实想生成一个可以在没有开发服务器的情况下运行的调试 APK (用于测试目的) ,那么恭喜!我来帮助你。:) 每个人都说我们需要运行两个命令,但是生成的 APK 在没有开发服务器的情况下仍然无法工作。经过多次研究和尝试,我发现我们需要更改 gradle 文件(如步骤 2 所示)。只需按照以下步骤操作:
react-native bundle ...gradlew assembleDebug

  1. 在你的 React Native 项目中创建/android/app/src/main一个文件夹assets
  2. 编辑android > app > build.gradle
project.ext.react = [
    ...
    bundleInDebug: true, // add this line
]
Run Code Online (Sandbox Code Playgroud)
  1. 在 React Native 项目的根目录中运行此命令
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
Run Code Online (Sandbox Code Playgroud)
  1. 现在,进入 android 文件夹:cd android
  2. 并且,运行此命令:(gradlew assembleDebug
    如果构建失败,请尝试从 android studio 构建 assembleDebug)

这将app-debug.apk在目录中创建文件android/app/build/outputs/apk/debug,您可以在没有开发服务器的情况下安装和运行该文件。

  • 对于我来说,复制资源后,我遇到了重复资源问题。 (2认同)

The*_*Baj 9

从 react-native 0.57 开始,之前提供的答案都不再有效,因为 gradle 期望在其中找到包和资产的目录已更改。

没有反应原生包的简单方法

构建调试版本的最简单方法是根本不使用该react-native bundle命令,而只需修改您的app/build.gradle文件。

在文件的project.ext.react地图内app/build.gradle,添加bundleInDebug: true条目。如果您希望它不是--dev构建(没有警告和缩小包),那么您还应该将devDisabledInDebug: true条目添加到同一个地图中。

使用 react-native 包

如果由于某种原因您需要或想要使用该react-native bundle命令来创建捆绑包,然后./gradlew assembleDebug使用捆绑包和资产创建 APK,您必须确保将捆绑包和资产放在正确的路径中,gradle 可以在其中找到他们。

从 react-native 0.57 开始,这些路径 android/app/build/generated/assets/react/debug/index.android.js用于包

android/app/build/generated/res/react/debug资产。因此,用于手动捆绑和使用捆绑包和资产构建 APK 的完整命令是:

react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/generated/assets/react/debug/index.android.bundle --assets-dest ./android/app/build/res/react/debug

进而

./gradlew assembleDebug

捆绑包和资产路径

请注意,gradle 查找包和资产的路径可能会发生变化。要找出这些路径的位置,请查看目录中的react.gradle文件node_modules/react-native。以def jsBundleDir =和开头的行分别def resourcesDir =指定 gradle 查找包和资产的目录。


小智 9

您可以使用两个扩展来实现此目的。这被添加到react-native中以设置这些:

  1. disableDevInDebug: true:在调试构建类型中禁用开发服务器
  2. bundleInDebug: true: 添加 jsbundle 来调试 buildType。

所以,你的最终project.ext.react结果android/app/build.gradle应该如下所示

project.ext.react = [
    enableHermes: false,  // clean and rebuild if changing
    devDisabledInDev: true, // Disable dev server in dev release
    bundleInDebug: true, // add bundle to dev apk
]
Run Code Online (Sandbox Code Playgroud)


Abd*_*oui 8

遵循第一个响应后,您可以使用

react-native run-android --variant=debug
Run Code Online (Sandbox Code Playgroud)

而且您的应用程序无需打包程序即可运行


小智 7

以防万一其他人最近遇到同样的问题,我正在使用 React Native 0.59.8(也使用 RN 0.60 进行测试),并且我可以确认其他一些答案,步骤如下:

  1. 卸载设备上安装的应用程序的最新编译版本

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

  3. 跑步cd android/ && ./gradlew assembleDebug

  4. 在 android/app/build/outputs/apk/debug 文件夹中获取 app-debug.apk

祝你好运!


小智 6

可以生成未签名的 apk 版本用于测试目的,以便您可以在手机上运行。

最初我遇到了这里最提到的红屏错误。但我遵循了这里提到的相同内容,它对我有用。

在控制台的工作目录中,运行这四个命令

react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

cd android

gradlew assembleDebug

gradlew assembleRelease
Run Code Online (Sandbox Code Playgroud)

然后 APK 文件将在以下位置生成: android\app\build\outputs\apk\debug\app-debug.apk


Dha*_*ali 5

对于 Windows 用户,如果所有步骤都正确遵循:https : //facebook.github.io/react-native/docs/signed-apk-android.html

您只需要运行: gradlew assembleRelease

你的文件将是:

  • app-release.apk
  • app-release-unaligned.apk

地点: E:\YourProjectName\android\app\build\outputs\apk

  • 通常,调试版本与发布版本具有不同的配置(例如,它使用暂存 API)。如果您想要使用与发布版本不同的构建配置的独立 APK,这将无济于事 (2认同)

Olg*_*aya 5

聚会已经很晚了,但没有一个解决方案at least on page 1对我不起作用。因此,我更深入地研究了 React 注册的评分任务;

只需添加bundleInDebug : true@Er Suman G 的答案即可

运行./gradlew assembleDebuggradle.bat assembleDebug基于您的 android 文件夹中的环境。

这将生成可调试的非服务器所需的应用程序android/app/build/outputs/apk/debug