我已经构建了我的应用程序,我可以在我的本地模拟器上运行它(也可以通过更改调试服务器在同一网络内的我的 android 设备上运行它)。
但是,我想构建一个 APK,我可以将其发送给无需访问开发服务器的人,并且我希望他们能够测试应用程序。
我看到文档的 iOS 部分有一个使用离线包的部分。但我不知道如何为 android 完成相同的操作。这可能吗?如果是这样,怎么做?
更新: 关于这个问题 (Android failed to load JS bundle) 的答案,据说可以从开发服务器下载离线包。但是当我从开发服务器获取包时,无法加载图像文件。
按照 Aditya Singh 的回答,生成的(未签名的)apk 不会安装在我的手机上。我必须使用说明 here 生成签名的 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
目录下。然后编辑文件 ~/.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,则可以使用说明 here 将密码存储在钥匙串中,而不是以明文形式存储。
然后编辑 app/build.gradle 并确保存在以下内容(可能需要添加带有 signingConfigs 的部分):
...
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
command ,在 android/app/build/outputs/apk/app-release.apk
或 android/app/build/outputs/apk/release/app-release.apk
下找到您的 signed 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 bundle
部分。感谢您的回答!
gradlew.bat assembleRelease
。
Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
。当我尝试安装 apk 时。
ENOENT: no such file or directory, open 'android/app/src/main/assets/index.android.bundle'
,请运行 mkdir android/app/src/main/assets
你应该只使用 android studio 来完成这个过程。它只是更简单。但首先在你的 react native app 目录中运行这个命令:
对于较新版本的 react-native(例如 react native 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 native app目录中的'android'文件夹,它会要求升级gradle和其他一些东西。转到 build-> Generate signed APK 并按照那里的说明进行操作。这真的很简单。
运行此命令:
react-native run-android --variant=release
请注意,--variant=release 仅在您使用 cd android && ./gradlew assembleRelease 设置签名时可用。
cd android && ./gradlew installRelease
并收到此错误 Task 'assembleRelease.' not found in root project 'project'. Some candidates are: 'assembleRelease'.
如果有人想在没有 playstore 密钥的情况下构建,那么这个命令将非常有帮助。
# react-native run-android --variant=release
构建完成后,您可以在发布构建文件中找到该 apk。
/android/app/build/outputs/apk/release
内
对于 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 native app目录中的'android'文件夹,它会要求升级gradle和其他一些东西。转到 build-> Generate signed APK 并按照那里的说明进行操作。那好吧。
试试下面,它会在你的 root/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
如果您收到失败 [INSTALL_PARSE_FAILED_NO_CERTIFICATES]。
我尝试使用 @Aditya 生成未签名 APK 文件并安装它的方法,但是当我将它安装到我的 Android 平板电脑上时,它给了我一个错误 Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
。
我想这是因为 APK 文件没有签名,平板电脑对此不满意。因此,在生成 React Native 包文件后,我能够像往常一样通过 Android Studio 生成签名的 APK 文件。
顺便说一句,我们的应用程序是一个功能齐全的 Android 应用程序,它已经存在于 Play 商店中,我们只是将 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.bundle --assets-dest android/<your-package-name>/src/main/res/
2) 从 Android Studio 生成签名的 APK 文件。
3) 将签名的 APK 文件安装到 USB 设备:
adb -d install -r <path_to_signed_apk>
-d
标志只是告诉 adb
安装在连接的 USB 设备上,以防您也运行模拟器。如果您想在任何模拟器上安装,请删除 -d
标志。
4)利润!
转到项目目录并运行命令:
cd android && ./gradlew assembleRelease
希望对新手有所帮助
官方文档here
如果您没有密钥库而不是在命令之前使用,则跳过
生成签名密钥/密钥库文件 您可以使用 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 变量 将 my-release-key.keystore 文件放在项目文件夹的 android/app 目录下。编辑文件 android/gradle.properties 并添加以下内容(将 ***** 替换为正确的密钥库密码、别名和密钥密码), enableAapt2 set false 是解决方法,作为 android gradle 版本 3.0 problem
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/buid.gradle(app)
低于默认配置
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
}
}
和内部构建类型发布 { }
signingConfig signingConfigs.release
然后只需在 android studio 终端中运行此命令下面的命令将自动执行所有答案
如果窗户
cd android
gradlew assembleRelease
如果 linux / mac
$ cd android
$ ./gradlew assembleRelease
如果您遇到任何错误,请删除所有构建文件夹并运行命令
gradlew clean
比再次
gradlew assembleRelease
gradle clean
...我一直在努力解决这些构建错误,非常感谢您的回答!
如果您收到涉及 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/
我有另一个解决方案:- 生成签名密钥 您可以使用 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 文件放在项目文件夹中的 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 处为您提供两个文件,现在将 app-release.apk 安装到您的 android 设备中。
第一的
cd android
然后运行
./gradlew installRelease
最后,您将能够在此处找到 apk。
Project\android\app\build\outputs\apk\release\app-release.apk
installRelease
有意义吗?
Android Studio中的GUI方式
在 Android Studio 中打开 React Native 应用程序的 Android 应用程序部分(这只是意味着使用 Android Studio 打开 react-native 项目的 android 文件夹)
转到顶部的“构建”选项卡
转到“Build Bundle(s) / APK(s)”
然后选择“构建 APK(s)”
这将引导您完成查找密钥以签署 APK 或创建密钥(如果您还没有密钥)的过程,这一切都非常简单。如果您只是在练习,您可以生成这些密钥并将它们保存到您的桌面。
一旦该过程完成并且构建成功,Android Studio 下方将弹出一个弹出窗口。单击其中显示“定位”的链接(APK)
这会将您带到 apk 文件,将其移至您的 android 设备。然后导航到 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
https://i.stack.imgur.com/aDYVn.png
https://i.stack.imgur.com/DnyRB.jpg
一些对 WINDOW 用户有用的脚本
将这些代码复制粘贴到 "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"
在没有开发服务器的情况下生成调试 APK
如果您真的想生成一个可以在没有开发服务器的情况下运行的调试 APK(用于测试目的),这里是我对另一篇类似帖子的回答的链接,可能会对您有所帮助。
https://stackoverflow.com/a/65762142/7755579
你所要做的就是:
编辑 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
然后,在 /android 文件夹中运行 ./gradlew assembleDebug(Mac 或 Linux)或 gradlew assembleDebug(Windows) 如果构建失败,我建议您从 Android Studio 构建应用程序
只有这对我有用 - yarn android --variant=release
使用 android studio 为 react 的 android 项目生成签名 apk 也是一个不错的选择,在 android studio 中打开 react 的 android 项目,生成 keystroke 和签名 apk。
对我来说这有效(MACOS)
打开终端
cd project_directory
运行这个命令
yarn start
打开另一个终端
运行这些命令
cd android
./gradlew assembleRelease
参考 react-native 官方文档 Generate Signed APK
React-Native Generating Signed APK