我已经构建了我的应用程序,我可以在我的本地模拟器上运行它(也可以在同一网络内通过更改调试服务器在我的android设备上运行)。
然而,我想构建一个APK,我可以发送给没有访问开发服务器的人,我希望他们能够测试应用程序。
我看到有一节使用离线捆绑在iOS部分的文档。但我不知道如何在android上实现同样的功能。这可能吗?如果有,怎么做?
更新:关于这个问题的答案(Android无法加载JS包),据说离线包可以从开发服务器下载。但是当我从开发服务器获取包时,图像文件无法加载。
我已经构建了我的应用程序,我可以在我的本地模拟器上运行它(也可以在同一网络内通过更改调试服务器在我的android设备上运行)。
然而,我想构建一个APK,我可以发送给没有访问开发服务器的人,我希望他们能够测试应用程序。
我看到有一节使用离线捆绑在iOS部分的文档。但我不知道如何在android上实现同样的功能。这可能吗?如果有,怎么做?
更新:关于这个问题的答案(Android无法加载JS包),据说离线包可以从开发服务器下载。但是当我从开发服务器获取包时,图像文件无法加载。
当前回答
根据Aditya Singh的回答,生成的(未签名的)apk不会安装在我的手机上。我必须使用这里的说明生成一个签名apk。
下面的方法对我很有效:
$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
把我的释放钥匙放上去。android/app下的Keystore文件 目录。然后编辑文件 ~ / .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 assemblerrelease命令,
对于Windows, cd android,然后执行gradlew assemblerrelease命令,在android/app/build/outputs/apk/app-release.apk或android/app/build/outputs/apk/release/app-release.apk下找到签名的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,并按照那里的指示。那好。
对我来说,./gradlew assemblerrelease不再工作,但下面的可以。
./gradlew :app:assembleRelease
感谢这条评论。
执行如下命令:
react-native run-android --variant=release
注意——variant=release仅在设置了签名时可用 使用cd android && ./gradlew assemblerrelease。
不使用dev-server生成调试APK
如果你真的想生成一个调试APK(用于测试),可以在没有开发服务器的情况下运行,这里是我对另一篇类似文章的回答的链接,这可能会对你有帮助。 https://stackoverflow.com/a/65762142/7755579
你所要做的就是:
编辑/ app / android构建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构建应用程序