Fresco: НизкоС качСство изобраТСния ΠΏΡ€ΠΈ использовании<image/> ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π° RN&gt; = 0,57 (Fresco&gt; = 1.10.0)

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 22 Π°Π²Π³. 2019  Β·  57ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: facebook/fresco

ОписаниС

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 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 Π½Π΅ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€Π΅Π½Π½Ρ‹Π΅ ошибки ссылок. Π’Π°ΠΊ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ: это ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌ эффСктом Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠ³ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ.

  • ВСрсия фрСски:> = 1.10.0
  • ВСрсия ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹: RN> = 0.57, всС вСрсии Android

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

@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 (_ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ старыС вСрсии_), Ссли Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ инструкциям ΠΈ сцСнариям пряТи.

ВсС 57 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΏΠΎΡ…ΠΎΠΆΠ΅, Π² послСднСС врСмя Π½Π΅ Π±Ρ‹Π»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ активности ΠΏΠΎ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° устранСна ΠΈΠ»ΠΈ всС Π΅Ρ‰Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ внимания сообщСства? Π­Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚Π°, Ссли большС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… дСйствий. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΊΠ°ΠΊ «ошибка» ΠΈΠ»ΠΈ Β«ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅Β», ΠΈ я ΠΎΡΡ‚Π°Π²Π»ΡŽ Π΅Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ. Бпасибо Π·Π° ваш Π²ΠΊΠ»Π°Π΄.

КакиС вСрсии 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 для компиляции фрСски прямо ΠΈΠ· источника вмСсто Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π¨Π°Π³ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я прСдпринял Π±Π΅Π·ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ:

  1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ RN 0.57, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ react-native-cli
  2. ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ fresco lib Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°
  3. ΠžΡ„ΠΎΡ€ΠΌΠΈΡ‚ΡŒ Π·Π°ΠΊΠ°Π· Π² Π²Π΅Ρ‚ΠΊΡƒ v1.10.0 Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ fresco
  4. Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ 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
image

ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π° субдискрСтизация v2.0.0 Π²ΠΈΡ‚Ρ€ΠΈΠ½Π°
image

@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.

https://frescolib.org/docs/configure-image-pipeline.html

@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. ВсСгда Ρ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΡŽ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… устройствах. 😒

  1. Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ скрипты Π² 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"
  1. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ‚Ρ‡ΠΈ / 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            
  1. ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ android / settings.gradle

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ includeBuild ('libraries/fresco') ΠΏΠ΅Ρ€Π΅Π΄ include ':app'

rootProject.name = 'YOURPROJECT'
...
includeBuild ('libraries/fresco') 

include ':app'

  1. android / build.gradle

Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ использования gradle - 3.4.1

dependencies {
  ...
  classpath("com.android.tools.build:gradle:3.4.1")
  ...
}
  1. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ скрипт

yarn fresco-setup

  1. Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ android ndk

Π― использовал Π²Π΅Ρ€ΡΠΈΡŽ r21.

https://developer.android.com/ndk/downloads

  1. Π Π°Π·Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈ пСрСмСститС 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
  1. ЗапускаСм android

Π­Ρ‚ΠΎ всС.

yarn android ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ качСство большого изобраТСния.

Бпасибо @clytras

https://github.com/clytras/react-native-fresco

@JeffGuKang
Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° file-patch ?

Π§Ρ‚ΠΎ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ этому ΡΠ»ΠΈΡ‚ΡŒΡΡ? ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ эти ΠΏΠ°Ρ‚Ρ‡ΠΈ, Π° Π½Π΅ просто ΠΈΡ… ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ (Ссли это Π½Π΅ просто Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ограничСния - я ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ понимаю это, Π½Π΅ ΠΏΡ‹Ρ‚Π°ΡΡΡŒ Π±Ρ‹Ρ‚ΡŒ настойчивым)?

@kalmahik file-patch - это срСдство исправлСния CLI ΠΏΠ°ΠΊΠ΅Ρ‚Π° NPM.

@JeffGuKang, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ измСнСния Π² package.json , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ сцСнариСв установки шаблона.

@CaptainN Π― Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊ просто, хотя Ρƒ мСня Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π»ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹.

@clytras ΠΎΠΉ этот ΠΎΠ΄ΠΈΠ½ ? Бпасибо)

@kalmahik
ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Ρ‚Π°ΠΊ. (Мой RN - v0.61.4)
Π­Ρ‚ΠΎ способ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ‚Ρ‡ @clytras ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ.
И ΠΎΠ½ большС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ симулятор Android. ВсСгда Ρ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΡŽ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… устройствах. 😒

  1. Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ скрипты Π² 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"
  1. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ‚Ρ‡ΠΈ / 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            
  1. ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ android / settings.gradle

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ includeBuild ('libraries/fresco') ΠΏΠ΅Ρ€Π΅Π΄ include ':app'

rootProject.name = 'YOURPROJECT'
...
includeBuild ('libraries/fresco') 

include ':app'
  1. android / build.gradle

Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ использования gradle - 3.4.1

dependencies {
  ...
  classpath("com.android.tools.build:gradle:3.4.1")
  ...
}
  1. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ скрипт

yarn fresco-setup

  1. Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ android ndk

Π― использовал Π²Π΅Ρ€ΡΠΈΡŽ r21.

https://developer.android.com/ndk/downloads

  1. Π Π°Π·Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈ пСрСмСститС 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
  1. ЗапускаСм android

Π­Ρ‚ΠΎ всС.

yarn android ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ качСство большого изобраТСния.

Бпасибо @clytras

https://github.com/clytras/react-native-fresco

Π― столкнулся с этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Fresco ΠΈΠ· исходного ΠΊΠΎΠ΄Π°, слСдуя ΡΡ†Π΅Π½Π°Ρ€ΠΈΡŽ @clytras . Π― ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽ Π΅Π³ΠΎ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ RN (v0.59.9)

Screen Shot 2020-05-31 at 1 11 34 PM

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, попытался Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ 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/> }

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ