ΠΡΠΎΠ±Π»Π΅ΠΌΠ° RN: RN 0.57.x Π‘Π²ΡΠ·Π°Π½Π½ΡΠ΅ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅ΡΡ Π½ΠΈΠ·ΠΊΠΎΠ΅ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ \
ΠΠΈΠ·ΠΊΠΎΠ΅ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ Π±ΠΎΠ»ΡΡΠΈΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΡ (PNG, GIF ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄ΡΡΠ³ΠΈΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ², ΠΠ JPEG ) ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° Android:
ΠΠ° Π»Π΅Π²ΠΎΠΌ ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΊΠΎΠ΄, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ Ρ RN 0.56.0, Π° Π½Π° ΠΏΡΠ°Π²ΠΎΠΌ ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ RN 0.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 ΠΈ Π²ΡΠ΅Ρ
Π²Π΅ΡΡΠΈΠΉ ΠΏΠΎΡΠ»Π΅ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ RN 0.60.x.
ΠΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΎ, ΡΡΠΎ ΡΡΠΎ Π²ΡΠ·Π²Π°Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ RN Fresco ΠΌΠ΅ΠΆΠ΄Ρ 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 Ρ Π²ΠΈΠΆΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡΡ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠ²Π°ΡΡ ΠΏΠΎ ΡΠ°ΡΡΡΠΌ, ΡΡΠΎ ΡΠ΅ΡΠ°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ»ΡΡΠ°ΠΈ (Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π±ΠΎΠ»ΡΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΊΠ°ΡΡΠΎΠΉ), Π½ΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π΄Π»Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ / Π‘ΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ Π΄ΠΎ RN 0,56 ΠΈ Ρ 0,57 ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
Π Π: ΠΡΠΎ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ 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 Π½Π΅ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠ΅Π½Π½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΡΡΠ»ΠΎΠΊ. Π’Π°ΠΊ ΡΠΊΠ°Π·Π°ΡΡ: ΡΡΠΎ ΠΌΠΎΠ³Π»ΠΎ Π±ΡΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΌ ΡΡΡΠ΅ΠΊΡΠΎΠΌ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΡΡΠΏΠ½ΠΎΠ³ΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ.
ΠΡΠΈΠ²Π΅Ρ, ΠΏΠΎΡ ΠΎΠΆΠ΅, Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ Π±ΡΠ»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΏΠΎ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΡΡΡΠ°Π½Π΅Π½Π° ΠΈΠ»ΠΈ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°? ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΊΡΡΡΠ°, Π΅ΡΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΊΠ°ΠΊ Β«ΠΎΡΠΈΠ±ΠΊΠ°Β» ΠΈΠ»ΠΈ Β«ΡΠ»ΡΡΡΠ΅Π½ΠΈΠ΅Β», ΠΈ Ρ ΠΎΡΡΠ°Π²Π»Ρ Π΅Π΅ ΠΎΡΠΊΡΡΡΠΎΠΉ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π°Ρ Π²ΠΊΠ»Π°Π΄.
ΠΠ°ΠΊΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ Fresco ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² RN 0.56.0 ΠΈ 0.57.1? ΠΡΠΎ ΡΡΠΆΠ°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠΎ.
ΠΡΠΈΠ²Π΅Ρ @oprisnik ,
Π― ΠΏΡΠΎΠ²Π΅ΡΡ ΠΈ ΡΠ²ΠΈΠΆΡ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠ°ΡΡ Π²Π΅ΡΡΠΈΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ» ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° Π²Π΅ΡΠ½ΡΡΡ Π² ΡΠ²ΠΎΠΉ ΠΎΡΠΈΡ, Ρ ΠΎΡΡ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ https://github.com/facebook/react-native/issues/21301#issuecomment -520155609 ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΡΠΎΡΠ½ΠΎ ΠΈΠ· ΠΊΠ°ΠΊΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π±ΡΠ»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
ΠΡΠΈΠ²Π΅Ρ @clytras , Ρ Π½Π°ΡΠ΅Π» ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΊΡΠ°Π½Π΅ Π² ΡΡΠΎΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ .
Π― ΡΠΊΠ°ΡΠΈΠ²Π°Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ ΠΈ Π½Π°Ρ
ΠΎΠΆΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ 2111 (ΡΠΈΡΠΈΠ½Π°) * 4645 (Π²ΡΡΠΎΡΠ°).
Fresco ΡΠΌΠ΅Π½ΡΡΠΈΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°Π»ΠΎ ΠΏΡΠ΅Π΄Π΅Π»Ρ OpenGL, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ ΡΠΈΡΠΈΠ½Π° / Π²ΡΡΠΎΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΆΠ΅ΡΡΠΊΠΎ Π·Π°Π΄Π°Π½Π° Π² ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ .
ΠΠ° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄,
Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± - ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΠ»Π΅ maxBitmapSize Π² ResizeOption.
ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± - Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Fresco Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΠ§ΠΠΠ¬ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
Π‘ΠΎΠ·Π΄Π°ΡΡ Π΄ΡΡΠ³ΠΎΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΠ§ΠΠΠ¬ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ - Π²ΡΠ±ΠΎΡ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Android.
ΠΡΠΈΠ²Π΅Ρ @ s1rius , ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ Π½Π°ΠΏΠΈΡΡ ΡΠΎΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΠΎΡΠΈΡΠ°Π»ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΊΡΡΡΠΎΠΌ Π²ΡΠΏΡΡΠΊΠ΅:
ΠΠΎΠ΄ - ΡΡΠΎ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ 2111 x 4645 ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ
Π Π΅ΡΡ ΠΈΠ΄Π΅Ρ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ Ρ RN> = 0,57, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ Ρ Fresco 1.9.0 Π½Π° 1.10.0. ΠΠΎ ΡΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΡΠΎΠΉ, ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΠΈ Π·Π°Π³ΡΡΠΆΠ°Π»ΠΈΡΡ Π² ΠΏΠΎΠ»Π½ΠΎΠΌ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅. ΠΠ²ΡΠΎΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ RN Π·Π°ΠΊΡΡΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π·Π°ΡΠ²ΠΈΠ², ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° RN, Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ Fresco. ΠΡΠ»ΠΈ ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΡΠ΅ΡΠΊΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΊΡΡΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠ°, Π΅ΡΡΡ ΠΎΠ±Ρ ΠΎΠ΄Π½ΡΠ΅ ΠΏΡΡΠΈ, Π½ΠΎ Π΄Π΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ Π΄ΠΎ Π²Π΅ΡΡΠΈΠΈ, ΠΈ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ, Π±Π΅Π· ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΏΡΠΈΡΠΈΠ½Π°Ρ , ΠΏΠ΅ΡΠ΅ΡΡΠ°Π»ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
ΠΡΠΈΠ²Π΅Ρ, ΠΏΠΎΡ ΠΎΠΆΠ΅, Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ Π±ΡΠ»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΏΠΎ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΡΡΡΠ°Π½Π΅Π½Π° ΠΈΠ»ΠΈ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°? ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΊΡΡΡΠ°, Π΅ΡΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΊΠ°ΠΊ Β«ΠΎΡΠΈΠ±ΠΊΠ°Β» ΠΈΠ»ΠΈ Β«ΡΠ»ΡΡΡΠ΅Π½ΠΈΠ΅Β», ΠΈ Ρ ΠΎΡΡΠ°Π²Π»Ρ Π΅Π΅ ΠΎΡΠΊΡΡΡΠΎΠΉ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π°Ρ Π²ΠΊΠ»Π°Π΄.
ΠΠ°ΠΊΡΡΡΠΈΠ΅ ΡΡΠΎΠ³ΠΎ Π²ΠΎΠΏΡΠΎΡΠ° ΠΏΠΎΡΠ»Π΅ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄Π° Π±Π΅Π·Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. ΠΡΠ»ΠΈ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΡΠ΅ Π΅ΡΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ Π²ΡΠΏΡΡΠΊΠ΅, Π½Π΅ ΡΡΠ΅ΡΠ½ΡΠΉΡΠ΅ΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΎΡΠΊΡΡΡΡ Ρ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ.
ΠΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠ³Π»ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠΎ, - https://github.com/facebook/fresco/commit/fa71901055a38a810c190862c7fd582fd3dad2b3.
ΠΠΎΠΆΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΡΡΠΎ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ?
ΠΡΠ΅ ΡΠ°Π· Π·Π΄ΡΠ°Π²ΡΡΠ²ΡΠΉΡΠ΅,
Π― Π½Π΅ ΡΠ°ΠΊ Ρ ΠΎΡΠΎΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ Ρ gradle ΠΈ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ Ρ ΠΌΠΎΠ³Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ RN Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΡΠ΅ΡΠΊΠΈ ΠΏΡΡΠΌΠΎ ΠΈΠ· ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Π²ΠΌΠ΅ΡΡΠΎ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. Π¨Π°Π³ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ½ΡΠ» Π±Π΅Π·ΡΡΠΏΠ΅ΡΠ½ΠΎ:
react-native-cli
v1.10.0
Π²Π½ΡΡΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ frescoandroid-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 Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠΈΡ Π·Π° ΠΎΡΠ»Π°Π΄ΠΊΡ. ΠΠ°ΠΊ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΠΏΠΎΠ½ΠΈΠΆΠ°ΡΡΡΡ Π΄ΠΈΡΠΊΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ? Π― Π±Π΅Π·ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π» ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ:
1-Π΅ ΠΌΠ΅ΡΡΠΎ Π² 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
Π½ΠΎ ΠΎΠ½ ΡΠΎΠΆΠ΅ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π»:
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 Π― Π½Π΅ Π·Π½Π°Ρ. Π― ΠΎΡΠΊΠ»ΡΡΠΈΠ» ΡΡΠΎ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅.
ΠΏΠΈΠ½Π³ @oprisnik
ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° React Native: https://github.com/facebook/react-native/blob/6c0f73b3223968448bb186b82f06f6819068a21d/ReactAndroid/src/main/java/com/facebook/react/shellConf/MainPackjack/react/shellConf.
ΠΠ΅ ΡΠ²Π΅ΡΠ΅Π½, ΠΊΠ°ΠΊ ΡΡΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ RN, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π».
@oprisnik ΠΡΡΡ Π»ΠΈ ΠΏΠ»Π°Π½Ρ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ?
Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΡΠΎΡ Π²ΡΠΏΡΡΠΊ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΡΠ΅ΠΏΠΎ RN. ΠΠΎΠ½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠΎΡΡ Π΄ΠΈΡΠΊΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π±Π΅Π· ΡΠΎΠΌΠ½Π΅Π½ΠΈΡ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ Π΄Π»Ρ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΡ Π·Π°ΡΡΠ°Ρ Π½Π° ΠΏΠ°ΠΌΡΡΡ, ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΈ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ±ΠΎΠ΅Π² ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ Π±ΠΎΠ»ΡΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ RN Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ΅ΡΠ°ΡΡ ΡΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ Π²ΡΠ±ΠΈΡΠ°ΡΡ, Ρ ΠΎΡΡΡ Π»ΠΈ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΠ½ΠΈΠΆΠ°ΡΡΡΡ Π΄ΠΈΡΠΊΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π½Π΅Ρ, Π² ΡΠΎΡΠΌΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° / ΡΠ²ΠΎΠΉΡΡΠ²Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΌΠΎΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Π³Π΄Π΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΠ»Π°Π½ΠΎΠ² ΡΡΠ°ΠΆΠ΅ΠΉ, ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ Π²ΡΡΠΎΠΊΠΎΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΌΠ°ΡΡΡΠ°Π± ΠΏΠ»Π°Π½Π° ΡΡΠ°ΠΆΠ°. Π― Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΠΈ Π΅ΡΠ»ΠΈ ΡΡΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ Ρ ΠΌΠ΅Π½ΡΡΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΌΠΎΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ»ΠΈ Π½ΠΈΠ·ΠΊΠΈΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ, Ρ Π·Π°Π³ΡΡΠΆΠ°Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠ΅Π½ΡΡΠ΅Π³ΠΎ ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ.
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ resizeMethod
ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ Π·Π° <Image/>
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ , ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ scale
ΠΈ resize
. RN currenlty Π½Π΅ ΡΠΎΠ±Π»ΡΠ΄Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ scale
ΡΡΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅, Ρ Π΄ΡΠΌΠ°Ρ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡΠΊΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠ½ΠΈΠΆΠ°ΡΡΡΡ Π΄ΠΈΡΠΊΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π΅Π³ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ Π½Π° resize
.
resizeMethod
ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π°Π²ΡΠΎ.
resize
: ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠ΅ΡΠ΅Π΄ Π΅Π³ΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. ΠΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΌΠ΅ΡΡΠΎscale
ΠΊΠΎΠ³Π΄Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅.
scale
: ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΈΠ»ΠΈ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ Π² ΠΌΠ°ΡΡΡΠ°Π±Π΅. ΠΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρresize
,scale
Π±ΡΡΡΡΠ΅Π΅ (ΠΎΠ±ΡΡΠ½ΠΎ Ρ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΌ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ΠΌ) ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²Π°. ΠΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, Π΅ΡΠ»ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΏΡΠΎΡΠΌΠΎΡΡΠ°. ΠΠ³ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, Π΅ΡΠ»ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ Π²ΠΈΠ΄.
ΠΠ½Π΅ Π±Ρ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ ΡΠ·Π½Π°ΡΡ Π²Π°ΡΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅ ΠΎΠ± ΡΡΠΎΠΌ
@clytras ΠΠ°ΠΊ Π²Ρ ΡΠΊΠ°Π·Π°Π»ΠΈ, ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Π½Π° ΡΡΠ΅ΡΠΊΠ΅ Π±Π΅Π· ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΡ ΠΏΡΠΈΡΠΈΠ½. (ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Ρ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΡΡΠ΅ΡΠΊΠΈ) Π’Π°ΠΊ ΡΡΠΎ Ρ Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ ΠΈΠΌΠ΅Π΅Ρ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΊ RN.
@sunnylqm, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΡΠ΅ΡΠΊΠΈ Π±Π΅Π· ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΡ ΠΏΡΠΈΡΠΈΠ½, Π½ΠΎ RN Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡΡΠ°Π²ΠΈΡΡ Π²ΡΠ±ΠΎΡ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ / ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ΅ΡΠΊΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ.
Π’Π°ΠΊΠΆΠ΅ Π½Π΅ Π·Π°Π±ΡΠ²Π°ΠΉΡΠ΅, ΡΡΠΎ ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² iOS, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΠΎ-ΡΠΎ Ρ ΡΡΠΈΠΌ ΡΠ΄Π΅Π»Π°ΡΡ, ΠΈ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ fresco ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² react native, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ββΠΊΠΎΠ½Π΅ΡΠ½ΡΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ RN.
ΠΡΡΠ°ΡΠΈ, ΠΌΠ½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Fresco 2.0.0 (ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ Π²Π΅ΡΠ²Ρ) Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ RN 0.61.2 ΠΈ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΠΏΠΎΠ½ΠΈΠΆΠ°ΡΡΡΡ Π΄ΠΈΡΠΊΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ, ΠΏΡΠΎΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π² ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΏΠΎΠ½ΠΈΠΆΠ°ΡΡΠ΅ΠΉ Π΄ΠΈΡΠΊΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ Π² DecodeProducer.java, ΠΊΠ°ΠΊ ΠΈ Π²Ρ.
Π― ΡΠΎΠ·Π΄Π°Π» ΡΠ°ΠΉΠ» local.properties
Π²Π½ΡΡΡΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ fresco ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Android NDK Revision 19c x86_64 Π΄Π»Ρ 64-ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠΉ
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
Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²Π½ΡΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° getPackages
ΠΏΡΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ MainReactPackage
, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ Π΄Π»Ρ ΠΌΠ΅Π½Ρ Π½ΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ
Π²Π΅ΡΡΠΈΡΡ
RN 0.61, Π½ΠΈ Π² RN 0.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),
...
));
}
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ ΡΡΠΎ-ΡΠΎ Π΄Π΅Π»Π°Ρ Π½Π΅ ΡΠ°ΠΊ, ΠΈ ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ Ρ Π½ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ> = 0.60, ΠΊΠΎΡΠΎΡΠ°Ρ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ°ΠΉΠ» PackageList.java
Π²Π½ΡΡΡΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° <project>/android/app/build/generated/rncli/src/main/java/com/facebook/react/
ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ MainReactPackage
ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ
-Π»ΠΈΠ±ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΠΈ Ρ Π½Π΅ Π²ΠΈΠΆΡ ΡΠΏΠΎΡΠΎΠ±Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ, Π½ΠΎ Ρ ΠΏΠΎΠΏΡΡΠ°Π»ΡΡ Π²ΡΡΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ MainReactPackage
Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ fresco, ΠΈ ΡΡΠΎ ΡΠΎΠΆΠ΅ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ.
ΠΠ°ΠΌ Π½ΡΠΆΠ΅Π½ ΡΠΈΡΡΡΠΉ ΠΈ Π·Π°Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ fresco lib Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ Π²Π½ΡΡΡΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Android Π΄Π»Ρ React Native.
ΠΠΎΡΠ»Π΅ ΠΏΡΠΎΡΡΠ΅Π½ΠΈΡ https://frescolib.org/docs/resizing.html ΠΈ, Π΅ΡΠ»ΠΈ Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΏΠΎΠ½ΡΠ», downsampling
Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ resizing
. ΠΡΠ°ΠΊ, @clytras, Ρ Π΄ΡΠΌΠ°Ρ, Π²Ρ ΠΏΡΠ°Π²Ρ, Π΅ΡΠ»ΠΈ resizeMethod ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π½Π° ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΎΠ½ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠ½ΠΈΠΆΠ°ΡΡΡΡ Π΄ΠΈΡΠΊΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ.
ΠΠΎΠ΄ Π² RN ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ½Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ https://github.com/facebook/react-native/blob/aee88b6843cea63d6aa0b5879ad6ef9da4701846/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageLView5# ΠΎΠ½ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² 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
ΠΈΡΡΠΈΠ½Π½Ρ, Π²ΡΠ±ΠΎΡΠΊΠ° Π±ΡΠ΄Π΅Ρ ΡΠΌΠ΅Π½ΡΡΠ΅Π½Π°, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ resizeOptions ΡΠ°Π²Π½ΠΎ null.
https://github.com/facebook/fresco/blob/master/imagepipeline-base/src/main/java/com/facebook/imagepipeline/transcoder/DownsampleUtil.java#L56
Π’Π°ΠΊ ΡΡΠΎ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΈ ΠΊΠΎΠ΄ΠΎΠΌ. Π Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ, Ρ
ΠΎΡΠΈΠΌ Π»ΠΈ ΠΌΡ ΠΏΠΎΠ½ΠΈΠΆΠ°ΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. (ΡΠ΅ΠΉΡΠ°Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΡΡΡ 2 Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠ½ΡΠΈΠ³Π°ΠΌΠΈ ) @oprisnik
Π₯ΠΎΡΠΎΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ° ΡΠ°ΠΌ @sunnylqm. Π― Π½Π°ΡΠ°Π» ΠΈΡΠΊΠ°ΡΡ ΠΈ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ RN Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° <Image/>
ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠΈ Π²Π΅ΡΠΈ, Π½ΠΎ Π²Ρ ΠΏΡΠ΅Π²Π·ΠΎΡΠ»ΠΈ ΠΌΠ΅Π½Ρ!
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ°ΠΊΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π»ΡΠ±Π°Ρ ΡΡΠ΅ΡΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΏΠΎΠ½ΠΈΠΆΠ°ΡΡΡΡ Π΄ΠΈΡΠΊΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ resizeOptions
Π½Π΅ ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ; ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ, ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ Π΄Π»Ρ resizeMethod
ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ resize
(ΠΈΠ»ΠΈ auto
ΠΈ Π΄Π»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ
ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ), ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Π² https://github.com/facebook/react- native / blob / aee88b6843cea63d6aa0b5879ad6ef9da4701846 / ReactAndroid / src / main / java / com / facebook / response / views / image / ReactImageView.java # L606 shouldResize
function, ΠΈΠ»ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ resizeMethod
Π²Π°ΡΠΈΠ°Π½Ρ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΆΠ°ΡΡΠ΅ΠΉ Π΄ΠΈΡΠΊΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ.
ΠΡΠΈΠ²Π΅Ρ, ΠΏΠΎΡ ΠΎΠΆΠ΅, Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ Π±ΡΠ»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΏΠΎ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΡΡΡΠ°Π½Π΅Π½Π° ΠΈΠ»ΠΈ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°? ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΊΡΡΡΠ°, Π΅ΡΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΊΠ°ΠΊ Β«ΠΎΡΠΈΠ±ΠΊΠ°Β» ΠΈΠ»ΠΈ Β«ΡΠ»ΡΡΡΠ΅Π½ΠΈΠ΅Β», ΠΈ Ρ ΠΎΡΡΠ°Π²Π»Ρ Π΅Π΅ ΠΎΡΠΊΡΡΡΠΎΠΉ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π°Ρ Π²ΠΊΠ»Π°Π΄.
@clytras Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Ρ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎ ΡΠ²ΠΎΠ΅ΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ?
@ club9822 ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π΄Π²ΠΎΠΈΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΡΡΠ΅ΡΠΊΠΈ ΠΈΠ· ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ½ΠΈΠΆΠ°ΡΡΠ΅ΠΉ Π΄ΠΈΡΠΊΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΊ Ρ ΠΎΠΏΠΈΡΡΠ²Π°Ρ Π·Π΄Π΅ΡΡ https://github.com/facebook/fresco/issues/2397#issuecomment -541802753
ΠΡΡΡ Π»ΠΈ ΠΎΠ±Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΡΡ Π±Π΅Π· ΠΏΠ΅ΡΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ?
@CaptainN ΠΠ΅Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΡΠΎΡΠ΅ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ΅ΠΊΡΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠΌ ΠΈ ΡΡΠΎΠΌΠΈΡΠ΅Π»ΡΠ½ΡΠΌ, Π½ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ Π²ΠΎΠΏΡΠΎΡ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄. Π‘Π»Π΅Π΄ΠΈΡΠ΅ Π·Π° ΠΌΠΎΠΈΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ Π² ΡΡΠΎΠΌ Π²ΡΠΏΡΡΠΊΠ΅, ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊ Π²Ρ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΠ΅.
@clytras ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅ Π² new PackageList(this, config)
Π Ρ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°Π», Π²ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ, ΠΊΠ°ΠΊ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π»ΠΎΡΡ. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ Π»ΠΎΠ³ΠΈΠΊΠ° Π·Π΄Π΅ΡΡ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π»Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ https://github.com/facebook/fresco/blob/v2.0.0/imagepipeline/src/main/java/com/facebook/imagepipeline/producers/DecodeProducer.java#L158 -L169, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π±ΡΠ»ΠΎ false
Π’Π°ΠΊ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ, ΠΏΡΠ°Π²Π΄Π°?
- if (mDownsampleEnabled || !statusHasFlag(status, Consumer.IS_RESIZING_DONE))
+ if (mDownsampleEnabled && !statusHasFlag(status, Consumer.IS_RESIZING_DONE))
@oprisnik
@sunnylqm Π― Π½Π°Ρ ΠΎΠΆΡΡΡ Π²Π΄Π°Π»ΠΈ ΠΎΡ ΠΎΡΠΈΡΠ° ΠΈ ΡΠ΅ΠΉΡΠ°Ρ Π½Π΅ ΠΌΠΎΠ³Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π½ΠΎ ΠΏΠΎΠΌΠ½Ρ, ΡΡΠΎ Π½Π΅ ΡΠΌΠΎΠ³ Π½Π°ΠΉΡΠΈ ΡΠΏΠΎΡΠΎΠ± ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ²ΡΠ·ΠΈ _RN> = 60_. Π₯ΠΎΡΡ Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½. Π£ ΠΌΠ΅Π½Ρ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ Π΄Π°ΠΆΠ΅ Π΄Π»Ρ ΡΡΠ°ΡΡΡ Π²Π΅ΡΡΠΈΠΉ _RN_. ΠΡΠΎΠ²Π΅ΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΡ Π΄Π½Π΅ΠΉ, ΠΊΠΎΠ³Π΄Π° Π²Π΅ΡΠ½ΡΡΡ ΠΈΠ· ΠΎΡΠΏΡΡΠΊΠ°.
Π― Π²Π΅ΡΡ, ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ OR Π½Π° AND ΡΠ΅ΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΏΠΎΠ½ΠΈΠΆΠ°ΡΡΠ°Ρ Π΄ΠΈΡΠΊΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π²ΡΠ΅Π³Π΄Π°, Π΅ΡΠ»ΠΈ Π² ΡΡΠ°ΡΡΡΠ΅ Π½Π΅Ρ ΡΠ»Π°Π³Π° IS_RESIZING_DONE
ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΡ mDownsampleEnabled
. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊ, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠ°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΡΠ΅ΡΠΊΠΈ, ΠΎΡΠΊΠ»ΡΡΠ°ΡΡΠ°Ρ Π΄Π°ΡΠ½ΡΡΠΌΠΏΠ», Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π° ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π° Π² fresco.
@clytras Π― ΠΏΠΎΠ»ΡΡΠ°Ρ Π²ΡΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ Ρ ΡΡΡΠ°ΡΠ΅Π²Π°Π½ΠΈΠ΅ΠΌ Gradle ΠΈ Π²ΡΠ΅ΠΌ ΠΎΡΡΠ°Π»ΡΠ½ΡΠΌ. ΠΡΡΡ Π»ΠΈ ΡΠ°Π½Ρ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ±ΡΠ°Π½Π½ΡΠΉ Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» (ΠΈ ΡΠΊΠ°Π·Π°ΡΡ ΠΌΠ½Π΅, Π³Π΄Π΅ Π΅Π³ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ)? Π― Π±ΡΠ» Π±Ρ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΈΠ·Π½Π°ΡΠ΅Π»Π΅Π½.
ΠΡ , Π·Π°Π±ΡΠ΄Ρ ΠΎΠ± ΡΡΠΎΠΌ. ΠΡΡΠ±ΠΎ Π΄Π°ΠΆΠ΅ ΡΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ. Π― ΡΠ°Π·Π±Π΅ΡΡΡΡ ΠΈ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΠΏΠΎΡΡΠ°Π²Π»Ρ ΠΏΠΈΠ°Ρ.
@CaptainN, ΡΡΠΎ Π½Π΅ Π³ΡΡΠ±ΠΎ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Ρ ΡΠ΄Π΅Π»Π°Π» ΡΡΠΎ ΠΈ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠ½Π΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠ°ΡΡΠΎΠ²ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ ΠΏΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΈ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Fresco.
ΠΡΠ°ΠΊ, Π²ΠΎΡ ΠΎΠ½ΠΎ: https://github.com/clytras/RN061FrescoBuild
Π£ Π½Π΅Π³ΠΎ Π΅ΡΡΡ RN 0.61.5
. Π Π΅ΠΏΠΎ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ. ΠΠ½ ΠΊΠ»ΠΎΠ½ΠΈΡΡΠ΅Ρ Fresco, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ v2.1.0
ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΠ°ΡΡ ΠΊ DecodeProducer.java
ΡΡΠΎΠ±Ρ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΠΏΠΎΠ½ΠΈΠΆΠ°ΡΡΠ΅ΠΉ Π΄ΠΈΡΠΊΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡ Android NDK ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ°ΠΉΠ» libraries/fresco/local.properties
. ΠΡΠ΅ ΡΡΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² ΡΠΈΠ΄ΠΌΠΈ.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ fresco lib Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡ RN> = 0.60 (_ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°ΡΡΠ΅ Π²Π΅ΡΡΠΈΠΈ_), Π΅ΡΠ»ΠΈ Π±ΡΠ΄Π΅ΡΠ΅ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌ ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΡΠΌ ΠΏΡΡΠΆΠΈ.
@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;
}
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΊΠΎΠ΄ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈ ΠΎΡΠΊΠ»ΡΡΠΈΡ ΠΏΠΎΠ½ΠΈΠΆΠ°ΡΡΡΡ Π΄ΠΈΡΠΊΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ. ΠΡΠ»ΠΈ ΠΌΡ ΡΠ΄Π°Π»ΠΈΠΌ ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ .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 ΠΠΎΠ»ΡΡΠΎΠ΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. Π― ΠΈΡΠΏΡΡΡΠ²Π°Ρ ΡΡΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Expo, ΠΈ Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Ρ Π½Π΅ΡΠ΅ΡΠΏΠ΅Π½ΠΈΠ΅ΠΌ ΠΆΠ΄Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½Π°ΠΉΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ ΠΌΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ-ΡΠΎΠ΄Π½ΠΎΠΉ-cli: 2.0.1
ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ-ΡΠΎΠ΄Π½ΠΎΠΉ: 0.61.2
ΠΠ΅Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅. ΠΠ°Π²Π½ΠΎ Π½Π΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π»ΡΡ Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. ΠΠΎ Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΠ»ΡΡ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ΅Ρ ΡΠ°Π·Π½ΡΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ( @ 1x , @ 2x , @ 3x) Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ.
@enguerranws ββΠ£ ΠΌΠ΅Π½Ρ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅Ρ ΠΎΠΏΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Expo. @gorvinsky Π― ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π» Π΅Π³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ RN 0.61.5, ΠΈ ΠΎΠ½ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ. ΠΡΠΎ Π±ΡΠ»ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ΅, ΡΡΠΎ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π», ΠΊΠΎΠ³Π΄Π° Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.
Π― ΡΠΎΠ·Π΄Π°Π» ΡΠ°Π±Π»ΠΎΠ½ response -native-community / cli Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ RN 0.61.5 ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡΠΌΠΈ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ Fresco ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΎΠ². ΠΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ Π±ΡΡΡΡΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ RN Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Fresco ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠ½ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Android NDK Revision 21, ΠΈ Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π» Π΅Π³ΠΎ Π½Π° macOS ΠΈ Windows, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ yarn 1.21
.
Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ 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 . ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ / ΠΈΡΠΏΡΠ°Π²Π»ΡΡΡ Fresco Ρ ΠΏΠΎΠΌΠΎΡΡΡ yarn fresco-setup
Π° Π·Π°ΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Android NDK ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ android/libraries/fresco/local.properties
Ρ ΠΏΡΡΠ΅ΠΌ Android NDK.
ΠΡΠ° ΡΠΈΠΊΡΠ°ΡΠΈΡ ΠΈΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠΎ? (ΠΏΠΎΠΊΠ° Π½Π΅ Π²ΡΠΏΡΡΠ΅Π½ΠΎ)
https://github.com/facebook/react-native/commit/f535c8b4bb4474ffe0a0765270cbca8d839deca8
Π ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ PipelineConfig Ρ Π°ΡΡΠΈΠ±ΡΡΠΎΠΌ setDownsampleEnabled.
@enguerranws ββΠ£ ΠΌΠ΅Π½Ρ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅Ρ ΠΎΠΏΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Expo. @gorvinsky Π― ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π» Π΅Π³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ RN 0.61.5, ΠΈ ΠΎΠ½ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ. ΠΡΠΎ Π±ΡΠ»ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ΅, ΡΡΠΎ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π», ΠΊΠΎΠ³Π΄Π° Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.
Π― ΡΠΎΠ·Π΄Π°Π» ΡΠ°Π±Π»ΠΎΠ½ response -native-community / cli Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ RN 0.61.5 ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡΠΌΠΈ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ Fresco ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΎΠ². ΠΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ Π±ΡΡΡΡΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ RN Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Fresco ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠ½ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Android NDK Revision 21, ΠΈ Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π» Π΅Π³ΠΎ Π½Π° macOS ΠΈ Windows, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ
yarn 1.21
.Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ 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 . ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ / ΠΈΡΠΏΡΠ°Π²Π»ΡΡΡ Fresco Ρ ΠΏΠΎΠΌΠΎΡΡΡ
yarn fresco-setup
Π° Π·Π°ΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Android NDK ΠΈ ΡΠΎΠ·Π΄Π°ΡΡandroid/libraries/fresco/local.properties
Ρ ΠΏΡΡΠ΅ΠΌ Android NDK.
ΠΡΡΡ Π»ΠΈ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅?
@kalmahik
ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΠ°ΠΊ. (ΠΠΎΠΉ RN - v0.61.4)
ΠΡΠΎ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΏΠ°ΡΡ @clytras ΠΊ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΡ.
Π ΠΎΠ½ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠΈΠΌΡΠ»ΡΡΠΎΡ Android. ΠΡΠ΅Π³Π΄Π° ΡΠ΅ΡΡΠΈΡΡΡ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΡ
ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ
. π’
"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
- ΡΡΠΎ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ CLI ΠΏΠ°ΠΊΠ΅ΡΠ° NPM.
@JeffGuKang, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² package.json
, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ°Π±Π»ΠΎΠ½Π°.
@CaptainN Π― Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ ΡΠ°ΠΊ ΠΏΡΠΎΡΡΠΎ, Ρ ΠΎΡΡ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΠ΅ Π½Π΅ Π±ΡΠ»ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ.
@clytras ΠΎΠΉ ΡΡΠΎΡ ΠΎΠ΄ΠΈΠ½ ? Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ)
@kalmahik
ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΠ°ΠΊ. (ΠΠΎΠΉ RN - v0.61.4)
ΠΡΠΎ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΏΠ°ΡΡ @clytras ΠΊ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΡ.
Π ΠΎΠ½ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠΈΠΌΡΠ»ΡΡΠΎΡ Android. ΠΡΠ΅Π³Π΄Π° ΡΠ΅ΡΡΠΈΡΡΡ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ . π’
- ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΊΡΠΈΠΏΡΡ Π² 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
- Π‘ΠΊΠ°ΡΠ°ΡΡ android ndk
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Π²Π΅ΡΡΠΈΡ 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
- ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ android
ΠΡΠΎ Π²ΡΠ΅.
yarn android
ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ @clytras
Π― ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Fresco ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΡΠ»Π΅Π΄ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΡ @clytras . Π― ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡ Π΅Π³ΠΎ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡ RN (v0.59.9)
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΠΎΠΏΡΡΠ°Π»ΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Fresco Config Π² MainApplication.java, Π½ΠΎ ΡΠ°ΠΌ Π½Π΅ ΠΏΠΎΠ²Π΅Π·Π»ΠΎ
@ ravali121 ΠΡΠΈ ΡΠ°Π³ΠΈ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ RN> = 0.60.x, Π° Π½Π΅ Π΄Π»Ρ RN ββ0.59 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π½Π½ΠΈΡ
Π²Π΅ΡΡΠΈΠΉ. ΠΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°ΡΡΡ
Π²Π΅ΡΡΠΈΠΉ RN, Π½ΠΎ ΡΠ°Π³ΠΈ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Fresco Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π²Π΅ΡΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ ΡΡΠΎΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ RN. Π― ΠΏΡΠΎΠ²Π΅ΡΡΡ Fresco 2.1.0 Π΄Π»Ρ RN ββ0.61, Π° RN 0.59 ΠΈΠΌΠ΅Π΅Ρ Π΄ΡΡΠ³ΡΡ Π²Π΅ΡΡΠΈΡ ΠΈ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠ°ΡΡ, Ρ
ΠΎΡΡ ΠΏΠ°ΡΡ Π½Π΅ Π½ΡΠΆΠ΅Π½, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π²ΡΡΡΠ½ΡΡ, ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π² DecodeProducer.java
. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Gradle Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ.
Π₯ΠΎΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΡΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ 0,59, Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ Π²Π°ΠΌ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π²Π°ΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΡ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π΄ΠΎ 0,61 (ΠΈΠ»ΠΈ Π»ΡΡΡΠ΅ 0,62).
ΠΡΠΈΠ²Π΅Ρ! ΠΡΡΡ Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ETA Π΄Π»Ρ ΡΠ»ΠΈΡΠ½ΠΈΡ ΠΏΠ°ΡΡΠ°? (Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ @clytras Π·Π°
@FRizzonelli, ΠΏΠ°ΡΡ - ΡΡΠΎ ΠΎΠ±Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΡΡ, Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ Π½Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΎΡΡΠ°Π΅ΡΡΡ ΠΎΡΠΊΡΡΡΠΎΠΉ ΡΠ°ΠΊ Π΄ΠΎΠ»Π³ΠΎ.
ΠΠ½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΏΠ°ΡΡ ΠΈ ΡΠ°Π±Π»ΠΎΠ½ @react-native-community/cli
ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π΅Π³ΠΎ Π΄ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ RN.
@clytras Π― ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ :( ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΠΉΡΠ°Ρ Ρ ΠΏΡΡΠ°ΡΡΡ Π½Π°ΡΡΡΠΎΠΈΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ POC Ρ react-native-web Π½Π° Expo, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π΄Π»Ρ Android. Π Π΄Π»Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ Ρ Π±Ρ Π½Π΅ Ρ ΠΎΡΠ΅Π» ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ. ΠΠΎ ΠΡΠΌΠ°Ρ Π½Π°Π΄ΠΎ :(
@clytras Π― ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ :( ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΠΉΡΠ°Ρ Ρ ΠΏΡΡΠ°ΡΡΡ Π½Π°ΡΡΡΠΎΠΈΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ POC Ρ react-native-web Π½Π° Expo, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π΄Π»Ρ Android. Π Π΄Π»Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ Ρ Π±Ρ Π½Π΅ Ρ ΠΎΡΠ΅Π» ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ. ΠΠΎ ΠΡΠΌΠ°Ρ Π½Π°Π΄ΠΎ :(
ΠΠ°ΠΊ Π½Π°ΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΡΠΌΠ°ΡΠ° jpg
Π²ΠΌΠ΅ΡΡΠΎ png
? Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ ΡΠ΅ΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
@clytras Π― ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ :( ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΠΉΡΠ°Ρ Ρ ΠΏΡΡΠ°ΡΡΡ Π½Π°ΡΡΡΠΎΠΈΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ POC Ρ react-native-web Π½Π° Expo, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π΄Π»Ρ Android. Π Π΄Π»Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ Ρ Π±Ρ Π½Π΅ Ρ ΠΎΡΠ΅Π» ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ. ΠΠΎ ΠΡΠΌΠ°Ρ Π½Π°Π΄ΠΎ :(
ΠΠ°ΠΊ Π½Π°ΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΡΠΌΠ°ΡΠ°
jpg
Π²ΠΌΠ΅ΡΡΠΎpng
? Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ ΡΠ΅ΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΠΎΠΆΠ΅ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΈ ΠΌΠ½Π΅ Π½ΡΠΆΠ΅Π½ png Π΄Π»Ρ Π°Π»ΡΡΠ°-ΡΠ»ΠΎΡ :(
Π£ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ RN 0.63.4.
Π Π°Π·ΠΌΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ 960 x 13983 ΡΠΈΠ»ΡΠ½ΠΎ Π·Π°Π½ΠΈΠΆΠ΅Π½, ΡΠ΅ΠΊΡΡ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ ΠΏΠ»ΠΎΡ
ΠΎ ΡΠΈΡΠ°Π΅ΡΡΡ.
Π Π°Π·ΠΌΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ 680 X 2538 ΡΠ°ΠΊΠΆΠ΅ ΡΠΌΠ΅Π½ΡΡΠ΅Π½, Π½ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΡΠΉ.
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Image.getSize, ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΠΏΠΎ Π½Π΅ΠΌΡ Π²ΡΡΠΎΡΡ (ΡΠΈΡΠΈΠ½Π° 100%)
ΠΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ jpg.
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΌΠ΅ΡΠΎΠ΄ @clytras Ρ gradle 3.5.4, NDK 21.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 - Π½Π΅Ρ.
ΠΡΠΈΠ²Π΅Ρ Π²ΠΌΠ΅ΡΡΠ΅,
Π― ΠΏΠ΅ΡΠ΅ΠΏΡΠΎΠ±ΠΎΠ²Π°Π» Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΡΠΎΠΉ Π²Π΅ΡΠΊΠΈ, Π½ΠΎ Ρ RN 0.64.2 ΠΈ Fresco 2.5.0.
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ NDK v22.1.7171670 ΠΈ gradle 4.2.1.
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Ρ Π·Π°ΡΡΡΡΠ» Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΎΡΠΈΠ±ΠΊΠ΅ (ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ²ΡΠ·Π°Π½Π° Ρ ΡΠΌΡΠ»ΡΡΠΎΡΠΎΠΌ Android?):
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 Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ FastImage Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ (ΡΡΠ΅Π±ΡΠ΅ΡΡΡ) Π΄Π°Π»ΠΎ ΠΌΠ½Π΅ ΠΏΠ»ΠΎΡ ΠΎΠ΅ ΠΌΠ΅ΡΡΠ°Π½ΠΈΠ΅.
ΠΠΆΠΈΠ΄Π°Ρ, ΡΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΡΠΏΡΠ°Π²ΠΈΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠ°ΠΊ Image, ΡΠ°ΠΊ ΠΈ FastImage.
if(height < blurSize){
return <Image/>
}else{
return <FastImage/>
}
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
@CaptainN, ΡΡΠΎ Π½Π΅ Π³ΡΡΠ±ΠΎ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Ρ ΡΠ΄Π΅Π»Π°Π» ΡΡΠΎ ΠΈ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠ½Π΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠ°ΡΡΠΎΠ²ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ ΠΏΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΈ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Fresco.
ΠΡΠ°ΠΊ, Π²ΠΎΡ ΠΎΠ½ΠΎ: https://github.com/clytras/RN061FrescoBuild
Π£ Π½Π΅Π³ΠΎ Π΅ΡΡΡ
RN 0.61.5
. Π Π΅ΠΏΠΎ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ. ΠΠ½ ΠΊΠ»ΠΎΠ½ΠΈΡΡΠ΅Ρ Fresco, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρv2.1.0
ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΠ°ΡΡ ΠΊDecodeProducer.java
ΡΡΠΎΠ±Ρ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΠΏΠΎΠ½ΠΈΠΆΠ°ΡΡΠ΅ΠΉ Π΄ΠΈΡΠΊΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡ Android NDK ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ°ΠΉΠ»libraries/fresco/local.properties
. ΠΡΠ΅ ΡΡΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² ΡΠΈΠ΄ΠΌΠΈ.ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ fresco lib Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡ RN> = 0.60 (_ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°ΡΡΠ΅ Π²Π΅ΡΡΠΈΠΈ_), Π΅ΡΠ»ΠΈ Π±ΡΠ΄Π΅ΡΠ΅ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌ ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΡΠΌ ΠΏΡΡΠΆΠΈ.