2016-06-24 43 views
3

我试图在我们的设备上以调试模式运行我的原生android应用程序,而无需在开发箱上运行开发服务器。我在两个平台上使用调试变体/方案来促进我们的应用程序的“分期”版本,因为我已经读过,反应原生并不是超级友好的,而是与发布和调试以外的构建模式非常友好。React Native Android - 如何仅在设备上以调试模式运行?

在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包的位置,就像我在AppDelegate.m中为iOS所做的那样。现在,与android上js bundle位置相关的所有代码似乎都在react-native包中,我宁愿不要破解它以使其工作。

如果我可以提供更多信息,请让我知道。

回答

2

在Android上,您将需要修改​​。

apply from: "../../node_modules/react-native/react.gradle"行之前,您需要告诉打包程序捆绑js资源并在部署APK时包含它们。

例如:

project.ext.react = [ 
    bundleInBuddybuild: true, 
] 

在句法是bundleIn${productFlavor}${buildType}

或者,如果你只是想这样做对于调试版本:

project.ext.react = [ 
    bundleInDebug: true, 
] 
+0

,我认为你应该说明你如何实际构建调试版本'反应原生运行Android的完成这个答案'不会工作。你需要做'cd android && ./gradlew assembleDebug' – ssomnoremac

+0

@ssomnoremac'react-native run-android' should work。它默认构建调试版本。如果你想构建一个不同的变体(例如release),那么你使用'react-native run-android --variant = release' – Tspoon

+0

我做了你所说的并且它没有绑定in后运行了'run-android';然而,在运行'assembleDebug'或'varient = debug'之后,它开始被捆绑在vanilla'run-android'中。仍然认为你应该提及。 – ssomnoremac

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

  • android文件夹中创建您的开发APK像往常一样./gradlew assembleDebug
相关问题