Активы пакета должны быть помещены в ту же папку, где находится js файл пакета (проверено только на android).
Вы всегда можете получить путь к пакету через https://reactnative.dev/docs/image#resolveassetsource.
Как проверить:
- Поместить изображение
star.png
в проект root. - Создать собственное приложение реагирования со следующим кодом:
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;
Установите путь к пакету в
MainApplication.java
(мой пакет приложения называется
com.testassetsapp
):
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";
}
};
Создание android JS пакета и активов с помощью:
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android.bundle --assets-dest assets
Установите отладочную версию с помощью:
cd android && ./gradlew installDebug
ВНИМАНИЕ: тестируйте только с помощью ./gradlew installDebug
без запуска Metro-Bundler , поскольку он всегда переписывает путь к пакету.
Теперь, если вы запустите приложение, вы получите ошибку «Bundle not found».
Загрузить
android.bundle
файл в
/data/data/com.testassetsapp/files/android.bundle
Теперь, если вы запустите приложение, оно должно запуститься. Но изображение звезды пока не отображается.
Загрузка файлов комплекта из папки
assets
в
/data/data/com.testassetsapp/files
, поэтому структура данных приложения должна быть следующей:
Теперь, если вы перезапустите звезду приложения изображение должно отображаться.