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

因为我是新的反应本机,所以如果有任何错误的步骤,让我知道。

我已经按照文档使用命令构建了一个react原生android应用程序

react-native安卓

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

react-native运行android

这给了我2 apk文件的输出在我的projectfolder / android / app /构建/输出/ apk

enter image description here

现在,当我安装这个apk安装后,它要求一个开发服务器连接到捆绑JS。但我的要求是,用户不需要与开发服务器作斗争,他只需要安装apk,一切都完成了。

已经经历了一些stackoverflow问题,但对构建不需要开发服务器的unsigned apk没有帮助。

你们能帮我找到如何在react native中构建和unsigned apk的方法吗?

250150 次浏览

您需要为调试版本手动创建包。

包调试构建:

#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

然后在捆绑后构建APK:

$ cd android
#Create debug build:
$ ./gradlew assembleDebug
#Create release build:
$ ./gradlew assembleRelease #Generated `apk` will be located at `android/app/build/outputs/apk`

附注:另一种方法可能是修改gradle脚本。

对于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

请按照这些步骤操作。

捆绑你的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

如果你在根项目中有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

创建调试apk:

cd android/
./gradlew assembleDebug

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

cd app/build/outputs/apk/

对我来说,在项目目录中运行以下命令。

对于react原生旧版本(你会在根目录中看到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 ../

对于react原生新版本(你只需要在根目录中看到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 ../

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

  • Gradle & lt;3.0: < em > android / app /构建/输出/ apk / < / em >
  • Gradle 3.0+: < em > android / app /构建/输出/ apk /发布/ < / em >

在你遵循第一反应之后,你可以使用

react-native run-android --variant=debug

你的应用程序不需要打包器就能运行

我在react本地0.55.4,基本上我必须手动捆绑:

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

然后通过usb连接设备,打开usb调试。使用adb devices验证连接的设备。

最后运行react-native run-android,它将在你的手机上安装调试apk,你可以在开发服务器上运行它

注意:

  • 从0.49.0开始,入口点是一个index.js
  • gradlew assembleRelease只生成不能安装的release-unsigned apks

可以生成一个unsigned 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

然后APK文件将在android\app\build\outputs\ APK \debug\app-debug. APK上生成

React版本

在根项目目录中

确保你已经有了目录android / app / src / main /资产/,如果没有创建目录,在那之后创建一个新文件并保存为index.android.bundle,并把你的文件像这样android / app / src / main /资产/ index.android.bundle

然后运行这个

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

然后你可以在应用程序/构建/输出/ apk /调试/ app-debug.apk中得到apk

以防其他人最近遇到同样的问题,我使用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

好运!

我找到了一个改变buildTypes的解决方案:

buildTypes {
release {
signingConfig signingConfigs.release
}
}

从react-native 0.57开始,之前提供的答案都不能再工作了,因为gradle希望在其中找到bundle和资产的目录已经改变了。

没有react-native bundle的简单方法

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

app/build.gradle文件的project.ext.react映射中,添加bundleInDebug: true条目。 如果你不希望它是一个--dev版本(没有警告和缩小包),那么你也应该将devDisabledInDebug: true条目添加到同一个映射中

使用react-native bundle

如果出于某种原因,你需要或想要使用react-native bundle命令来创建包,然后使用./gradlew assembleDebug命令来创建包含包和资产的APK,你必须确保将包和资产放在正确的路径中,以便gradle能够找到它们。

在react-native 0.57中,这些路径是 android/app/build/generated/assets/react/debug/index.android.js用于bundle

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

Bundle和资产路径

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

不使用dev-server生成调试APK

如果你真的想要生成一个调试APK(用于测试目的),可以运行没有开发服务器,恭喜!我来帮你。:)
每个人都说我们需要运行两个命令react-native bundle ...gradlew assembleDebug,但生成的APK仍然不能在没有开发服务器的情况下工作。经过多次研究;我发现我们需要在gradle文件中进行更改(如在步骤2中)。只需遵循以下步骤:

  1. 在react原生项目中,去/android/app/src/main创建一个文件夹assets
  2. 编辑android > app > build.gradle
project.ext.react = [
...
bundleInDebug: true, // add this line
]
  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
  1. 现在,进入android文件夹:cd android
  2. 并且:gradlew assembleDebug
    (如果构建失败,尝试从android studio构建assembleDebug)

这将在android/app/build/outputs/apk/debug目录下创建app-debug.apk文件,您可以安装&不使用dev-server运行。

您可以为此使用两个扩展。这是添加到react-native的设置:

  1. disableDevInDebug: true:在调试buildType中禁用开发服务器
  2. bundleInDebug: true:添加jsbundle到调试buildType。

因此,你在android/app/build.gradle中的最终project.ext.react应该如下所示

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
]

对于这个派对来说已经很晚了,但是没有一个解决方案at least on page 1对我不起作用。因此,我对react注册的年级任务进行了更深入的研究;

只要添加bundleInDebug : true,如@Er Suman G的答案所示

在android文件夹中根据环境运行./gradlew assembleDebuggradle.bat assembleDebug

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

在build中添加devDisabledInDebug: trueproject.ext.react。gradle文件。

不使用dev-server生成调试APK

如果您想生成一个调试APK(用于测试),它可以在没有开发服务器的情况下运行。

  1. 在react原生项目中,去/android/app/src/main创建一个文件夹assets
  2. 编辑android > app > build.gradle
universalApk true  // If true, also generate a universal APK
  1. 在react native项目的根目录下运行这个命令
npx 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
  1. 现在,进入android文件夹:cd android
  2. 并且:./gradlew assembleDebug
    (如果构建失败,尝试从android studio构建assembleDebug)

做这些事。

如果你想在设备中安装应用程序,只需运行CMD

adb install 'path/add-debug.apk'