2016-06-21 47 views
1

我試圖將現有的Android應用程序與React Native整合在一起,遵循guide。它編譯和運行,但是當我啓動活動做出反應,它與崩潰:React Native找不到開發服務器,整合現有的Android應用程序

Caused by: java.lang.RuntimeException: Could not connect to development server.

我在模擬器都嘗試(genymotion)和USB連接的設備上。我運行了adb reverse tcp:8081 tcp:8081並通過adb reverse --list進行了驗證,並且還驗證了我可以從設備上的瀏覽器訪問http://localhost:8081/index.android.bundle,另外還可以從我的筆記本電腦上訪問http://localhost:8081/index.android.bundle(所以包服務器運行良好,通過npm start)。

值得注意的是,我可以運行教程示例很好,所以它似乎是從我現有的Android應用程序中運行RN的一些東西。

我在反應原生0.27.2。

想法?

更新: 我添加了一些代碼,直接從我的活動之一,取包:

public void pingReactServer() { 
    Request request = new Request.Builder() 
      .url("http://10.0.3.2:8081/index.android.bundle") 
      .build(); 
    OkHttpClient client = OkHttpClientProvider.getOkHttpClient(); 
    client.newCall(request).enqueue(
      new Callback() { 
       @Override 
       public void onFailure(Call call, IOException e) { 
        Log.v(TAG, "React ping failed: " + call); 
       } 

       @Override 
       public void onResponse(Call call, Response response) throws IOException { 
        Log.v(TAG, "React ping response: " + response.body().string()); 
       } 
      } 
    ); 
} 

這工作得很好,我找回包的內容。因此,React的http客戶端可以看到包裝服務器,而其他東西必須以正常方式(DevServerHelper)提取包時導致錯誤。

回答

0

想通了,這是一個系列的不幸事件的:

tutorial的示例代碼示出了這一點:

mReactInstanceManager = ReactInstanceManager.builder() 
    ... 
    .setUseDeveloperSupport(BuildConfig.DEBUG) 

BuildConfig.DEBUG實際上定義爲false,所以這將禁用顯影劑載體(相反,它期望找到js包作爲一項資產)。

在我修好之後,我遇到了另一個涉及Proguard的問題;它剝奪了所有的devsupport類,所以我需要加入白名單他們在我的ProGuard配置,採用:

# Keep developer support classes. 
-keep class com.facebook.react.devsupport.** { *; } 

現在,我得到儘可能的ReactInstanceManager裝載並獲得來自開發服務器捆綁,但打一個更speedbump:

Error: Requiring unknown module "react".If you are sure the module is there, try restarting the packager or running "npm install".

不知道爲什麼npm install不是在自動拉本,但在運行此手動修復它:

npm install [email protected] 

(使用node_modules/react-native/package.json中列出的特定版本。)

相關問題