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

然而,我想构建一个APK,我可以发送给没有访问开发服务器的人,我希望他们能够测试应用程序。

我看到有一节使用离线捆绑在iOS部分的文档。但我不知道如何在android上实现同样的功能。这可能吗?如果有,怎么做?

更新:关于这个问题的答案(Android无法加载JS包),据说离线包可以从开发服务器下载。但是当我从开发服务器获取包时,图像文件无法加载。


当前回答

如果有人想建立没有playstore键,那么这个命令将是非常有用的。

# react-native run-android——variant=release

构建完成后,您可以在发布构建文件中找到apk。

其他回答

您必须创建一个密钥来签署apk。使用下面的方法创建你的密钥:

 keytool -genkey -v -keystore my-app-key.keystore -alias my-app-alias -keyalg RSA -keysize 2048 -validity 10000

在提示时输入密码

生成密钥后,使用它来生成可安装的版本:

 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/

使用gradle生成构建

 cd android && ./gradlew assembleRelease

上传APK到你的手机。-r标志将替换现有的应用程序(如果它存在的话)

adb install -r ./app/build/outputs/apk/app-release-unsigned.apk

这里提到了更详细的描述:https://facebook.github.io/react-native/docs/signed-apk-android.html

更新:根据@shashuec和@Fallen的评论

如果出现错误

ENOENT:没有这样的文件或目录,打开'android/app/src/main/assets/index.android.bundle'

执行mkdir android/app/src/main/assets命令

React Native 0.49及以上版本

你应该在终端的工程目录下运行这个命令

1 - mkdir android/app/src/main/assets
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

如果低于0.49

  1 - mkdir android/app/src/main/assets
  2 - 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

然后使用android studio在你的react原生应用目录中打开“android”文件夹,它会要求升级gradle和其他一些东西。去build->生成签名APK,并按照那里的指示。那好。

对于最新的react原生版本来捆绑项目

安卓

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

我有另一个解决办法:- 生成签名密钥 您可以使用keytool生成一个私有签名密钥。在Windows上,keytool必须从C:\Program Files\Java\jdkx.x.x_x\bin.运行

$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

把我的释放钥匙放上去。在项目文件夹的android/app目录下的Keystore文件。

编辑文件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。

如果您得到“Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES].”

我尝试使用@Aditya的方法来生成一个无签名APK文件并安装它,但当我在我的Android平板电脑上安装它时,它给了我一个失败的错误[INSTALL_PARSE_FAILED_NO_CERTIFICATES]。

我想这是因为APK文件没有签名,平板电脑对此不满意。所以,在生成React Native包文件后,我能够通过Android Studio生成一个签名的APK文件。

顺便说一句,我们的应用是一款功能齐全的Android应用,已经在Play Store中存在,我们只是将React Native添加到它中,因为它很棒。

总结一下,我的步骤如下:

1)生成React Native包:

react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/<your-package-name>/src/main/assets/index.android.bu‌​ndle --assets-dest android/<your-package-name>/src/main/res/ 

2)从Android Studio生成一个Signed APK文件。

3)将签名APK文件安装到USB设备:

adb -d install -r <path_to_signed_apk> 

-d标志只是告诉adb在附加的usb设备上安装,如果您有一个模拟器也在运行。如果你想在任何模拟器上安装,去掉-d标志。

4)利润!