RNã®åé¡ïŒ RN 0.57.xãã³ãã«ããã倧ããªç»åã¯ã\ã䜿çšããŠè¡šç€ºãããšå質ãäœããªããŸãã
Androidã§ã®ã¿ããã³ãã«ããã倧ããªç»åïŒPNGãGIFãããã³JPEGã§ã¯ãªããããå€ãã®åœ¢åŒïŒãããŒããããšãå質ãäœäžããŸãã
å·ŠåŽã®ã¹ã¯ãªãŒã³ã·ã§ããã«ã¯ã RN 0.56.0ã§å®è¡ãããŠãããŸã£ããåãã³ãŒãã衚瀺ãããå³åŽã®ã¹ã¯ãªãŒã³ã·ã§ããã«ã¯ã RN0.57.1ââã衚瀺ãããŠããŸãã ã³ãŒãã¯åçŽãªç»å<Image source={require('./assets/ELHall1.png')} resizeMethod="resize" />
ã§ãç»åãµã€ãºã¯2111 x 4645 pixels
ã§ãã äž¡æ¹ã®ãããžã§ã¯ãã¯ã react-native init RN057ImageTest
ãšreact-native init --version="0.56.0" RN056ImageTest
ã䜿çšããŠæ°ããã€ã³ã¹ããŒã«ãããŸãã ããã¯ã0.56以éãããã³ææ°ã®RN0.60.x以éã®ãã¹ãŠã®ããŒãžã§ã³ã§åŒãç¶ãçºçããŸãã
ããã¯ãRN Frescolibã0.56ãã0.57ã®éã§1.9.0ãã1.10.0ã«å€æŽãããããšãåå ã§ããããšã確èªãããŠããŸãhttps://github.com/facebook/react-native/commit/b6f2aad9c0119d11e52978ff3fa9c6f269f04a14ã ã³ã¡ã³ãhttps://github.com/facebook/react-native/issues/21301#issuecomment-520155609ã確èªããŠãã ããã
Frescoã®åé¡ãæ€çŽ¢ãããšããã倧ããªç»åã1ã€ãã€åå²ããŠåæ§æããå¿ èŠããããšããé¢é£ããåé¡ãããã€ãèŠã€ãããŸãããããã«ãããå€ãã®å ŽåïŒã»ãšãã©ã®ãããé¢é£ã®å€§ããªç»åïŒã解決ãããŸãããç¹ã«åçã«èªã¿èŸŒãŸããå Žåã¯éåžžã«äžäŸ¿ã§ãã /äœæãããç»åã ããã¯ãRN 0.56ãŸã§ããã³0.57以éã¯æ©èœããŠããŸãããããã®åŸã¯æ©èœããŸããã§ããã
RNïŒããã¯æåã®App.js
ã§ã <Image/>
ã³ã³ããŒãã³ããè¿œå ãããŠããŸãã
...
type Props = {};
export default class App extends Component<Props> {
render() {
return (
<View style={styles.container}>
<Image source={require('./assets/ELHall1.png')} resizeMethod="resize" />
</View>
);
}
}
...
ãã®ã³ã¡ã³ãhttps://github.com/facebook/react-native/issues/21301#issuecomment-520418832ã§ã lambdapioneerã¯ãããã¯ãããã倧ããªç»åã®çž®å°ïŒãµããµã³ããªã³ã°ïŒã«é¢é£ããŠãããšæžããŠããŸãã
ããã¯ãFrescoã倧ããªç»åãçž®å°ïŒãµããµã³ããªã³ã°ïŒããæ¹æ³ã«é¢é£ããŠãããšæããŸãïŒããã¯ãã¡ã¢ãªãšããã©ãŒãã³ã¹ã®åé¡ã«ãšã£ãŠéèŠãªæ©èœã§ãïŒã ãã®éãäž»ã«ãã€ãã£ãã³ãŒãã®äŸåé¢ä¿ãåé€ããŠã.soã®äžæºãªãªã³ã¯ãšã©ãŒãæžããããã«ããããã®é åã«ããã€ãã®å€æŽãå ããããŸããã ã€ãŸããããã¯å¥ã®å€§ããªæ¹åã®å¯äœçšãããããŸããã
ãããæè¿ãã®åé¡ã«é¢ãã掻åã¯ãªãã£ãããã§ãã åé¡ã¯ä¿®æ£ãããŸãããããããšãã³ãã¥ããã£ã®æ³šæãå¿ èŠã§ããïŒ ãã以äžã®ã¢ã¯ãã£ããã£ãçºçããªãå Žåããã®åé¡ã¯è§£æ±ºãããå¯èœæ§ããããŸãã ãã®åé¡ã«ããã°ããŸãã¯ãæ¡åŒµããšããã©ãã«ãä»ããããšãã§ããŸãããã®åé¡ã¯éãããŸãŸã«ããŠãããŸãã è²¢ç®ããŠããã ãããããšãããããŸãã
RN 0.56.0ããã³0.57.1ââã§äœ¿çšãããŠããFrescoã®ããŒãžã§ã³ã¯äœã§ããïŒ ããã«ããããããåŒãèµ·ãããå¯èœæ§ã®ããã³ãããã®æ°ãçµã蟌ãŸããŸãã
ããã«ã¡ã¯@oprisnik ã
https://github.com/facebook/react-native/issues/21301#issuecomment -520155609ãæ£ç¢ºã«å ±åããŠãããšæããã©ã®ããŒãžã§ã³ãããã®åäœãå€æŽãããŸããã
ããã«ã¡ã¯@clytras ãç§ã¯ãã®ãªããžããªã®ç»é¢ã«ç»åãèŠã€ããŸããã
åçãããŠã³ããŒããããšã2111ïŒå¹
ïŒ* 4645ïŒé«ãïŒã®åçãèŠã€ãããŸããã
Frescoã¯ãOpenGLã®å¶éã«åãããã«ç»åãããŠã³ãµã³ããªã³ã°ããŸããããã©ã«ãã®ç»åã®æå€§å¹ /é«ãã¯ããã®è¡ã®ããŒãã³ãŒãã§ãã
ç§ã®æèŠã§ã¯ã
ç°¡åãªæ¹æ³ã¯ãResizeOptionã®maxBitmapSizeãã£ãŒã«ããå€æŽããããšã§ãã
æ£ããæ¹æ³ã¯ãéåžžã«å€§ããªç»åã衚瀺ããããã«Frescoã䜿çšããªãããšã§ãã
ä»ã®ãŠã£ãžã§ãããäœæãããã®ã©ã€ãã©ãªã䜿çšããŠéåžžã«å€§ããªç»åã衚瀺ããããšã¯ãå€ãã®AndroidããŒã ã®éžæã§ãã
ããã«ã¡ã¯@ s1rius ãããªããæªè§£æ±ºã®åé¡ã®æçš¿ãèªã
ã³ãŒãã¯åçŽãªç»åã§ã
ç»åãµã€ãºã¯2111x4645ãã¯ã»ã«ã§ã
ããã¯ãRN> = 0.57ããçºçããFresco1.9.0ãã1.10.0ã«å€æŽãããåäœã®å€æŽã«é¢ãããã®ã§ãã ãã®ãããªå€§ããªç»åã¯ããã®ããŒãžã§ã³ã®åã«ãã«å質ã§åäœããèªã¿èŸŒãŸããŠããŸããã RN repoã®å¯çš¿è ã¯ãããã¯RNã®åé¡ã§ã¯ãªããFresco libã®åé¡ã§ãããšè¿°ã¹ãŠããããããã®åé¡ãã¯ããŒãºããŸããã ãã®è¡åçãªå€æŽãæå³çã«è¡ãããå Žåã¯ããã®åé¡ã解決ã§ããŸãã ã¯ããåé¿çã¯ãããŸãããããã¯ããŒãžã§ã³ãŸã§æ©èœããŠããŸããããçªç¶ãçç±ã«é¢ããæ å ±ããªããæ©èœããªããªããŸããã
ãããæè¿ãã®åé¡ã«é¢ãã掻åã¯ãªãã£ãããã§ãã åé¡ã¯ä¿®æ£ãããŸãããããããšãã³ãã¥ããã£ã®æ³šæãå¿ èŠã§ããïŒ ãã以äžã®ã¢ã¯ãã£ããã£ãçºçããªãå Žåããã®åé¡ã¯è§£æ±ºãããå¯èœæ§ããããŸãã ãã®åé¡ã«ããã°ããŸãã¯ãæ¡åŒµããšããã©ãã«ãä»ããããšãã§ããŸãããã®åé¡ã¯éãããŸãŸã«ããŠãããŸãã è²¢ç®ããŠããã ãããããšãããããŸãã
é·æé䜿çšãããªãã£ãåŸããã®åé¡ã解決ããŸãã ãã®åé¡ãææ°ãªãªãŒã¹ã§ãåŒãç¶ãçºçããå Žåã¯ãææ°æ å ±ã䜿çšããŠåéããŠãã ããã
ãããåŒãèµ·ãããå¯èœæ§ã®ããæœåšçãªå€æŽã¯ã httpsïŒ//github.com/facebook/fresco/commit/fa71901055a38a810c190862c7fd582fd3dad2b3ã§ã
ãããåé¡ã®ããå€æŽã§ãããã©ããã確èªã§ããŸããïŒ
ããã«ã¡ã¯@oprisnikãããŠããã調æ»ããŠãããŠããããšãã
ç§ã¯gradleãšãã©ã€ãã©ãªãããŠã³ããŒããã代ããã«ãœãŒã¹ããçŽæ¥ãã¬ã¹ã³ç»ãã³ã³ãã€ã«ããããã«RNãå€æŽããæ¹æ³ã«ããŸã詳ãããããŸããã ç§ãæåããã«åã£ãã¹ãããïŒ
react-native-cli
ã䜿çšããŠRN0.57ãããžã§ã¯ããäœæããŸãv1.10.0
ãã©ã³ããžã®ãã§ãã¯ã¢ãŠãandroid-ndk-r20
ãã¹ã<Project>\android\local.properties
ïŒ ndk.dir=G:\\Dev\\Android\\android-ndk-r20
ïŒã«è¿œå ããŸã次ã«ãSO https://stackoverflow.com/a/52861379/1889685ã§ãã®åçãèŠã€ããŸãããããã¯ããœãŒã¹ãããã¬ã¹ã³ç»ã䜿çšããŠRNãã³ã³ãã€ã«ããã©ã€ãã©ãªããªãŒããŒã©ã€ãããŸãã
cd android
./gradlew assembleDebug --include-build /e/Sandbox/RN057ImageTest/fresco/
ãããã次ã®ãšã©ãŒãçºçããŸãã
> Task :fresco:imagepipeline:ndk_build_bitmaps FAILED
A problem was found with the configuration of task ':fresco:imagepipeline:ndk_build_bitmaps'. Registering invalid inputs and outputs via TaskInputs and TaskOutputs methods has been deprecated and is scheduled to be removed in Gradle 5.0.
- File 'E:\Sandbox\RN057ImageTest\fresco\imagepipeline\src\main\jni\bitmaps' specified for property '$1' is not a file.
@sunnylqmã¯ããã®ããã»ã¹ã«éåžžã«ç²ŸéããŠãããããæéãããã°ããããã¹ãã§ãããããããŸã
ããã圹ã«ç«ã£ãããç§ã¯ãããŸã§ã«æã£ãŠãããã®ã§ãªããžããªãäœæããããšãã§ããŸãã
ãããæè¿ãã®åé¡ã«é¢ãã掻åã¯ãªãã£ãããã§ãã åé¡ã¯ä¿®æ£ãããŸãããããããšãã³ãã¥ããã£ã®æ³šæãå¿ èŠã§ããïŒ ãã以äžã®ã¢ã¯ãã£ããã£ãçºçããªãå Žåããã®åé¡ã¯è§£æ±ºãããå¯èœæ§ããããŸãã ãã®åé¡ã«ããã°ããŸãã¯ãæ¡åŒµããšããã©ãã«ãä»ããããšãã§ããŸãããã®åé¡ã¯éãããŸãŸã«ããŠãããŸãã è²¢ç®ããŠããã ãããããšãããããŸãã
ãã«ãããããšããŸããããndkãšã©ãŒãçºçããŸããã ãã¹ãã§ãããã€ããªãŒãã«ãã¯ãããŸããïŒ
å€æŽãå ããã«v2.0.0ãã³ã³ãã€ã«ã§ããã®ã§ãå¥ã®æ¹æ³ã§æ€èšŒããŠã¿ãŸããã äžèšã®ã³ãããã«ãã£ãŠæå¹ã«ãªãããŠã³ãµã³ããªã³ã°ãç¡å¹ã«ããŸãããçµæã¯æ¬¡ã®ãšããã§ãã
ãã¹ãç»åURIïŒ
" https://wagonsclub.oss-cn-beijing.aliyuncs.com/static/carousel/carousel1_bg.jpg "
Fragment_drawee_simple.xml
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/drawee_view"
android:layout_width="match_parent"
android:layout_height="1000dp"
/>
ãªãªãžãã«ã®v2.0.0ã·ã§ãŒã±ãŒã¹
ããŠã³ãµã³ããªã³ã°v2.0.0ã·ã§ãŒã±ãŒã¹ãç¡å¹ã«ããŸãã
@sunnylqmããããããã°ããŠãããŠããããšãã ããŠã³ãµã³ããªã³ã°ãç¡å¹ã«ããã«ã¯ã©ãããã°ããã§ããïŒ æ¬¡ã®æ¹æ³ãè©ŠããŸããããæåããŸããã§ããã
MainApplication.java
onCreate
ïŒ
<strong i="10">@Override</strong>
public void onCreate() {
super.onCreate();
ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this)
.setDownsampleEnabled(false)
.build();
Fresco.initialize(this, config);
SoLoader.init(this, /* native exopackage */ false);
}
ããã«ãããLogcatã§Frescoããã§ã«åæåãããŠãããšããã¡ãã»ãŒãžã衚瀺ãããŸãã
MainReactPackage
ãMainPackageConfig
åæåããŠäœ¿çšãã2çªç®ã®æ¹æ³ã§ãããã©ã¡ããæ©èœããŸããã§ããã
protected List<ReactPackage> getPackages() {
Context context = getApplicationContext();
ImagePipelineConfig pipelineConfig = ImagePipelineConfig
.newBuilder(context.getApplicationContext())
.setDownsampleEnabled(false)
.build();
MainPackageConfig config = new MainPackageConfig.Builder().setFrescoConfig(pipelineConfig).build();
return new ArrayList<>(Arrays.<ReactPackage>asList(
new MainReactPackage(config),
new ReactNativeFirebaseAppPackage(),
new FastImageViewPackage(),
new RNGestureHandlerPackage(),
new ReanimatedPackage(),
new SvgPackage()
));
}
@clytrasããããªãã ãœãŒã¹ã³ãŒãã§ç¡å¹ã«ããŸããã
ping @oprisnik
ããã¯ãReact Nativeã¡ã€ã³ããã±ãŒãžæ§æãä»ããŠèšå®ãããŠããããã§ãïŒ https ïŒ
RNã§ã©ã®ããã«èšå®ããå¿ èŠãããã®ãââããããªãã®ã§ãè©Šããããšã¯ãããŸããã
@oprisnikãã®åé¡ãä¿®æ£ããèšç»ã¯ãããŸããïŒ
ãã®åé¡ã¯ãŸã RNãªããžããªã«å±ããŠãããšæããŸãã ç»åã®ããŠã³ãµã³ããªã³ã°ã¯ãééããªããã¡ã¢ãªã³ã¹ããåæžããå¹çãé«ãã倧ããªç»åãããŒãããéã®ç ©éãã軜æžããããã®ãã®ã§ãã ãã®åé¡ã¯ããšã³ãéçºè ããªãã·ã§ã³/ããããã£ã®åœ¢åŒã§ç»åã®ããŠã³ãµã³ããªã³ã°ãè¡ããã©ãããéžæã§ããããã«ãRNã«ãã£ãŠåŠçãããå¿ èŠããããšæããŸãã ããšãã°ãããã€ãã®å¹³é¢å³ã衚瀺ããããã«å€§ããªç»åã䜿çšããç§ã®ã¢ããªã§ã¯ããŠãŒã¶ãŒãå¹³é¢å³ãæ¡å€§ãããšãã«é«è§£å床ãå¿ èŠã§ãã ç§ã¯åžžã«ããã€ã¹ã®æ©èœããã§ãã¯ããRAMãå°ãªãããŸãã¯äœè§£å床ã®ããŒãšã³ãããã€ã¹ã®å Žåã¯ãããå°ãããããäœã解å床ã®ç»åãããŒãããŸãã
scale
ãšresize
ãæã€scale
<Image/>
ã³ã³ããŒãã³ãã®resizeMethod
ããããã£ããããŸãã RN currenltyã¯ããã®ããããã£ã®scale
å€ãå°éããŸãããããã¯ãç»åã®ããŠã³ãµã³ããªã³ã°ãç¡å¹ã«ãã resize
ã«èšå®ããå Žåã«ã®ã¿æå¹ã«ããå¿
èŠããããšæããŸãã
resizeMethod
ç»åã®ãµã€ãºãç»åãã¥ãŒã®ãµã€ãºãšç°ãªãå Žåã«ç»åã®ãµã€ãºãå€æŽããããã«äœ¿çšããå¿ èŠãããã¡ã«ããºã ã ããã©ã«ãã¯autoã§ãã
resize
ïŒãã³ãŒããããåã«ã¡ã¢ãªå ã®ãšã³ã³ãŒããããç»åãå€æŽãããœãããŠã§ã¢æäœã ç»åããã¥ãŒãããã¯ããã«å€§ããå Žåã¯ãscale
代ããã«ããã䜿çšããå¿ èŠããããŸãã
scale
ïŒç»åã¯çž®å°ãŸãã¯æ¡å€§ãããŠæç»ãããŸããresize
ãšæ¯èŒããŠãscale
ã¯ããé«éã§ïŒéåžžã¯ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ïŒãããé«å質ã®ç»åãçæããŸãã ããã¯ãç»åããã¥ãŒãããå°ããå Žåã«äœ¿çšããå¿ èŠããããŸãã ç»åããã¥ãŒããå°ã倧ããå Žåã«ã䜿çšããå¿ èŠããããŸãã
ãã®@ oprisnik
@clytrasããªããèšã£ãããã«ãããã¯èª¬æãªãã®ãã¬ã¹ã³ç»ã®æ¯ãèãã®å€åã§ãã ïŒç§ã瀺ããã¢ã¯ãã¬ã¹ã³ã¬ãã®ãµã³ãã«ã¢ããªã§ãïŒãããã£ãŠãRNãšã¯äœã®é¢ä¿ããªããšæããŸãã
@sunnylqmãã¡ãããããã¯èª¬æã®ãªããã¬ã¹ã³ç»ã®åäœã®å€æŽã§ãããRNã¯ããã®ãã¬ã¹ã³ç»æ©èœã®æå¹å/ç¡å¹åã®éžæã
ãŸãããã®åäœã®å€æŽã¯ãã¡ããiOSã§ã¯çºçããªãããšãå¿ããªãã§ãã ããããã®ãããäœããè¡ãå¿ èŠããããŸãããã¬ã¹ã³ç»ã®æ§æã¯React Nativeã§è¡ãããããããã®æ§æã¯ãšã³ãRNéçºè ã«å ¬éããå¿ èŠããããšæããŸãã
ãšããã§ãç§ã¯Fresco 2.0.0ïŒãã¹ã¿ãŒãã©ã³ãïŒãææ°ã®RN 0.61.2ã§ã³ã³ãã€ã«ãã ã³ã¡ã³ãã¢ãŠãããããšã§ããŠã³ãµã³ããªã³ã°ãç¡å¹ã«ããŸããã
frescoãªããžããªãã£ã¬ã¯ããªå
ã«local.properties
ãã¡ã€ã«ãäœæãã Windows64ããã
ndk.dir=G:\\Dev\\Android\\android-ndk-r19c
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.configureondemand=true
Frescoãã€ããªã¯æ£åžžã«ã³ã³ãã€ã«ããã次ãå®è¡ããŠãã«ããããRNã¢ããªã®ã€ã¡ãŒãžããŠã³ãµã³ããªã³ã°ãç¡å¹ã«ãªã£ãŠããŸãã
cd android
.\gradlew assembleDebug --include-build ..\fresco\
ããã§ããããã«å¯Ÿãã解決çã¯ãRNåæåããžãã¯ãä»ããŠããŸãã¯Frescoãåæåããããšãã«ãã¢ããªã±ãŒã·ã§ã³ã®ããŠã³ãµã³ããªã³ã°ãç¡å¹ã«ããããšã§ãã
@oprisnikã§ã¯ãçæãããandroidãããžã§ã¯ãå
ã§ãã¬ã¹ã³ç»ãåæåããããã®ããè¯ãã¯ãªãŒã³ã§ç°¡åãªæ¹æ³ãå¿
èŠã ãšæããŸããããã¯ç§ãè©Šããã©ã®æ¹æ³ã§ãéæã§ããŸããã§ããã ããã€ãã®ãããžã§ã¯ããcom.facebook.imagepipeline.core.ImagePipelineConfig
ã com.facebook.react.shell.MainReactPackage
ã com.facebook.react.shell.MainPackageConfig
ã䜿çšããŠãèšå®ãMainReactPackage
ã«æž¡ãããšã«ããã getPackages
ã¡ãœããå
ã§åæåããã®ãèŠãŠããŸããããããã¯ãç§ãè©Šããææ°ã®RN0.61ã§ãRN0.57ã§ãæ©èœããŸããã§ããã
protected List<ReactPackage> getPackages() {
Context context = getApplicationContext();
ImagePipelineConfig pipelineConfig = ImagePipelineConfig
.newBuilder(context.getApplicationContext())
.setDownsampleEnabled(false)
.build();
MainPackageConfig config = new MainPackageConfig.Builder()
.setFrescoConfig(pipelineConfig)
.build();
return new ArrayList<>(Arrays.<ReactPackage>asList(
new MainReactPackage(config),
...
));
}
ãã¶ãç§ã¯ããã§äœãééã£ãããšãããŠããã®ã§ããã MainReactPackage
ã¯<project>/android/app/build/generated/rncli/src/main/java/com/facebook/react/
ãã£ã¬ã¯ããªå
ã«PackageList.java
ãã¡ã€ã«ãçæããæ°ãã> = 0.60ãªã³ã¯ã·ã¹ãã ã§ã¯ééããªãæ©èœããŸããMainReactPackage
åŒæ°ãªãã§æž¡ãããèªåãªã³ã¯ã·ã¹ãã ã䜿çšããŠã©ã®ãããªçš®é¡ã®åŒæ°ãæž¡ãæ¹æ³ãããããŸããããfrescoconfigã䜿çšããŠMainReactPackage
ãæåã§æž¡ããŠã¿ãŸãããããããæ©èœããŸããã§ããã
React Nativeçšã«çæãããAndroidãããžã§ã¯ãå ã§ãã«ã¹ã¿ã æ§æã䜿çšããŠfrescolibãåæåããæ¹æ³ã«ã€ããŠã®ã¯ãªãŒã³ã§ææžåãããæ¹æ³ãå¿ èŠã§ãã
https://frescolib.org/docs/resizing.htmlãèªãã åŸãç§ãæ£ããç解ããŠããã°ã downsampling
ã¯resizing
代ããã«ãªããŸãã ãããã£ãŠã @ clytrasã¯æ£ãããšæããŸããresizeMethodãscaleã«èšå®ãããŠããå ŽåãããŠã³ãµã³ããªã³ã°ã¯æå¹ã«ãªããŸããã
RNã®ã³ãŒãã¯ç§ã«ã¯æ£ããããã§ãhttps://github.com/facebook/react-native/blob/aee88b6843cea63d6aa0b5879ad6ef9da4701846/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.java#L505 ïŒ nullå€ãimagepipelineã«æž¡ããŸããããã¯ããµã€ãºå€æŽ/ããŠã³ãµã³ããªã³ã°ããªãããšã瀺ããŸãïŒ
ãããããã¬ã¹ã³ç»ã§ã¯ãnullã®resizeOptionsãå°éããŸããhttps://github.com/facebook/fresco/blob/v2.0.0/imagepipeline/src/main/java/com/facebook/imagepipeline/producers/DecodeProducer.java#L158- L169
downsampleEnabled
ãšdownsampleEnabledForNetwork
äž¡æ¹ãtrueã®å ŽåãresizeOptionsãnullã§ãããã©ããã«é¢ä¿ãªããããŠã³ãµã³ããªã³ã°ãããŸãã
https://github.com/facebook/fresco/blob/master/imagepipeline-base/src/main/java/com/facebook/imagepipeline/transcoder/DownsampleUtil.java#L56
ã§ããããç§ã«ã¯ããã¥ã¡ã³ããšã³ãŒãã®äžäžèŽã®ããã§ãã ãŸããç¹å®ã®ç»åãããŠã³ãµã³ããªã³ã°ãããã©ãããå¶åŸ¡ããããã®ããæè»ãªæ¹æ³ãå¿
èŠã§ãã ïŒçŸåšã¯2ã€ã®ã°ããŒãã«æ§æã«ãã£ãŠå¶åŸ¡ãããŠããŸãïŒ @clytras @oprisnik
@sunnylqmã§ãç²ãæ§ã§ããã ç§ã¯<Image/>
ã³ã³ããŒãã³ãã®RNæ§æãæ¢ããŠè¿œè·¡ãå§ãããããããã§ãã¯ããŸããããããªãã¯ç§ãè¶
ããŸããïŒ
ãã®ãããªåäœã®å€åãããã®ã§ãã©ã¡ãã®ãã¬ã¹ã³ãresizeOptions
ãnullã§ãªãå Žåã«ã®ã¿ãããŠã³ãµã³ããªã³ã°ããã§ãã¯ããŠé©çšããå¿
èŠããããšæããŸãã ããã¯ã resizeMethod
ãresize
ïŒãŸãã¯auto
ããã³ããŒã«ã«ç»åã®å ŽåïŒã«èšå®ãããŠããå Žåã«ã®ã¿èšå®ããã httpsïŒ//github.com/facebook/react-ã§ãã§ãã¯ããshouldResize
é¢æ°ããŸãã¯æ°ããresizeMethod
åæåãããã¯ãã§ãç¹ã«ããŠã³ãµã³ããªã³ã°ã®ãªãã·ã§ã³ã
ãããæè¿ãã®åé¡ã«é¢ãã掻åã¯ãªãã£ãããã§ãã åé¡ã¯ä¿®æ£ãããŸãããããããšãã³ãã¥ããã£ã®æ³šæãå¿ èŠã§ããïŒ ãã以äžã®ã¢ã¯ãã£ããã£ãçºçããªãå Žåããã®åé¡ã¯è§£æ±ºãããå¯èœæ§ããããŸãã ãã®åé¡ã«ããã°ããŸãã¯ãæ¡åŒµããšããã©ãã«ãä»ããããšãã§ããŸãããã®åé¡ã¯éãããŸãŸã«ããŠãããŸãã è²¢ç®ããŠããã ãããããšãããããŸãã
@clytrasããªãã¯ããªãã®è§£æ±ºçãæããŠããããŸããïŒ
@ club9822ä»ã®ãšãã解決çã¯ãããã§èª¬æããããã«ãæåã«ç»åã®ããŠã³ãµã³ããªã³ã°ãç¡å¹ã«ããåŸããœãŒã¹ãããã¬ã¹ã³ãã€ããªãã³ã³ãã€ã«ããããšã§ãhttps://github.com/facebook/fresco/issues/2397#issuecomment -541802753
ã³ã¢ã©ã€ãã©ãªãåã³ã³ãã€ã«ããã«ãããåé¿ããæ¹æ³ã¯ãããŸããïŒ
@CaptainNãã®åé¡ã®ç°¡åãªè§£æ±ºçã¯ãããŸããã ãœãŒã¹ãã³ã³ãã€ã«ããããã»ã¹ã¯å°é£ã§éå±ã«èŠãããããããŸããããå®éã«ã¯ããã€ãã®å°ããªå€æŽãå ããŠã³ãã³ããå®è¡ããå¿ èŠããããŸãã ãã®å·ã®ç§ã®æçš¿ããã©ããŒããŠããã®æ¹æ³ã確èªããŠãã ããã
@clytras new PackageList(this, config)
2çªç®ã®åŒæ°ã§configãæž¡ãããšãã§ããŸã
ãããŠãå®éã«æåŸ
éãã«åäœããŠã¿ãŸããã åé¡ã¯ãããã®ããžãã¯ãæ§æãç¡èŠããããšã§ãhttps://github.com/facebook/fresco/blob/v2.0.0/imagepipeline/src/main/java/com/facebook/imagepipeline/producers/DecodeProducer.java#L158 - false
å Žåã¯L169
ãããªæãã§ããïŒ
- if (mDownsampleEnabled || !statusHasFlag(status, Consumer.IS_RESIZING_DONE))
+ if (mDownsampleEnabled && !statusHasFlag(status, Consumer.IS_RESIZING_DONE))
@oprisnik
@sunnylqmç§ã¯ãªãã£ã¹ãé¢ããŠãããä»ã¯ç¢ºèªã§ããŸããããæ°ãã_RN> = 60_èªåãªã³ã¯ã·ã¹ãã ã䜿çšããŠæ§æãæž¡ãæ¹æ³ãèŠã€ãããªãã£ãããšãèŠããŠããŸãã ã§ãããããŸããã å€ã_RN_ããŒãžã§ã³ã§ãæ©èœããŸããã§ããã äŒæããæ»ã£ãæ°æ¥åŸã«ãã§ãã¯ããŸãã
ç§ã¯ãããã¹ããŒã¿ã¹ãããªãå Žåã¯ãä»ããŠã³ãµã³ããªã³ã°ã¯åžžã«é©çšãããããšã¯æçœã ãšããŠãåé¡ã解決ããããšãORããŠãå€æŽä¿¡ãIS_RESIZING_DONE
ãããã¯å®å
šã«ãã€ãã¹ããŠãã©ã°ãmDownsampleEnabled
ã ãã¡ãããããŠã³ãµã³ãã«ãç¡å¹ã«ããã«ã¹ã¿ã ãã¬ã¹ã³èšå®ãé©çšãããŠãã¬ã¹ã³ã«æž¡ãããå Žåãåæ§ã§ãã
@clytrasgradleã®éæšå¥šãªã©ã§ããããçš®é¡ã®ãšã©ãŒãçºçããŸãã ãã«ãåã®ãã€ããªãäœæã§ããïŒãããŠã€ã³ã¹ããŒã«ããå ŽæãæããŠãã ããïŒå¯èœæ§ã¯ãããŸããïŒ æ¬åœã«ãããããã§ãã
ããããããå¿ããŠãã ããã å°ããã®ã倱瀌ã§ãã ç§ã¯ãããç解ããå€åPRã«å ¥ããŸãã
@CaptainNããã¯å€±ç€Œã§ã¯ãããŸããã åé¡ã¯ãç§ããããå®è¡ãããã¹ãŠã®ãšã©ãŒã«çŽé¢ããããšã§ãããã®ãããFrescoã®ã€ã³ã¹ããŒã«ãšãããã®é©çšæ¹æ³ã®èª¬æãå«ãã¹ã¿ãŒã¿ãŒãªããžããªãäœæããã®ã«ãããæéã¯ã¯ããã«çããªããŸãã
ã ããããã«ãããŸãïŒ https ïŒ
RN 0.61.5
ãŸãã ãªããžããªã«ã¯è©³çŽ°ãªæé ããããŸãã Frescoã®ã¯ããŒã³ãäœæãã v2.1.0
ããã§ãã¯ã¢ãŠããã DecodeProducer.java
ããããé©çšããŠãããŠã³ãµã³ãã«ã³ãŒããã³ã¡ã³ãã¢ãŠãããŸãã Android NDKãããŠã³ããŒãããŠã libraries/fresco/local.properties
ãã¡ã€ã«ãè¿œå ããã ãã§ãã ããã¯ãã¹ãŠreadmeã§è©³ãã説æãããŠããŸãã
æ瀺ãšyarnã¹ã¯ãªããã«åŸããšãæ¢åã®RN> = 0.60ïŒ_ãŸãã¯å€ãããŒãžã§ã³_ïŒãããžã§ã¯ãã«frescolibãè¿œå ã§ããŸãã
@clytrasããã
äžèšã®ã³ã¡ã³ããå°æ¥ãã®åé¡ã«å¯ŸåŠãããã©ããã«ã€ããŠäœãèšèã¯ãããŸããïŒ
@sunnylqmãææ¡ããå€æŽããã¹ãããŸããïŒ
- if (mDownsampleEnabled || !statusHasFlag(status, Consumer.IS_RESIZING_DONE))
+ if (mDownsampleEnabled && !statusHasFlag(status, Consumer.IS_RESIZING_DONE))
ãã®å€æŽåŸã MainApplication.java
å
ã®æ§æã ãã䜿çšããŠã€ã¡ãŒãžã®ããŠã³ãµã³ãã«ãç¡å¹ã«ã§ããããšãããããŸãããã€ãŸãããã¬ã¹ã³ç»ãã³ã³ãã€ã«ããå¿
èŠã¯ãªããããã§ãã¬ã¹ã³ç»ã®èšå®ãå€æŽããã ãã§æžã¿ãŸãã
<strong i="12">@Override</strong>
protected List<ReactPackage> getPackages() {
Context context = getApplicationContext();
ImagePipelineConfig frescoConfig = ImagePipelineConfig
.newBuilder(context)
.setDownsampleEnabled(false)
.build();
MainPackageConfig appConfig = new MainPackageConfig
.Builder()
.setFrescoConfig(frescoConfig)
.build();
@SuppressWarnings("UnnecessaryLocalVariable")
List<ReactPackage> packages = new PackageList(this, appConfig).getPackages();
// Packages that cannot be autolinked yet can be added manually here, for example:
// packages.add(new MyReactNativePackage());
return packages;
}
ãã®1åã®å€æŽåŸãäžèšã®æ§æã³ãŒããæ©èœããããŠã³ãµã³ããªã³ã°ãç¡å¹ã«ãªããŸãã ãã®æ§æã.setDownsampleEnabled(true)
ãèšå®ãããšãããŠã³ãµã³ãã«ãé©åã«æå¹ã«ãªããŸãã ããã¯ç§ã«ã¯ãã°ã®ããã«èŠããŸã@oprisnikã ãã¡ãããç§ã«ãšã£ãŠçæ³çãªã®ã¯ãRNãresizeMethod
ãå°éããåçã«ããŠã³ãµã³ããªã³ã°ãé©çšããããšã§ããããããå¯èœãã©ããã¯ããããŸããã
ç·šé
å®éãç§ã¯éšåçã«ééã£ãŠããŸããã ãã®å€æŽïŒ_ããã¯å®å
šã«çã«ããªã£ãŠããŸã_ïŒã§ãRNã¯.setDownsampleEnabled(false)
ãèšå®ããŸããããã¯ã ReactAndroid / src / main / java / com / facebook / react / modules / fresco / FrescoModule.javaïŒL155ã§ç¢ºèªã§ããŸããããŠã³ãµã³ããªã³ã°ãæå¹ã«ããã«ã¯ãäžèšã®ã³ãŒãã§ãã¬ã¹ã³ç»ãæ§æãã .setDownsampleEnabled(true)
ãèšå®ããå¿
èŠããããŸãã RNã§ã¯ããã©ã«ãã§ããŠã³ãµã³ããªã³ã°ãç¡å¹ã«ãªã£ãŠããŸãã
@ clytras @ CaptainNãã®åé¡ã«ãååããã ãããããšã
react-native-cliïŒ2.0.1
åå¿ãã€ãã£ãïŒ0.61.2
å°ããªã¢ããããŒãã ç§ã¯é·ãéãã®åé¡ã«ééããŠããŸããã ããããããã¯ãã»ãšãã©ã®ç»åã§åãç»åã®3ã€ã®ç°ãªãã¹ã±ãŒã«ïŒ @ 1x ã @ 2x ã@ 3xïŒã䜿çšããããã«åãæ¿ãããããã©ããã¯ããããŸããã
@enguerranwsExpoã䜿çšããçµéšã¯ãŸã£ãããããŸããã @gorvinsky RN 0.61.5ã䜿çšããŠãã¹ããããšãããæ©èœããŸããã æ®å¿µãªããããã³ãã«ãããç»åãµã€ãºã¯æ©èœããŸããã§ããã ç§ããã®åé¡ã«æåã«çŽé¢ãããšããããã¯ç§ãæåã«ãã¹ããããã®ã§ããã
RN0.61.5ãããžã§ã¯ããšãœãŒã¹ããFrescoããã«ãããããã«å¿
èŠãªå€æŽãå«ãreact-native-community / cliãã³ãã¬ãŒããäœæããŸããã ããã¯ãã«ã¹ã¿ã ãããžã§ã¯ãåãšããœãŒã¹ããFrescoãã³ã³ãã€ã«ããããã«å¿
èŠãªå€æŽã䜿çšããŠãæ°ããRNãããžã§ã¯ããäœæããããã®ç°¡åã§è¿
éãªæ¹æ³ã§ãã ãŸãã Android NDK Revision 21ã䜿çšããŠããã yarn 1.21
ã䜿çšããŠmacOSãšWindowsã§ãã¹ãããŸããã
GithubãªããžããªïŒ clytras / react-native-fresco
NPMãã³ãã¬ãŒãïŒ @ lytrax / react-native-fresco
次ã®ããã«ã€ã³ã¹ããŒã«ã§ããŸãã
npx @react-native-community/cli<strong i="17">@next</strong> init --template=@lytrax/react-native-fresco <ProjectName>
READMEã«è©³çŽ°ãªã€ã³ã¹ããŒã«æé ãããyarn fresco-setup
ã䜿çšããŠFrescoã®ã¯ããŒã³ãäœæ/ããããé©çšããŠãããAndroid NDKãã€ã³ã¹ããŒã«ããAndroid NDKãã¹ã䜿çšããŠandroid/libraries/fresco/local.properties
ãäœæããå¿
èŠããããŸãã
ãã®ã³ãããã¯react-nativeã§ãããä¿®æ£ããŠããŸããïŒ ïŒçŸæç¹ã§ã¯ãªãªãŒã¹ãããŠããŸããïŒ
https://github.com/facebook/react-native/commit/f535c8b4bb4474ffe0a0765270cbca8d839deca8
説æã§ã¯ããsetDownsampleEnabledãå±æ§ãæã€PipelineConfigãæž¡ãããšãã§ãããšæžãããŠããŸãã
@enguerranwsExpoã䜿çšããçµéšã¯ãŸã£ãããããŸããã @gorvinsky RN 0.61.5ã䜿çšããŠãã¹ããããšãããæ©èœããŸããã æ®å¿µãªããããã³ãã«ãããç»åãµã€ãºã¯æ©èœããŸããã§ããã ç§ããã®åé¡ã«æåã«çŽé¢ãããšããããã¯ç§ãæåã«ãã¹ããããã®ã§ããã
RN0.61.5ãããžã§ã¯ããšãœãŒã¹ããFrescoããã«ãããããã«å¿ èŠãªå€æŽãå«ãreact-native-community / cliãã³ãã¬ãŒããäœæããŸããã ããã¯ãã«ã¹ã¿ã ãããžã§ã¯ãåãšããœãŒã¹ããFrescoãã³ã³ãã€ã«ããããã«å¿ èŠãªå€æŽã䜿çšããŠãæ°ããRNãããžã§ã¯ããäœæããããã®ç°¡åã§è¿ éãªæ¹æ³ã§ãã ãŸãã Android NDK Revision 21ã䜿çšããŠããã
yarn 1.21
ã䜿çšããŠmacOSãšWindowsã§ãã¹ãããŸãããGithubãªããžããªïŒ clytras / react-native-fresco
NPMãã³ãã¬ãŒãïŒ @ lytrax / react-native-fresco次ã®ããã«ã€ã³ã¹ããŒã«ã§ããŸãã
npx @react-native-community/cli<strong i="18">@next</strong> init --template=@lytrax/react-native-fresco <ProjectName>
READMEã«è©³çŽ°ãªã€ã³ã¹ããŒã«æé ããã
yarn fresco-setup
ã䜿çšããŠFrescoã®ã¯ããŒã³ãäœæ/ããããé©çšããŠãããAndroid NDKãã€ã³ã¹ããŒã«ããAndroid NDKãã¹ã䜿çšããŠandroid/libraries/fresco/local.properties
ãäœæããå¿ èŠããããŸãã
æ¢åã®ãããžã§ã¯ãã«å®è£ ããæ¹æ³ã¯ãããŸããïŒ
@kalmahik
ãã®æ¹æ³ãè©ŠããŠãã ããã ïŒç§ã®RNã¯v0.61.4ã§ãïŒ
ããã¯ã @ clytrasã®ããããæ¢åã®ãããžã§ã¯ãã«é©çšããæ¹æ³ã§ãã
ãããŠãããã¯ããã¢ã³ããã€ãã·ãã¥ã¬ãŒã¿ãŒãå®è¡ããããšãã§ããŸããã ç§ã¯åžžã«å®éã®ããã€ã¹ã§ãã¹ãããŠããŸãã ð¢
"fresco-clone": "git clone https://github.com/facebook/fresco.git android/libraries/fresco && cd android/libraries/fresco && git checkout tags/v2.1.0",
"fresco-patch": "yarn file-patch ./patches/DecodeProducer.java.diff android/libraries/fresco/imagepipeline/src/main/java/com/facebook/imagepipeline/producers/DecodeProducer.java",
"fresco-setup": "yarn fresco-clone && yarn fresco-patch"
ãæ¯ç³žãã¬ã¹ã³ãããã
çµæ
@@ -7279,32 +7279,35 @@
+//
if (mDownsampleE
@@ -7381,24 +7381,27 @@
+//
ImageReque
@@ -7460,24 +7460,27 @@
+//
if (mDowns
@@ -7513,24 +7513,27 @@
+ //
%7C%7C !U
@@ -7587,36 +7587,39 @@
+//
+
encodedImage.set
@@ -7637,32 +7637,35 @@
%0A
+ //
Downsam
@@ -7700,32 +7700,35 @@
%0A
+ //
req
@@ -7762,32 +7762,35 @@
+//
requ
@@ -7820,32 +7820,35 @@
%0A
+ //
enc
@@ -7866,32 +7866,35 @@
+//
maxB
@@ -7914,32 +7914,35 @@
+//
%7D%0A
@@ -7937,32 +7937,35 @@
+//
%7D%0A%0A
@@ -7962,24 +7962,27 @@
+ //
if (produce
@@ -8002,28 +8002,31 @@
+//
+
.getImagePip
@@ -8050,24 +8050,27 @@
+ //
.getExp
@@ -8091,24 +8091,27 @@
+ //
.should
@@ -8151,24 +8151,27 @@
+//
maybeIncre
@@ -8206,32 +8206,35 @@
%0A
+ //
%7D%0A%0A
è¿œå includeBuild ('libraries/fresco')
ã®åã«include ':app'
rootProject.name = 'YOURPROJECT'
...
includeBuild ('libraries/fresco')
include ':app'
Gradleã®äŸåé¢ä¿ã®äœ¿çšã¯3.4.1ã§ã
dependencies {
...
classpath("com.android.tools.build:gradle:3.4.1")
...
}
yarn fresco-setup
r21ããŒãžã§ã³ã䜿çšããŸããã
https://developer.android.com/ndk/downloads
NDKã解åããŸã
ndkãUsers/YOURNAME/Library/Android/android-ndk-r21
ã«è§£åããŸãã
ãããŠããããžã§ã¯ãã«android/libraries/fresco/local.properties
ãäœæããŸã
ndk.dir=/Users/YOURNAME/Library/Android/android-ndk-r21
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.configureondemand=true
ããã§å šéšã§ãã
yarn android
ãããŠå€§ããªç»è³ªããã§ãã¯ããŸãã
@clytrasã«æè¬ããŸã
@JeffGuKang
file-patch
ã³ãã³ããšã¯äœã§ããïŒ
ãããããŒãžãããªãããã«ããŠããã®ã¯äœã§ããïŒ åã«ä¿®æ£ããã®ã§ã¯ãªãããªããããã®ããããå¿ èŠãªã®ã§ããïŒæéã®å¶çŽã ãã§ã¯ãªããšä»®å®ãããšãç§ã¯å®å šã«ãããååŸãã匷åŒã«ããããšã¯ããŸããïŒïŒ
@kalmahik file-patch
ã¯ãNPMããã±ãŒãžã®CLIãããããŒã«ã§ãã
@JeffGuKangãã³ãã¬ãŒãèšå®ã¹ã¯ãªãããæ©èœããããã«å¿
èŠãªå€æŽãpackage.json
å«ããå¿
èŠããããŸãã
@CaptainNäžèšã®ã³ãããããã¹ãããæéã¯ãŸã ãããŸããã§ããããããã»ã©åçŽã§ã¯ãªããšæããŸãã
@clytrasããããã®1 ïŒ ã©ããïŒ
@kalmahik
ãã®æ¹æ³ãè©ŠããŠãã ããã ïŒç§ã®RNã¯v0.61.4ã§ãïŒ
ããã¯ã @ clytrasã®ããããæ¢åã®ãããžã§ã¯ãã«é©çšããæ¹æ³ã§ãã
ãããŠãããã¯ããã¢ã³ããã€ãã·ãã¥ã¬ãŒã¿ãŒãå®è¡ããããšãã§ããŸããã ç§ã¯åžžã«å®éã®ããã€ã¹ã§ãã¹ãããŠããŸãã ð¢
- package.jsonã«ã¹ã¯ãªãããè¿œå ããŸã
"fresco-clone": "git clone https://github.com/facebook/fresco.git android/libraries/fresco && cd android/libraries/fresco && git checkout tags/v2.1.0", "fresco-patch": "yarn file-patch ./patches/DecodeProducer.java.diff android/libraries/fresco/imagepipeline/src/main/java/com/facebook/imagepipeline/producers/DecodeProducer.java", "fresco-setup": "yarn fresco-clone && yarn fresco-patch"
- ããã/DecodeProducer.java.diffãäœæããŸã
ãæ¯ç³žãã¬ã¹ã³ãããã
çµæ
@@ -7279,32 +7279,35 @@ +// if (mDownsampleE @@ -7381,24 +7381,27 @@ +// ImageReque @@ -7460,24 +7460,27 @@ +// if (mDowns @@ -7513,24 +7513,27 @@ + // %7C%7C !U @@ -7587,36 +7587,39 @@ +// + encodedImage.set @@ -7637,32 +7637,35 @@ %0A + // Downsam @@ -7700,32 +7700,35 @@ %0A + // req @@ -7762,32 +7762,35 @@ +// requ @@ -7820,32 +7820,35 @@ %0A + // enc @@ -7866,32 +7866,35 @@ +// maxB @@ -7914,32 +7914,35 @@ +// %7D%0A @@ -7937,32 +7937,35 @@ +// %7D%0A%0A @@ -7962,24 +7962,27 @@ + // if (produce @@ -8002,28 +8002,31 @@ +// + .getImagePip @@ -8050,24 +8050,27 @@ + // .getExp @@ -8091,24 +8091,27 @@ + // .should @@ -8151,24 +8151,27 @@ +// maybeIncre @@ -8206,32 +8206,35 @@ %0A + // %7D%0A%0A
- android /settings.gradleãç·šéããŸã
è¿œå
includeBuild ('libraries/fresco')
ã®åã«include ':app'
rootProject.name = 'YOURPROJECT' ... includeBuild ('libraries/fresco') include ':app'
- android / build.gradle
Gradleã®äŸåé¢ä¿ã®äœ¿çšã¯3.4.1ã§ã
dependencies { ... classpath("com.android.tools.build:gradle:3.4.1") ... }
- ã¹ã¯ãªãããå®è¡ãã
yarn fresco-setup
- androidndkãããŠã³ããŒã
r21ããŒãžã§ã³ã䜿çšããŸããã
https://developer.android.com/ndk/downloads
- ndkã解åããŠç§»åããŸã
NDKã解åããŸã
ndkãUsers/YOURNAME/Library/Android/android-ndk-r21
ã«è§£åããŸãã
ãããŠããããžã§ã¯ãã«android/libraries/fresco/local.properties
ãäœæããŸãndk.dir=/Users/YOURNAME/Library/Android/android-ndk-r21 org.gradle.daemon=true org.gradle.parallel=true org.gradle.configureondemand=true
- ã¢ã³ããã€ããå®è¡ããŸã
ããã§å šéšã§ãã
yarn android
ãããŠå€§ããªç»è³ªããã§ãã¯ããŸãã@clytrasã«æè¬ããŸã
@clytrasã¹ã¯ãªããã«åŸã£ãŠãœãŒã¹ããFrescoãã³ã³ãã€ã«ããããšãããšããã®åé¡ã«çŽé¢ããŸãã æ¢åã®RNïŒv0.59.9ïŒãããžã§ã¯ãã«ã³ã³ãã€ã«ããŠããŸã
ãŸããFresco ConfigãMainApplication.javaã«è¿œå ããããšããŸããããããŸããããŸããã§ãã
@ ravali121ãããã®æé ã¯ãRN> = 0.60.xçšã§ãããRN0.59以åã®ããŒãžã§ã³çšã§ã¯ãããŸããã å€ãããŒãžã§ã³ã®RNã«ããããé©çšã§ããŸãããæé ãšFrescoãã§ãã¯ã¢ãŠãã¯ããã®ç¹å®ã®RNããŒãžã§ã³ã«ä»å±ããŠããããŒãžã§ã³ã«åŸãå¿
èŠããããŸãã RN0.61ã®Fresco2.1.0ããã§ãã¯ããŠããŸãããRN 0.59ã®ããŒãžã§ã³ã¯ç°ãªãããã¡ããããããç°ãªããŸããããããã¯å¿
èŠãããŸãããã³ãŒãã®å€æŽã¯ã DecodeProducer.java
ç·šéããŠæåã§é©çšã§ããŸãã ãŸããäŸåé¢ä¿ãåŠçããããã®è¿œå ã®gradleæ§æããããŸãã
0.59ã§åäœãããããšã¯ã§ããŸããããããžã§ã¯ããå°ãªããšã0.61ïŒãŸãã¯ãã以äžïŒã«ã¢ããã°ã¬ãŒãããããšããå§ãããŸãã
ããã«ã¡ã¯ïŒ ããŒãžãããããã®ETAã«é¢ããæŽæ°ã¯ãããŸããïŒ ïŒçŽ æŽãããä»äºãããŠããã@clytrasã«æè¬ããŸããã§ããã ãæ©ãããããè©Šãå¿ èŠããããŸããããããä¿®æ£ããããã©ããç¥ãããã§ãïŒ
@FRizzonelliãããã¯åé¿çã§ãããå®éã«ã¯åé¡ã®ä¿®æ£ã§ã¯ãããŸããããã®ããããã®åé¡ã¯é·ãééãããŸãŸã«ãªããŸãã
ããããš@react-native-community/cli
ãã³ãã¬ãŒãã確èªããŠãææ°ã®RNããŒãžã§ã³ã«ã¢ããã°ã¬ãŒãããå¿
èŠããããŸãã
@clytrasç§ã¯ç解ããŠããŸã:(åé¡ã¯ä»ãAndroidã§ãã®åé¡ãçºçããŠããExpoã§react-native-webã䜿çšããŠå°ããªPOCãã»ããã¢ããããããšããŠããŸããå°ããªãã¢ã§ã¯ãæåºããããªãã®ã§ãããç§ã¯ããå¿ èŠããããšæããŸã:(
@clytrasç§ã¯ç解ããŠããŸã:(åé¡ã¯ä»ãAndroidã§ãã®åé¡ãçºçããŠããExpoã§react-native-webã䜿çšããŠå°ããªPOCãã»ããã¢ããããããšããŠããŸããå°ããªãã¢ã§ã¯ãæåºããããªãã®ã§ãããç§ã¯ããå¿ èŠããããšæããŸã:(
png
代ããã«jpg
圢åŒã䜿çšããã®ã¯ã©ãã§ããïŒ åé¡ã解決ã§ãããã©ããã¯ããããŸããã
@clytrasç§ã¯ç解ããŠããŸã:(åé¡ã¯ä»ãAndroidã§ãã®åé¡ãçºçããŠããExpoã§react-native-webã䜿çšããŠå°ããªPOCãã»ããã¢ããããããšããŠããŸããå°ããªãã¢ã§ã¯ãæåºããããªãã®ã§ãããç§ã¯ããå¿ èŠããããšæããŸã:(
png
代ããã«jpg
圢åŒã䜿çšããã®ã¯ã©ãã§ããïŒ åé¡ã解決ã§ãããã©ããã¯ããããŸããã
æ®å¿µãªããã©ã¡ããæ©èœããŸãããã¢ã«ãã¡ã¬ã€ã€ãŒã«ã¯pngãå¿ èŠã§ã:(
RN0.63.4ã§ãåãåé¡ããããŸãã
960 x 13983ã®ç»åãµã€ãºã¯ããªãããŠã³ãµã³ããªã³ã°ãããŠãããç»åå
ã®ããã¹ãã¯ã»ãšãã©èªããŸããã
680 X 2538ã®ç»åãµã€ãºãããŠã³ãµã³ããªã³ã°ãããŠããŸãããããªããŸãšãã§ãã
Image.getSizeã䜿çšããŠç»åã®ãµã€ãºã調ã¹ãããããé«ããèšç®ããŸããïŒå¹
ã¯100ïŒ
ïŒ
ç»åã¯ãã¹ãŠjpgã§ãã
@clytrasã®ã¡ãœãããgradle3.5.4ãNDK21.4.7075529ã§å®è¡ããŸããã ããããåãåé¡ã
<Image
style={{ width: SCREEN_WIDTH, height }}
resizeMode="contain"
source={{ uri }}
resizeMethod="scale"
/>
FastImageã§åé¡ã解決ããŸããã ã圹ã«ç«ãŠã°å¹žãã§ãã
<FastImage
style={{ width: SCREEN_WIDTH, height: height }}
source={{
uri: uri,
priority: FastImage.priority.normal,
}}
resizeMode={FastImage.resizeMode.center}
/>
@JJMoonã¹ã¿ã€ã«ã®ç»åãµã€ãºãå€æŽãããšãã«ãFastImageã§ç»åã匷å¶çã«åã¬ã³ââããªã³ã°ããæ¹æ³ãç¥ã£ãŠããŸããã
ç»åã¯åžžã«åã¬ã³ããªã³ã°ãããŸãããFastImageã¯åã¬ã³ããªã³ã°ãããŸããã
ããã«ã¡ã¯ããµãããšãã
ç§ã¯ãã®ã¹ã¬ããããèãããããã¹ãŠã®è§£æ±ºçãè©ŠããŸããããRN0.64.2ãšFresco2.5.0ã䜿çšããŸããã
NDKv22.1.7171670ãšgradle4.2.1ã䜿çšããŠããŸãã
ç§ã¯çŸåšã次ã®ãšã©ãŒã§ç«ã¡åŸçããŠããŸãïŒåé¡ã¯android-emulatorã«é¢é£ããŠããŸããïŒïŒïŒ
E/AndroidRuntime: FATAL EXCEPTION: mqt_native_modules
Process: com.veerle.wiener.debug, PID: 10813
java.lang.NoSuchMethodError: No static method initialize(Lcom/facebook/imagepipeline/core/ImagePipelineConfig;)V in class Lcom/facebook/imagepipeline/core/ImagePipelineFactory; or its super classes (declaration of 'com.facebook.imagepipeline.core.ImagePipelineFactory' appears in /data/app/<project>/base.apk!classes16.dex)
at com.facebook.drawee.backends.pipeline.Fresco.initialize(Fresco.java:83)
at com.facebook.drawee.backends.pipeline.Fresco.initialize(Fresco.java:45)
at com.facebook.react.modules.fresco.FrescoModule.initialize(FrescoModule.java:114)
at com.facebook.react.bridge.ModuleHolder.doInitialize(ModuleHolder.java:236)
at com.facebook.react.bridge.ModuleHolder.markInitializable(ModuleHolder.java:100)
at com.facebook.react.bridge.NativeModuleRegistry.notifyJSInstanceInitialized(NativeModuleRegistry.java:103)
at com.facebook.react.bridge.CatalystInstanceImpl$2.run(CatalystInstanceImpl.java:438)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
at android.os.Looper.loop(Looper.java:223)
at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:226)
at java.lang.Thread.run(Thread.java:923)
I/Process: Sending signal. PID: 10813 SIG: 9
@JJMoonãããŒã«ã«ç»åïŒå¿ é ïŒã§
ããŒã ããã®åé¡ãä¿®æ£ããã®ãåŸ
ã£ãŠããéãç§ã¯ãã®ããã«ImageãšFastImageã®äž¡æ¹ã䜿çšããŠããŸãif(height < blurSize){
return <Image/>
}else{
return <FastImage/>
}
æãåèã«ãªãã³ã¡ã³ã
@CaptainNããã¯å€±ç€Œã§ã¯ãããŸããã åé¡ã¯ãç§ããããå®è¡ãããã¹ãŠã®ãšã©ãŒã«çŽé¢ããããšã§ãããã®ãããFrescoã®ã€ã³ã¹ããŒã«ãšãããã®é©çšæ¹æ³ã®èª¬æãå«ãã¹ã¿ãŒã¿ãŒãªããžããªãäœæããã®ã«ãããæéã¯ã¯ããã«çããªããŸãã
ã ããããã«ãããŸãïŒ https ïŒ
RN 0.61.5
ãŸãã ãªããžããªã«ã¯è©³çŽ°ãªæé ããããŸãã Frescoã®ã¯ããŒã³ãäœæããv2.1.0
ããã§ãã¯ã¢ãŠãããDecodeProducer.java
ããããé©çšããŠãããŠã³ãµã³ãã«ã³ãŒããã³ã¡ã³ãã¢ãŠãããŸãã Android NDKãããŠã³ããŒãããŠãlibraries/fresco/local.properties
ãã¡ã€ã«ãè¿œå ããã ãã§ãã ããã¯ãã¹ãŠreadmeã§è©³ãã説æãããŠããŸããæ瀺ãšyarnã¹ã¯ãªããã«åŸããšãæ¢åã®RN> = 0.60ïŒ_ãŸãã¯å€ãããŒãžã§ã³_ïŒãããžã§ã¯ãã«frescolibãè¿œå ã§ããŸãã