如何从JS Stream加载(与现有应用程序集成)?不是JS Bundle文件路径

时间:2015-12-16 13:16:17

标签: react-native

我发现react-native load会从android的默认文件目录中反应Js,我希望api从流中加载反应Js,而不是文件路径。所以我可以从网络服务器加载Js,而不是将Js包文件放在本地目录中。

 String sdDir = Environment.getExternalStorageDirectory().getAbsolutePath();
    String bundleFile = sdDir + "/Download/ReactNativeDevBundle.js";
    mReactInstanceManager = ReactInstanceManager.builder()
            .setApplication(getApplication())
            .setJSBundleFile(bundleFile)
            .addPackage(new MainReactPackage())
            .setUseDeveloperSupport(false)
            .setInitialLifecycleState(LifecycleState.RESUMED)
            .build();
    mReactRootView.startReactApplication(mReactInstanceManager, "MyAwesomeApp", null);
    setContentView(mReactRootView);

库版本:react-native:0.15.0

我可以更改默认加载目录,但我无法更改文件名。我发现无法从流中加载Js。

1 个答案:

答案 0 :(得分:0)

同样的问题我最近面对并解决了这个问题。我迟到回答这个问题可能会帮助某人。

当我们尝试从资产文件夹加载index.android.bunddle时,它会搜索路径drawable-mdpi文件夹,无论您在反应原生文件夹中提供的图像名称是什么,它都会在可绘制文件夹中创建图像。

选择该图像并向我们展示。如果是服务器index.android.bundle,我们将该文件存储在mob设备中,因此无法在存储中找到图像我们的存储不包含可绘制文件夹。 因此,解决方案是我们需要创建密度可绘制文件夹,如drawable-mdpi,与index.android.bundle平行移动存储,并将图像写入该文件夹。

这是我的代码片段

    int lengthOfFile = connection.getContentLength();
    //            InputStream input= new BufferedInputStream(url.openStream(),lengthOfFile);
                input = connection.getInputStream();
    //            FileOutputStream 

outPut=context.openFileOutput("index.android.bundle",Context.MODE_PRIVATE);
                FileOutputStream outPut = null;
                File directory,file;

     directory = new File(context.getFilesDir(), "drawable-xxhdpi");
                        if(!directory.exists()){
                            directory.mkdir();
                        }
  file = new File(context.getFilesDir() + File.separator + "drawable-xxhdpi", "src_components_images_iconthumbsdowndefault.png");
                        outPut = new FileOutputStream(file);

      byte data[]=new byte[4096];
                long total=0;
                int x = 0;
                while ((count = input.read(data)) != -1){
                    total+=count;
                    x++;
    //                publishProgress(""+(int)((total*100)/lengthOfFile));
                    outPut.write(data,0,count);
                }
                outPut.flush();
                outPut.close();
                input.close();