我如何生成一个apk,可以运行没有服务器与反应本机?

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

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

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

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

454613 次浏览

您必须创建一个密钥来签署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 run-android --variant=release
注意,--variant=release只有在你设置了签名时才可用 cd android && ./gradlew assembleRelease。< / p >

你应该使用android studio来完成这个过程。这样更简单。但是首先在react原生应用目录下运行这个命令:

对于react-native的更新版本(例如:React原生0.49.0 &等等…)

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

对于react-native的旧版本(0.49.0 &下图)

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,并按照那里的指示。这真的很直接。

如果你得到Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

我尝试使用@Aditya的方法来生成一个无符号APK文件并安装它,但当我在我的Android平板电脑上安装它时,它给了我一个Failure [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)利润!

我有另一个解决方案:- 生成签名密钥 您可以使用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。< / p >

根据Aditya Singh的回答,生成的(未签名的)apk不会安装在我的手机上。我必须使用指令在这里生成一个签名的apk。

下面的方法对我很有效:

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

my-release-key.keystore文件放在android/app . conf文件下 目录。然后编辑文件 ~/.gradle/gradle.properties并添加以下内容(替换****

.使用正确的密钥存储库密码、别名和密钥密码)
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=****
MYAPP_RELEASE_KEY_PASSWORD=****

如果你使用MacOS,你可以使用指令在这里将密码存储在钥匙链中,而不是以明文形式存储。

然后编辑app/build。gradle并确保存在以下内容(可能需要添加带有signingConfigs signingConfig的部分):

...
android {
...
defaultConfig { ... }
signingConfigs {
release {
if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
storeFile file(MYAPP_RELEASE_STORE_FILE)
storePassword MYAPP_RELEASE_STORE_PASSWORD
keyAlias MYAPP_RELEASE_KEY_ALIAS
keyPassword MYAPP_RELEASE_KEY_PASSWORD
}
}
}
buildTypes {
release {
...
signingConfig signingConfigs.release
}
}
}
...

然后运行命令cd android && ./gradlew assembleRelease

对于Windows 'cd android',然后运行gradlew assembleRelease命令,在android/app/build/outputs/apk/app-release.apkandroid/app/build/outputs/apk/release/app-release.apk下找到你的签署 apk

进入工程目录,执行如下命令:

cd android && ./gradlew assembleRelease

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,并按照那里的指示。那好。

希望对初学者有所帮助

官方文件在这里

如果您没有密钥存储库,请使用之前的命令否则跳过

生成签名密钥/ Keystore文件 您可以使用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

你会得到一个类似my-release-key.keystore的文件

设置gradle变量 把我的释放钥匙放上去。在项目文件夹的android/app目录下的Keystore文件。 编辑文件android/gradle。属性并添加以下内容(将*****替换为正确的密钥库密码、别名和密钥密码), enableAapt2 set false是变通方法,因为android gradle 3.0版本问题

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****


android.enableAapt2=false

然后添加这些app/ build。gradle(应用)

下面是默认配置

signingConfigs {
release {
if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
storeFile file(MYAPP_RELEASE_STORE_FILE)
storePassword MYAPP_RELEASE_STORE_PASSWORD
keyAlias MYAPP_RELEASE_KEY_ALIAS
keyPassword MYAPP_RELEASE_KEY_PASSWORD
}
}

和Inside Build类型release {}

 signingConfig signingConfigs.release

然后简单地在android studio终端运行这个命令 以下命令将自动回答以上所有问题

如果窗户

cd android
gradlew assembleRelease

Linux / MAC

$ cd android
$ ./gradlew assembleRelease

如果你得到任何错误删除所有构建文件夹和运行命令

gradlew clean

又比

gradlew assembleRelease

使用android studio为react的android项目生成签名apk也是一个很好的和简单的选择,在android studio中打开react的android项目并生成击键和签名apk。

如果你得到一个涉及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/

Android Studio中的GUI方式

  • 在Android Studio中打开React Native应用程序的Android应用程序部分(这只是意味着用Android Studio打开React - Native项目的Android文件夹)
  • 进入顶部的“Build”选项卡
  • 转到“构建包/ APK”
  • 然后选择“构建APK(s)”
  • 这将引导您完成一个定位密钥以签署APK的过程,或者如果您还没有密钥,则创建密钥,这都非常简单。如果您只是在练习,您可以生成这些键并将它们保存到您的桌面。
  • 一旦这个过程完成,如果构建成功,在Android Studio中会出现一个弹出窗口。点击其中的“定位”链接(APK)
  • 这将带你到apk文件,移动到你的android设备上。然后在Android设备上导航到该文件并安装它。

参考react-native关于生成签名APK的官方文档

< a href = " https://facebook.github。io/react-native/docs/ Signed - APK -android" rel="nofollow noreferrer"> react-native生成签名的APK . android

对于最新的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

试试下面,它会在你的根/android/app/build/outputs/apk/debug文件夹下生成一个app-debug.apk

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

然后进入android文件夹并运行

./gradlew assembleDebug

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

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

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

不使用dev-server生成调试APK

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

你所要做的就是:

  1. 编辑android/app/build.gradle
project.ext.react = [
...
bundleInDebug: true, // add this line
]
  1. 在项目的根目录下运行此命令
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
    然后,在/android文件夹
    内运行./gradlew assembleDebug (Mac或Linux)或gradlew assembleDebug (Windows) 如果构建失败,我建议您从Android studio构建应用程序

enter image description here

enter image description here

  • 一些有用的脚本为windows用户

在包中复制粘贴这些代码。"script":{}下的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"

第一个

cd android

然后运行

./gradlew installRelease

最后你将能够在这里找到apk。

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

对我来说,./gradlew assembleRelease不再工作,但下面的工作。

./gradlew :app:assembleRelease

感谢这样的评论

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

对我来说这是可行的(MACOS)

打开终端

cd project_directory

执行此命令

yarn start

打开另一个终端

运行这些命令

cd android
./gradlew assembleRelease