如何使用React Native生成可以在无服务器情况下运行的APK?

317

我已经构建了我的应用程序,可以在本地模拟器上运行(通过更改调试服务器,也可以在同一网络中的Android设备上运行)。

但是,我想构建一个APK文件,可以将其发送给没有访问开发服务器权限的人,并希望他们能够测试该应用程序。

我看到文档的iOS部分有一个使用离线捆绑包的部分。但我不知道如何在Android上实现相同的功能。这是否可能?如果可以,怎么做?

更新: 在这个问题的答案中(Android failed to load JS bundle),它说可以从开发服务器下载离线捆绑包。但当我从开发服务器获取捆绑包时,图像文件无法加载。

22个回答

8
我有另一个解决方案:生成签名密钥 您可以使用keytool生成私人签名密钥。在Windows上,必须从C:\ Program Files \ Java \ jdkx.x.x_x \ bin运行keytool。
$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

将my-release-key.keystore文件放置在项目文件夹android/app目录下。

编辑您的项目文件夹中的android/app/build.gradle文件并添加签名配置,

android {
....
signingConfigs { 
  release { 

      storeFile file('my-release-key.keystore') 
      storePassword 'yourpassword' 
      keyAlias 'my-key-alias' 
      keyPassword 'yourpassword' 

  } 
}}}


buildTypes {release {signingConfig signingConfigs.release}}

并运行

gradlew assembleRelease

这将为您提供两个文件:android\app\build\outputs\apk下的app-release.apk和app-release-unsigned.apk,现在请在您的Android设备上安装app-release.apk。

安卓应用程序文件夹在哪里?我在我的项目下找不到它(我只看到了node_modules,而且里面没有android/app)。 - DHLopez
1
@DHLopez,你必须使用纯React Native项目才能访问android文件夹。如果你正在使用Expo,则必须使用expo eject将Expo项目分离。 - fxbayuanggara

8

如果您遇到与index.android.js相关的错误。这是因为您正在使用新的React-Native版本(我正在使用0.55.4)。只需将“index.android.js”替换为“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/

6

首先

cd android

然后运行

./gradlew installRelease

最终您将能在这里找到apk文件。

Project\android\app\build\outputs\apk\release\app-release.apk

在这里使用installRelease有意义吗? - dipakbari4

5

对我来说这个方法可行(MACOS)

打开终端

cd project_directory

运行以下命令:

yarn start

打开另一个终端

运行以下命令

cd android
./gradlew assembleRelease

5

Android Studio中的GUI方式

  • 打开React Native项目中的Android应用程序部分并在Android Studio中打开它(这意味着只需使用Android Studio打开React Native项目的android文件夹即可)。
  • 转到顶部的“Build”选项卡。
  • 滚动到“Build Bundle(s) / APK(s)”下方。
  • 然后选择“Build APK(s)”。
  • 这将引导您完成定位签署APK所需密钥或创建您尚未拥有的密钥的过程,这都非常简单。如果您只是练习,可以生成这些密钥并将其保存到桌面。
  • 完成该过程并且构建成功后,在Android Studio下方会弹出一个弹窗。点击其中的“locate”链接(APK文件)。
  • 这将带您到apk文件,将其移至您的Android设备上。然后在Android设备上导航到该文件并安装它。

5

为了使用最新的React Native版本打包项目

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/

iOS

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


5

图片描述

图片描述

  • 一些适用于Windows用户的有用脚本

将以下代码复制并粘贴到"script":{}下的package.json文件中

 * VS Code
   --Enable NPM SCRIPT

   --Now you can directly run scripts from here


    "android": "react-native run-android",
    "clean-run-android": "cd android && ./gradlew clean && cd.. && react-native run-android  ",
    "start": "node node_modules/react-native/local-cli/cli.js start --reset-cache",
    "reset": "rm -rf node_modules/ && npm cache clear && watchman watch-del-all && npm i",
    "debug-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 && cd app/src/main/res/ && rmdir /S /Q raw && rmdir /S /Q drawable-mdpi",
    "release-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/build/intermediates/res/merged/release/ && cd android && ./gradlew assembleRelease && cd..",
    "install-apk": "cd android && ./gradlew installRelease",
    "release-aab": "cd android && ./gradlew bundleRelease"

2

对我来说,./gradlew assembleRelease 不再起作用,但以下内容可以。

./gradlew :app:assembleRelease

感谢这条评论

2

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

如果你真的想要生成一个可以在没有开发服务器的情况下运行的调试APK(用于测试目的),这里是我回答另一篇类似帖子的链接,它可能会对你有所帮助。
https://dev59.com/EVsW5IYBdhLWcg3wM0yF#65762142

你需要做的只是:

  1. 编辑 android/app/build.gradle
project.ext.react = [
    ...
    bundleInDebug: true, // add this line
]

在您的项目根目录下运行此命令。
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文件夹内运行./gradlew assembleDebug(Mac或Linux系统)或gradlew assembleDebug(Windows系统)
    如果构建失败,建议您从Android Studio中构建应用程序

2

只有这个对我有效 - yarn android --variant=release


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接