React native 在项目根目录外解析与本机捆绑包文件相关的资产
问题(android):如果捆绑文件位于项目根目录之外,那么相对于js捆绑文件,将图像资产放置在何处 我们有一个小服务,在每个构建中上传JS包。例如,我们有appReact native 在项目根目录外解析与本机捆绑包文件相关的资产,react-native,code-push,react-native-code-push,React Native,Code Push,React Native Code Push,问题(android):如果捆绑文件位于项目根目录之外,那么相对于js捆绑文件,将图像资产放置在何处 我们有一个小服务,在每个构建中上传JS包。例如,我们有appcom.example,如果我们想更新我们的app(app商店中app review处于挂起状态),那么我们: 将JS捆绑包下载到android路径/data/data/com.example/files/bundle/android.bundle 通过将此捆绑设置为活动 想象一下,在react应用程序组件中,我们有一个路径为star.
com.example
,如果我们想更新我们的app(app商店中app review处于挂起状态),那么我们:
/data/data/com.example/files/bundle/android.bundle
star.png
的图像
当我们激活一个新的包时,星图就不显示了
我已经在发布版本中检查了图像路径,图像uri解析为star
因此,我尝试了以下文件结构:
№一,
数据
--资料
----com.example
------档案
--------捆
----------android.bundle捆绑资产应放在js捆绑文件所在的文件夹中(仅在android上测试)
您始终可以通过获取捆绑资产路径
如何测试:
将图像star.png
放入项目根目录
使用以下代码创建react本机应用程序:
通过以下方式创建android JS捆绑包和资产:
通过以下方式安装调试版本:
注意:仅通过/gradlew installDebug
进行测试,而不运行metro bundler,因为它总是重写捆绑路径
现在,如果你运行应用程序,你会得到一个错误“Bundle not found”
将android.bundle
文件上载到/data/data/com.testassetsapp/files/android.bundle
现在,如果你运行应用程序,它应该启动。但恒星图像尚未显示
将捆绑包文件从资产
文件夹上载到/data/data/com.testassetsapp/files
以便应用程序数据结构应如下所示:
现在,如果重新启动应用程序,应显示星形图像
data
--data
----com.example
------files
--------bundle
----------android.bundle <= dynamic bundle from remote server
----------star // <= our image
data
--data
----com.example
------files
--------bundle
----------android.bundle <= dynamic bundle from remote server
----------star.png // <= our image
import React from 'react';
import {
SafeAreaView,
Text,
StatusBar,
Image
} from 'react-native';
import Star from './star.png';
const App: () => React$Node = () => {
const r = Image.resolveAssetSource(Star);
console.log(r);
return (
<>
<StatusBar barStyle="dark-content" />
<SafeAreaView>
<Text>TestAssetsApp</Text>
<Image
style={{width: 50, height: 50}}
source={Star}
/>
</SafeAreaView>
</>
);
};
export default App;
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost =
new ReactNativeHost(this) {
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List<ReactPackage> getPackages() {
@SuppressWarnings("UnnecessaryLocalVariable")
List<ReactPackage> packages = new PackageList(this).getPackages();
// Packages that cannot be autolinked yet can be added manually here, for example:
// packages.add(new MyReactNativePackage());
return packages;
}
@Override
protected String getJSMainModuleName() {
return "index";
}
// Add this method
@Override
protected String getJSBundleFile() {
return "/data/data/com.testassetsapp/files/android.bundle";
}
};
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android.bundle --assets-dest assets
cd android && ./gradlew installDebug