2016-06-24 89 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
相關問題