Android NDK рдкрд░ рдУрдкрди-рд╕реЛрд░реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг

рдирдорд╕реНрддреЗ, рд╣рдмрд░рд▓реБрдбреА!

рдПрдВрдбреНрд░реЙрдЗрдб NDK рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореИрдВ рдПрдВрдбреНрд░реЙрдЗрдб NDK рдкрд░ рдореМрдЬреВрджрд╛ рд▓рд┐рдирдХреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рдЪреВрдВрдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдкрдирд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛ред рдореИрдВ Android рдкрд░ рдирдпрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рд▓рд┐рдЦреЗрдВ :)

рддрд╛рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рдЙрдкрдпреЛрдЧреА рди рд╣реЛ, рдЪрд▓реЛ libFLAC рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд▓реЗрдВред рдпрд╣ .flac рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбреАрдХреЛрдб рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджреЗрдЧрд╛ред рдЗрд╕ рдирд┐рдпрдорд╛рд╡рд▓реА рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдорд╛рдг


рд╣рдо рдПрдХ рдорд╛рдирдХ рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рд╣рдо jni folder рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ lib libb, libvorbis, libflac рдЕрдирдкреИрдХ рдХрд░рддреЗ рд╣реИрдВред

рд╕рднрд╛



рд╣рдо рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:

PREBUILT=/home/user/android-ndk-r5b/toolchains/arm-eabi-4.4.0 PLATFORM=/home/user/android-ndk-r5b/platforms/android-3/arch-arm export CC="/home/user/android-ndk-r5b/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/arm-eabi-gcc" export CFLAGS="-fPIC -DANDROID -nostdlib" export ANDROID_ROOT="/home/user/android-ndk-r5b" export LDFLAGS="-Wl,-rpath-link=$ANDROID_ROOT/platforms/android-3/arch-arm/usr/lib/ -L$ANDROID_ROOT/platforms/android-3/arch-arm/usr/lib/" export CPPFLAGS="-I$ANDROID_ROOT/platforms/android-3/arch-arm/usr/include/" export LIBS="-lc " ./configure --host=arm-eabi 


LibVorbis рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛:
LDFLAGS рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
 export LDFLAGS="-Wl,-rpath-link=$ANDROID_ROOT/build/platforms/android-3/arch-arm/usr/lib/ -L$ANDROID_ROOT/build/platforms/android-3/arch-arm/usr/lib/ -L../../libs/armeabi/" 

рдФрд░ LIBS:
 export LIBS="-lc -logg" 


Libflac рдХреЗ рд▓рд┐рдП, рдмрджрд▓реЗрдВ, libs -lvorbis рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╕рдВрд░рдЪрдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдирд┐рд░реНрдпрд╛рдд CC рд▓рд╛рдЗрди Android NDK рд╕рдВрдХрд▓рдХ рдХрд╛ рдкрде рд╣реИред рдпрд╣рд╛рдВ: рдирд┐рд░реНрдпрд╛рдд LDFLAGS рд╣рдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ LIBS рдореЗрдВ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред рдЗрд╕ рдкрдВрдХреНрддрд┐ рдореЗрдВ: CPPFLAGS рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ рд╣рдо рдЕрддрд┐рд░рд┐рдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╣реЗрдбрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред

рдкреНрд░рддреНрдпреЗрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдореВрд▓ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБред рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдмрд╛рдж, рдЕрдЧрд░ рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реЛ рдЧрдпрд╛, рддреЛ рдЖрдкрдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдорд┐рд▓рддреЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдирдбреАрдХреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

Android.mk рддреИрдпрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ



рддреЛ, рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдлреЙрд░реНрдо рдХрд╛ Android.mk рдмрдирд╛рдПрдВ:
$ (рд╕рдм-рд╕рдмрдбрд┐рдЕрд░-рдореЗрдХрдлрд╛рдЗрд▓реНрд╕) рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдореЗрдВ: jni, jni / libogg, jni / libflac, jni / libvorbis
рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рднреА Android.mk рдЬреБрдбрд╝реЗ рд╣реЛрдВрдЧреЗред

рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдореЗрдВ Android.mk рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП jni / libogg / src, jni / libvorbis / lib, jni / libflac / src рд╣рдо рд╕рднреА Makefile.am рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╣реА рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдореЗрдВ рдХрд░реЗрдВрдЧреЗред
jni / libogg / src

Makefile.am рдореЗрдВ рд╣рдо рд▓рд╛рдЗрдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВ:
libogg_la_SOURCES = framing.c bitwise.c рд╣рдо рд╕рднреА рдХреА рдЬрд░реВрд░рдд рд╣реИред рд╣рдореЗрдВ рдлреЙрд░реНрдо рдХрд╛ рдорд╛рдирдХ Android.mk рдорд┐рд▓рддрд╛ рд╣реИ:
 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libogg LOCAL_C_INCLUDES := $(LOCAL_PATH) \ $(LOCAL_PATH)/../include/ LOCAL_SRC_FILES := framing.c bitwise.c include $(BUILD_SHARED_LIBRARY) #      

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рднреА рд╕рдордЭрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдЪрд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
jni / libvorbis / lib

рдпрд╣рд╛рдБ рднреА, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рд╣рдо рд▓рд╛рдЗрди рдкрд╛рддреЗ рд╣реИрдВ: libvorbis_la_SOURCES рдФрд░ рд╡рд╣рд╛рдВ рдореМрдЬреВрдж рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд Android.mk рдорд┐рд▓рддрд╛ рд╣реИ:
 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libvorbis LOCAL_C_INCLUDES := $(LOCAL_PATH) \ $(LOCAL_PATH)/../include \ $(LOCAL_PATH)/../../libogg/include # headers libogg LOCAL_SRC_FILES := mdct.c smallft.c block.c envelope.c window.c lsp.c \ lpc.c analysis.c synthesis.c psy.c info.c \ floor1.c floor0.c\ res0.c mapping0.c registry.c codebook.c sharedbook.c\ lookup.c bitrate.c\ LOCAL_SHARED_LIBRARIES := libogg #    LOCAL_LDLIBS := -ldl -lGLESv1_CM -llog include $(BUILD_SHARED_LIBRARY) 

jni / libflac / src

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдФрд░ рд╡реЗ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╣реИрдВред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдореМрдЬреВрдж рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд┐рд▓реА:
 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libFLAC LOCAL_C_INCLUDES := $(LOCAL_PATH)/libFLAC/include/ \ $(LOCAL_PATH)/../include/ \ $(LOCAL_PATH)/../../libogg/include/ \ $(LOCAL_PATH)/../../vorbis/include/ \ $(LOCAL_PATH)/share/include/ \ $(LOCAL_PATH)/share/utf8/ \ $(LOCAL_PATH)/../include/ \ $(LOCAL_PATH)/../include/share/ \ $(LOCAL_PATH)/share/replaygain_synthesis/include/ \ $(LOCAL_PATH)/../../libogg/include/ \ $(LOCAL_PATH)/../../vorbis/include/ \ $(LOCAL_PATH)/metaflac/include/ \ $(LOCAL_PATH)/../include/ \ $(LOCAL_PATH)/../include/share \ $(LOCAL_PATH)/../../libogg/include/ \ $(LOCAL_PATH)/../../vorbis/include/ \ $(LOCAL_PATH)/flac/ \ $(LOCAL_PATH)/../include/ \ $(LOCAL_PATH)/../../libogg/include/ \ $(LOCAL_PATH)/../../vorbis/include/ \ LOCAL_SRC_FILES := libFLAC/bitmath.c \ libFLAC/bitreader.c \ libFLAC/bitwriter.c \ libFLAC/cpu.c \ libFLAC/crc.c \ libFLAC/fixed.c \ libFLAC/float.c \ libFLAC/format.c \ libFLAC/lpc.c \ libFLAC/md5.c \ libFLAC/memory.c \ libFLAC/metadata_iterators.c \ libFLAC/metadata_object.c \ libFLAC/stream_decoder.c \ libFLAC/stream_encoder.c \ libFLAC/stream_encoder_framing.c \ libFLAC/window.c \ libFLAC/ogg_decoder_aspect.c \ libFLAC/ogg_encoder_aspect.c \ libFLAC/ogg_helper.c \ libFLAC/ogg_mapping.c \ share/getopt/getopt.c share/getopt/getopt1.c \ share/grabbag/cuesheet.c \ share/grabbag/file.c \ share/grabbag/picture.c \ share/grabbag/replaygain.c \ share/grabbag/seektable.c \ share/replaygain_analysis/replaygain_analysis.c \ share/replaygain_synthesis/replaygain_synthesis.c \ share/utf8/charset.c share/utf8/iconvert.c share/utf8/utf8.c \ metaflac/main.c \ metaflac/operations.c \ metaflac/operations_shorthand_cuesheet.c \ metaflac/operations_shorthand_picture.c \ metaflac/operations_shorthand_seektable.c \ metaflac/operations_shorthand_streaminfo.c \ metaflac/operations_shorthand_vorbiscomment.c \ metaflac/options.c \ metaflac/usage.c \ metaflac/utils.c \ flac/analyze.c \ flac/decode.c \ flac/encode.c \ flac/foreign_metadata.c \ flac/local_string_utils.c \ flac/utils.c \ flac/vorbiscomment.c \ LOCAL_SHARED_LIBRARIES := libogg libvorbis LOCAL_LDLIBS := -ldl -lGLESv1_CM -llog include $(BUILD_SHARED_LIBRARY) 

рдФрд░ рдЕрдВрддрд┐рдо рдПрдХ:

рдПрдирдбреАрдХреЗ рднрд╡рди



рд╣рдо ndk-build рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ NDK рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реИ) рдФрд░ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рдВрдХрд▓рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди flac рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ:
/home/user/workspace/w/testOGG/jni/flac-1.2.1/src/libFLAC/format.c:60: error: 'VERSION' undeclared here (not in a function)
/home/user/workspace/w/testOGG/jni/flac-1.2.1/src/libFLAC/format.c:66: error: expected ',' or ';' before 'VERSION'
make: *** [/home/user/workspace/w/testOGG/obj/local/armeabi/objs/FLAC/libFLAC/format.o] 1

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рдПрдХ рдмрджрд▓рд╛рд╡ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рдЗрд╕ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
#define VERSION "1.2.1"
рдЕрдм рд╕рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВред рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
Install : libFLAC.so => libs/armeabi/libFLAC.so
Install : libogg.so => libs/armeabi/libogg.so
Install : libvorbis.so => libs/armeabi/libvorbis.so

рдирд┐рдореНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП:
рдЫрд╡рд┐
рдЕрдм рдЖрдЦрд┐рд░реА рдЪреАрдЬ рдмрдЪреА рд╣реИ - рдпрд╣ рдкрд░рдЦрдиреЗ рдХреА рдХрд┐ рдХреНрдпрд╛ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдХрд╛рдорд╡рд╛рд╕рдирд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдСрдбрд┐рдпреЛ рдХреЛ рдбрд┐рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рдорд╛рдирдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рдЧрдпрд╛ред Flac рдлрд╝рд╛рдЗрд▓ рд╕реЗ wav рддрдХ рдбрд┐рдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЪреВрдВрдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ, рдЖрдк рдЗрд╕ apk: test apk рдлрд╝рд╛рдЗрд▓ рдкрд░ рдХрд╛рдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
(рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ.рдлреНрд▓реИрдХ рдлрд╝рд╛рдЗрд▓ sdcard рдореЗрдВ рд╣реЛ:
05-20 14: 18: 42.783: INFO / FLAC (427): рдирдореВрдирд╛ рджрд░: 44100 рд╣рд░реНрдЯреНрдЬ
05-20 14: 18: 42.783: рдЬрд╛рдирдХрд╛рд░реА / рдПрдлрдПрд▓рдПрд╕реА (427): рдЪреИрдирд▓: 2 рд╣рд░реНрдЯреНрдЬ
05-20 14: 18: 42.783: INFO / FLAC (427): рдмрд┐рдЯреНрд╕: 16 рд╣рд░реНрдЯреНрдЬ, рдЗрд╕реЗ test2.wav рдкрд░ рдЯреНрд░рд╛рдВрд╕рдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓рд┐рдЦреЗрдЧрд╛ (рдХреЗрд╡рд▓ рд▓реЙрдЧ рдореЗрдВ)ред рдПрдореБрд▓реЗрдЯрд░, рдПрдЪрдЯреАрд╕реА рд╡рд╛рдЗрд▓реНрдбрдлрд╛рдпрд░ рдФрд░ рд╕реИрдорд╕рдВрдЧ рдЧреИрд▓реЗрдХреНрд╕реА рдЯреИрдм (рд╣рд░ рдЬрдЧрд╣ рдПрдВрдбреНрд░реЙрдЗрдб 2.2) рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ред 20 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдлреНрд▓реИрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдорд┐рдирдЯ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдирд╣реАрдВ рд▓рдЧрд╛ред рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░, рдирдорд╕реНрддреЗ рджреБрдирд┐рдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред
рдпрд╣рд╛рдБ рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрд░реЛрдд рд╣реИрдВ:
рд╕реНрд░реЛрдд рдХреЛрдб
рд╕реМрднрд╛рдЧреНрдп рд╣реИ

Source: https://habr.com/ru/post/In119693/


All Articles