我试图在我们的设备上以调试模式运行我的本机Android应用程序,而不需要在开发框上运行开发服务器。我在两个平台上使用调试变体/方案来促进" staging"我们的应用程序的版本,因为我已经读过,本机对于除了发布和调试之外的构建模式并不是超级友好的。
在iOS方面,我能够修改AppDelegate.m,如下所示......基本上,如果它是调试版本并且由buddybuild构建,请不要寻找开发机器js包,查看设备:
#ifdef DEBUG
NSDictionary *infoPlistDict = [[NSBundle mainBundle] infoDictionary];
if (infoPlistDict[@"BUDDYBUILD_BUILD_ID"]) {
// deployed via buddybuild, don't use localhost
jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
} else {
jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.ios.bundle?platform=ios&dev=true"];
}
#else
jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif
...我正在寻找一种在Android上执行此操作的方法。我有我需要的buddybuild代码,所以不用担心,我只是想知道如何以编程方式更改android上js bundle的位置,就像我在AppDelegate.m中为iOS做的那样。现在,与android上js bundle的位置相关的所有代码似乎都在本机反应包本身中,我宁愿不破解它以使其工作。
如果我可以提供更多信息,请告诉我。
答案 0 :(得分:2)
在Android上,您需要修改android/app/build.gradle
。
在apply from: "../../node_modules/react-native/react.gradle"
行之前,您需要告诉打包者捆绑js资产并在部署APK时包含它们。
例如:
project.ext.react = [
bundleInBuddybuild: true,
]
语法为bundleIn${productFlavor}${buildType}
或者如果您只是想为调试版本执行此操作:
project.ext.react = [
bundleInDebug: true,
]
答案 1 :(得分:2)
我想总结一下在调试版本中捆绑所有内容的解决方案。特别是第二点的提示对我来说很有用。谢谢@Tspoon。
<强> 1。 Android Studio
<强> 2。的build.gradle 强>
在app/build.gradle
文件中执行以下操作:
project.ext.react = [
// whether to bundle JS and assets in debug mode
bundleInDebug: true,
// whether to bundle JS and assets in release mode
bundleInRelease: true,
]
apply from: "../../node_modules/react-native/react.gradle"
注意,在apply from ...
语句上方定义反应设置非常重要,否则无法正常工作
第3。创建APK
./gradlew assembleDebug
文件夹android
照常创建您的开发apk