我发现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。
答案 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();