我已经构建了我的应用程序,我可以在我的本地模拟器上运行它(也可以在同一网络内通过更改调试服务器在我的android设备上运行)。
然而,我想构建一个APK,我可以发送给没有访问开发服务器的人,我希望他们能够测试应用程序。
我看到有一节使用离线捆绑在iOS部分的文档。但我不知道如何在android上实现同样的功能。这可能吗?如果有,怎么做?
关于这个问题的答案(Android加载JS包失败),据说脱机包可以从开发服务器下载。但是当我从开发服务器获取包时,图像文件无法加载。
您必须创建一个密钥来签署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标志将替换现有的应用程序(如果它存在)
-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 >
--variant=release
你应该使用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 &下图)
然后使用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.bundle --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标志。
-d
adb
4)利润!
$ 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
根据Aditya Singh的回答,生成的(未签名的)apk不会安装在我的手机上。我必须使用指令在这里生成一个签名的apk。
下面的方法对我很有效:
将my-release-key.keystore文件放在android/app . conf文件下 目录。然后编辑文件 ~/.gradle/gradle.properties并添加以下内容(替换****
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,你可以使用指令在这里将密码存储在钥匙链中,而不是以明文形式存储。
然后编辑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.apk或android/app/build/outputs/apk/release/app-release.apk下找到你的签署 apk
android/app/build/outputs/apk/app-release.apk
android/app/build/outputs/apk/release/app-release.apk
进入工程目录,执行如下命令:
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运行
你会得到一个类似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
又比
使用android studio为react的android项目生成签名apk也是一个很好的和简单的选择,在android studio中打开react的android项目并生成击键和签名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/
参考react-native关于生成签名APK的官方文档
< a href = " https://facebook.github。io/react-native/docs/ Signed - APK -android" rel="nofollow noreferrer"> react-native生成签名的APK . android
对于最新的react原生版本来捆绑项目
安卓
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
然后进入android文件夹并运行
./gradlew assembleDebug
如果有人想建立没有playstore键,那么这个命令将是非常有用的。
# react-native run-android --variant=release
构建完成后,您可以在发布构建文件中找到apk。
你所要做的就是:
android/app/build.gradle
project.ext.react = [ ... bundleInDebug: true, // add this line ]
/android
gradlew assembleDebug
在包中复制粘贴这些代码。"script":{}下的json文件
"script":{}
* 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 assembleRelease
./gradlew :app:assembleRelease
感谢这样的评论。
只有这个对我有用——yarn android --variant=release
yarn android --variant=release
对我来说这是可行的(MACOS)
打开终端
cd project_directory
执行此命令
yarn start
打开另一个终端
运行这些命令
cd android ./gradlew assembleRelease