C/C++ ์ฝ๋๋ฅผ ํธ์ถํ๋ ์๋ ์ต์ํ Flutter ์ฑ๊ณผ ํจ๊ป ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ๋น๋ํ๋ ๋ฐฉ๋ฒ์ด ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ์์ ํ Gradle ์ง๋ฌธ์ผ ์ ์์ง๋ง Gradle ์ ๋ฌธ๊ฐ๊ฐ ์๋ ์ฌ๋(์: ์ )์๊ฒ๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ด ๋ช ํํ์ง ์์ต๋๋ค.
๊ด๋ฆฌ์ ์๊ฒฌ: ํ์ฌ ์ํ ๋ฐ ์ถ๊ฐ ์ ๋ณด๋ https://github.com/dart-lang/sdk/issues/34452 ๋ฅผ ์ฐธ์กฐ
@jason-simmons๋ Gradle์ ๋ํด ๊ฐ์ฅ ์ ์๊ณ ์์ต๋๋ค. .so๊ฐ ์์ผ๋ฉด ๋ก๋ํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
buildSrc ์๋์ gradle ๋น๋ ๋ฒ์ ์ ์ค์ ํ๋ ๋ ๋ค๋ฅธ ์์ฑ์ด ์์์ ๋ฐ๊ฒฌํ์ต๋๋ค. 2.2.2๋ก ์ ๋ฐ์ดํธํ ํ ์งํํ๊ณ .so ๋ก๋๋ฅผ ํ์ธํ ์ ์์๊ณ Java์์ ํธ์ถํ ์ ์์ต๋๋ค.
์๋ง๋ ์ฐ๋ฆฌ๋ C/C++ ์ฝ๋์์ Dart๋ก HostMessage๋ฅผ ๋ณด๋ด๊ธฐ ์ํ C API๋ฅผ ์ถ๊ฐํด์ผ ํ ๊ฒ์ ๋๋ค.
์, ๋ถํํฉ๋๋ค. C->Java ์ฝ๋ฐฑ์ด ์ ๋ ดํ์ง ์์ ์ ์๋ค๋ ์์ฌ์ด ๋ญ๋๋ค.
์ด์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น? ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ปดํ์ผ๋ C++ ์ฝ๋๋ฅผ ํธ์ถํ๋ ํฌ๋ก์ค ํ๋ซํผ ์ฑ์ ๊ตฌ์ถํ๊ธฐ ์ํด Flutter๋ฅผ ๊ณ ๋ คํ๊ณ ์์ผ๋ฉฐ ์ด๊ฒ์ด ์ ์ผํ ์ฃผ์ ์ค์ง ์ง์ ์ ๋๋ค.
์ด๊ฒ์ ์ค๋๋ ๊ฐ๋ฅํ์ง๋ง( @jtrunick ์ ๊ทธ์ ๋ฐฐ์ก ์ฑ์์ ๊ทธ๋ ๊ฒ ํ์ต๋๋ค), ๋จผ์ Java ๋๋ Obj-C๋ฅผ ํตํด ๋ฐ์กํด์ผ ํฉ๋๋ค.
์ฆ, https://flutter.io/platform-channels/ ๋ฅผ ์ฌ์ฉํ์ฌ Dart์์ Obj-C/Java๋ก ํต์ ํ ๋ค์ Obj-C/Java์์ C++ ์ฝ๋๋ก ํธ์ถํ ์ ์์ต๋๋ค. ์ด ๋ฒ๊ทธ๋ ์ด์ ๋ํ ์ง์ ์ ์ธ ์ง์์ ์ถ๊ฐํ๊ณ ์ ์ฌ์ ์ผ๋ก Obj-C/Java ํต๊ณผ๋ฅผ ํผํ๋ ๊ฒ์ ๋ค๋ฃน๋๋ค.
Dart VM์ C++๋ก ๊ตฌํ๋์์ผ๋ฏ๋ก C ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ ํธ์ถํ๋ ๋ ์ฌ์ด(์์ ํ์ง ์๋๋ผ๋) ๋ฐฉ๋ฒ์ด ์์ด์ผ ํฉ๋๊น(์: dlopen์ ํตํด)? ๊ธฐ๋ณธ(์์ ํ์ง ์์/์คํ์ ์ธ) ์ง์์ ์ํด ์ผ๋ง๋ ๋ง์ ๋ณ๊ฒฝ์ด ํ์ํฉ๋๊น?
Android ๋๋ ios์์ https://www.dartlang.org/articles/dart-vm/native-extensions๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น?
๋ช ๊ฐ์ง Google ์ฑ์์ ์ด ์๊ตฌ์ฌํญ์ ๋ค์์ต๋๋ค.
์ด๋ฌํ ์ฑ ์ค ํ๋๋ ๋๊ธฐ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด ์นด๋ฉ๋ผ๋ฅผ ์๋ํ๊ธฐ ์ํ ์์ฒด C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฑํ์ต๋๋ค. ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ซํผ์ ๋ฐ๋ผ ๋ค๋ฅด๋ฉฐ ์ต๋ํ ๋นจ๋ฆฌ ์๋ํ๋๋ก ์ต์ ํ๋์ด ์์ต๋๋ค. ๊ฐ๋ฅํ ๊ฐ์ฅ ์งง์ ๋๊ธฐ ์๊ฐ์ผ๋ก ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํธ์ถํ๋ ๊ฒ์ ์ด๋ฌํ ์ฑ์ ์ค์ํฉ๋๋ค. ๊ฐ์ ๋ก PlatformChannel + JNI๋ฅผ ํต๊ณผํ๋๋ก ํ๋ฉด Android์์ ์ด๋ฅผ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
Android์ iOS ๊ตฌํ ๊ฐ์ ๊ณต์ ํ ์ ์๋๋ก C++๋ก ๋น์ฆ๋์ค ๋ ผ๋ฆฌ ๊ตฌ์ฑ ์์๋ฅผ ์์ฑํ๋ ๊ณ ๊ธ ๋ชจ๋ฐ์ผ ํ์ด ์์ต๋๋ค. ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ง์ ํตํฉ์ ์ง์ํ๋ Flutter๋ ์ต๊ณ ์ ํฌ๋ก์ค ํ๋ซํผ ํ๋ ์์ํฌ๋ผ๋ ์ ์ง๋ฅผ ๋์ฑ ๊ณต๊ณ ํ ํ ๊ฒ์ ๋๋ค.
๋๋ ์ด๊ฒ์ด _ํ์ํ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ Flutter๊ฐ ๋ค๋ฅธ ํฌ๋ก์ค ํ๋ซํผ ์๋ฃจ์ ๊ณผ ๋์ฑ ์ฐจ๋ณํํ ์ ์๋ ์์ญ ์ค ํ๋์ ๋๋ค.
์ด๋ฌํ ์ฑ ์ค ํ๋๋ ๋๊ธฐ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด ์นด๋ฉ๋ผ๋ฅผ ์๋ํ๊ธฐ ์ํ ์์ฒด C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฑํ์ต๋๋ค. [...] ๊ฐ์ ๋ก PlatformChannel + JNI๋ฅผ ํต๊ณผํ๋๋ก ํ๋ฉด Android์์ ์ด๋ฅผ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
C++์์ Java๋ก ๋๋ ๊ทธ ๋ฐ๋๋ก ์ ํํ๊ธฐ ์ํ Android์ ์๋ฃจ์ ์ ๋ฌด์์ด์์ต๋๊น?
์ ๋ง ํ์ํ ๊ฒฝ์ฐ ๋ชจ๋ฐ์ผ ํ๋ซํผ์์ Dart ๊ธฐ๋ณธ ํ์ฅ์ ํ์ฉํ ์ ์์ต๋๋ค. ์ง๊ธ์ dart_api.h
์ ๊ธฐํธ๋ฅผ ๋
ธ์ถํ์ง ์์ต๋๋ค. ์ค์์น๋ฅผ ์ ํํ๊ธฐ ์ ์ ๋ค์์ ๊ฒฐ์ ํด์ผ ํฉ๋๋ค.
dart_api.h
์ ๋ฃจํด์ ๋ํด ์ผ๋ถ ABI ์์ ์ฑ ๋ณด์ฅ์ ์ ๊ณตํฉ๋๋ค. ๋๋ถ๋ถ ์์ ์ ์ด์ง๋ง ๋ค์ํ ๋ชจ๋๋ฅผ ์ค๋ช
ํ๊ธฐ ์ํด ์ฌ์ ํ ์งํํ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.์ง๊ธ๊น์ง๋ ํ๋ซํผ ์ฑ๋ ๋ฉ์ปค๋์ฆ์ด ๋ ๊ฐ๋จํ ์ฌ์ฉ ์ฌ๋ก์ ์ ํฉํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
C++์์ Java๋ก ๋๋ ๊ทธ ๋ฐ๋๋ก ์ ํํ๊ธฐ ์ํ Android์ ์๋ฃจ์ ์ ๋ฌด์์ด์์ต๋๊น?
๋๋ ๊ทธ๋ค์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๊น์ด ๋ค์ฌ๋ค๋ณด์ง ์์์ต๋๋ค. C++์์ ๋๊ธฐ ์๊ฐ์ด ๋งค์ฐ ์งง์ ํต์ ์ด ํ์ํ ๋ชจ๋ ๋นํธ๋ฅผ ์์ฑํ ๊ฒ ๊ฐ์ต๋๋ค. ์ฑ๋ฅ์ด ์ค์ํ ์ฌ์ฉ ์ฌ๋ก์ JNI๋ฅผ ์ฌ์ฉํ๋์ง ๋ฌป์ต๋๋ค(๋ด ์ง๊ฐ์ ์๋์ค).
Flutter ์ธก์์ ๋ฌด์์ ํ ์ ์๋์ง์ ๋ฌ๋ ค ์์ต๋๋ค. JNI๋ณด๋ค ํจ์ฌ ๋น ๋ฅธ interop์ ์ ๊ณตํ ์ ์๋ค๋ฉด ์ด ํ์๊ฒ ํฐ ์น๋ฆฌ๊ฐ ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ค์ C++ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ถ์ํ๊ณ ์ฑ ์ธก์ผ๋ก ๋ ๋ง์ด ์ด๋ํ ์ ์์ต๋๋ค. Interop ์ฑ๋ฅ์ด JNI์ ๋น์ทํ๋ค๋ฉด ์ฌ๊ธฐ์ ํฐ ์น๋ฆฌ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ค์ ์๋ง๋ ์ง๊ธ ํ๊ณ ์๋ ์ผ์ ๊ณ์ํ๊ณ PlatformChannel์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๋ ์ด๋ฌํ ํ์ด Flutter๋ก ์ ํํ ์ถ๊ฐ ์ด์ ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด ์ฐจ๋จ์ด๋ผ๋ ๋ง์ ๋ค์ด ๋ณธ ์ ์ด ์์ผ๋ฏ๋ก ๊ทธ์ ๋ฐ๋ผ ์ฐ์ ์์๋ฅผ ์ง์ ํ์ญ์์ค.
๋น์ ์ด ๋งํ๋ ๊ฒ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๋ค๋ฉด ํ์ฌ ์๋ฃจ์ ์ Java์ ์ต์ํ์ ๋ ผ๋ฆฌ๋ก C++์ ๋ชจ๋ ๋ ผ๋ฆฌ(์นด๋ฉ๋ผ+UI)๋ฅผ ๊ฐ๋ ๊ฒ์ด๋ฉฐ ์ด ๋ ผ๋ฆฌ์ UI ๋ถ๋ถ์ Dart๋ก ์ฎ๊ธฐ๊ณ ์ ํ๋ค๋ ๊ฒ์ ๋๋ค. ๋๊ธฐ ์๊ฐ์ด ์งง์ UI<->์นด๋ฉ๋ผ ์ํธ ์์ฉ์ ์์ง ์๊ณ .
๊ทธ๋ค์ ์ค๋ ๋ฉ ์ํฉ์ ๋ํด ์ด์ผ๊ธฐํ ์ ์์ต๋๊น? ์นด๋ฉ๋ผ+UI์ฉ ์ค๋ ๋๊ฐ ํ๋๋ง ์์ต๋๊น?
@chinmaygarde ๋ ๊ฐ ์ ์์ต๋๋ค.
+1
์ด ๋ฌธ์ ์ ์ง์ ์ด ์์ต๋๊น?
์ฐ๋ฆฌ๋ ์ด๋ฏธ djinni ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ํ๋ซํผ์์ ๋ก์ง์ ๊ณต์ ํ๊ณ ์์ต๋๋ค. Java/Objc-C๋ฅผ ํตํด ์๋ค ๊ฐ๋ค ํ๋ ๊ฒ๋ณด๋ค Dart์ C++ ์ฌ์ด์ ์ํธ ์ด์ฉ์ฑ์ ๊ฐ์ง ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
Dart๊ฐ C/C++์ ํตํฉ๋ ์ ์๋ค๋ฉด ๋ชจ๋ฐ์ผ์์ ์๋ง์ ๋ค์ดํฐ๋ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฌ์ฉํ๊ณ JNI ๋๋ Objective C++๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ํ๋ซํผ์ ๋ฐ์ธ๋ฉํ ํ์๊ฐ ์๋ ๊ฒ์ด ์ข์ ์์ด๋์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
https://github.com/mono/CppSharp ๋ฅผ ๊ณ ๋ คํด ๋ณด์ จ์ต๋๊น
Realm๊ณผ ๊ฐ์ C++ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ C++์ ์ง์ ํตํฉํ๋ฉด ์๋นํ ์ฑ๋ฅ๊ณผ ๊ฐ๋ฐ์ ์์ฐ์ฑ ํฅ์์ ๋ฌ์ฑํ ์ ์์ต๋๋ค :-) JNI๋ฅผ ํตํด ์/์๋๋ก ์ด๋ํ๋ ๊ฒ์ ๋ญ๋น์ ๋๋ค.
์ ๋ ์ปดํจํฐ ๋น์ (์๋ง๋ OpenCV ์ฌ์ฉ)์ ์ํํ๋ AR ์ฑ์ฉ Flutter๋ฅผ ๊ณ ๋ คํ๊ณ ์์ผ๋ฉฐ ํจ์จ์ ์ด๊ณ ์ง์ ์ ์ธ Dart-C++ ์ํธ ์ด์ฉ์ฑ์ด ์ฃผ์ ๊ธ์ ์ ์ธ ํฌ์ธํธ๊ฐ ๋ ๊ฒ์ ๋๋ค. ๊ณ์ฐ ์ธก๋ฉด์์ ๊น๋ค๋ก์ด ์ฑ์ ์ํํ๋ ๋ค๋ฅธ ๋ง์ ์ฌ๋๋ค์ด ์ด๋ฌํ ์๊ตฌ ์ฌํญ์ ๊ณต์ ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
C++ interop์ ์ฌ์ ํ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋๊ตฐ๊ฐ ํ์ธํ ์ ์์ต๋๊น? ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ํํ ์ ์์ต๋๊น?
@tofutim Direct c/c++ interop์ ์ฌ์ ํ โโ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ์ด ๋ฌธ์ ๊ฐ ์ฌ์ ํ ์ด๋ ค ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ๋ซํผ ์ฑ๋ ์ ์ฌ์ฉํ ๋ค์ Obj-C/Java๋ฅผ ์ฌ์ฉํ์ฌ C++ ์ฝ๋์ ์ํธ ์์ฉํ ์ ์์ต๋๋ค. ์๋ํ์ง๋ ์์ง๋ง ํ์ฌ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง ์ ๋ถ์ ๋๋ค.
C++ interop์ ์ฌ์ ํ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋๊ตฐ๊ฐ ํ์ธํ ์ ์์ต๋๊น? ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ํํ ์ ์์ต๋๊น?
ํ๋ซํผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ํธ ์ด์ฉํ๊ธฐ ์ํด ํ๋ซํผ ์ฑ๋ ๋ฉ์ปค๋์ฆ์ ์ฌ์ ํ โโํ์ฌ ๊ถ์ฅ ์ฌํญ์ ๋๋ค.
๊ธฐ๋ณธ ํ์ฅ ๋ฌธ์์ ์ค๋ช ๋ ๋ณด๋ค ์ฑ๋ฅ์ด ๋ฐ์ด๋ ๋ฉ์ปค๋์ฆ์ ๊ฐ๋จํ๊ฒ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ dart_api.h ์์ ๋ ธ์ถ๋ ๊ธฐํธ์ ๋ํ ABI ์์ ์ฑ ๋ณด์ฅ์ ๋ํด @eseidelGoogle ์ด ๊ทธ๋ฌํ ๋ณด์ฅ์ด ์กด์ฌํจ์ ํ์ธํ ์ ์๋ค๋ฉด, ๋๋ ์ต๋ํ ๋นจ๋ฆฌ ํด๋น ๊ธฐํธ๋ฅผ ๋ ธ์ถํ๊ธฐ ์์ํ ์ ์์ต๋๋ค. ์ ํ์ ์ผ๋ก C++์์ ์ฌ์ฉํ๊ธฐ ์ฝ๋๋ก C API ์ฃผ๋ณ์ ํธ๋ฆฌํ ๋ํผ๋ก Tonic ์ ํ์ ์งํฉ์ ๋ง๋ค ์ ์์ต๋๋ค.
๋ด ์ดํด๋ ์ด ๋ฒ๊ทธ๊ฐ C-API ๋ฐ ๋๊ตฌ ํํฌ๋ฅผ ์ ๊ณตํ์ฌ ์์ ํ C/C++ ํ๋ฌ๊ทธ์ธ์ ์ฝ๊ฒ ๊ฐ์ง ์ ์๋๋ก ํ๋ค๋ ๊ฒ์ ๋๋ค(Obj-C/Java shimming์ด ํ์ํ์ง ์์ง๋ง ์ฌ์ ํ platform_channels์ ํตํด ๋น๋๊ธฐํ๋จ).
ํ์ฌ๋ก์๋ ๋ค์ดํฐ๋ธ ํ์ฅ๊ณผ ๊ฐ์ ๋๊ธฐ ๋ฉ์๋๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. (๊ทธ๋ฌ๋ ์์งํ ๋๋ ๊ทธ๊ฒ์ @Hixie ๋๋ @cbracken์ผ๋ก ์ฐ๊ธฐํฉ๋๋ค).
@seidel
ํ์ฌ๋ก์๋ ๋ค์ดํฐ๋ธ ํ์ฅ๊ณผ ๊ฐ์ ๋๊ธฐ ๋ฉ์๋๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
์ ๊ทธ๋ฐ ๊ฒ๋๊น?
C
์ฝ๋๋ฅผ ํธ์ถํ๋ ํ์ฌ ์ ๊ทผ ๋ฐฉ์์ Dart
-> Java
-> C
์ฐ๋ฆฌ๋ JNI๋ฅผ ๋ ๋ฒ ๊ต์ฐจํฉ๋๋ค.
์ฒ์: ํ๋ซํผ ์ฑ๋์ ํตํด dart
์์ Java
๋ก(ํ๋์์ JNI ํธ์ถ ์ฌ์ฉ, ๋ง์ฃ ?)
๋ ๋ฒ์งธ: Java
-> JNI ๋ฅผ ํตํ C
์๋ฅผ ๋ค์ด, ๋ด ํ๋ก์ ํธ์ ์๊ตฌ ์ฌํญ์ ๊ด์ ์์ ์์ ์ฑ ๋ณด์ฅ ์์ด๋ dart_api.h
์ก์ธ์คํ ์ ์์ผ๋ฉด(์: ์คํ ๊ธฐ๋ฅ์ผ๋ก) ์ด๋ฏธ ์ถฉ๋ถํ ๊ฒ์
๋๋ค. ๋ด ์ฃผ์ ๊ด์ฌ์ฌ๋ ๋ง์ฌ๋ง ๋ฐ ์ด์์ ์ผ๋ก๋ ๋ณต์ฌํ์ง ์๊ณ Dart ์ชฝ์์ C
์ชฝ์ผ๋ก ํฐ ์ด์ง ๋ฐ์ดํฐ(์ด๋ฏธ์ง) ๋ฉ์ด๋ฆฌ๋ฅผ ์ด๋ํ๋ ๊ฒ์
๋๋ค. Unity/Mono ๋ ์ด๋ฅผ ๋ฌ์ฑํฉ๋๋ค .
dart-sdk ๋ฌธ์ 31960 ์์ ํ์ฌ ๊ฒฉ๋ฆฌ ๊ตฌํ์ด ๋ณต์ฌ ์์ด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ ํ์ฉํ์ง ์์ ์ ์์์ ์ดํดํฉ๋๋ค(์ด๋ก ์ ์ผ๋ก๋ ๊ฒฉ๋ฆฌ A์์ ์์ฑ๋ ๋ฒํผ๊ฐ ๊ฒฉ๋ฆฌ B์ ์ ๋ฌ๋ ํ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์์ ๊ฐ์งํ ์ ์์ด์ผ ํ์ง๋ง ๋ฐ๋ผ์ ํด๋น ์์ ๊ถ์ ๋ณต์ฌํ์ง ์๊ณ ์๋๋ ์ ์์ต๋๋ค. ๊ทธ ์ ๋ฉด์ ๋ํ ๊ณํ์ด ์์ต๋๊น?), ๊ทธ๋ฌ๋ ์ ์ด๋ ๊ฒฉ๋ฆฌ ๋ด์์ C
๋ก/์์ ๋ง์ฌ๋ง์ด ์๋ค๋ฉด ์ข์ ๊ฒ์
๋๋ค.
๊ณง ๋์ฐฉํ ๊ฒ์ผ๋ก ๋ณด์ด๋ ํ๋ซ ๋ฒํผ๋ก ๋ง์ฌ๋ง์ ํผํ ์ ์์ต๋๋ค. https://github.com/google/flatbuffers/pull/4676
๋๋ ๋จ์ผ ๋ฐ์ดํธ ์ ์ฉ ํ๋๋ฅผ ์ฌ์ฉํ๋ protobuf ๋ฉ์์ง์ ํจ๊ป.
๋ฌผ๋ก ์ด๊ฒ์ ๋ง์ ์์ ๋ฐ์ดํธ ๋ณต์ฌ๋ฅผ ์๋ฐํ๋ฏ๋ก ๋ชจ๋ ์ฌ์ฉ ์ฌ๋ก์ ์ ํฉํ์ง ์์ต๋๋ค.
๋๋ ์ฌ๊ธฐ์ ์ ์๋ ์ ์ด๋ ์ธ ๊ฐ์ง ๋ค๋ฅธ ์๋ง์ ๋ฃ๊ณ ์์ต๋๋ค.
์์ ๋ด์ฉ์ ์ฝ์ ํ ํผ๋๋ฐฑ์ ๋ช ๊ฐ์ง ์ถ๊ฐ ๋ฒ๊ทธ๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์ ๊ณ ๋ คํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ํ์คํ C++ inter-op์ ์ฝ๊ฐ์ ํฌ์๊ฐ ํ์ํ์ง๋ง ์ด ๊ธด ์ค๋ ๋์์ ์ด๋ค ์ ํํ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ด๋ค ์์๋ก ์ฒ๋ฆฌํด์ผ ํ๋์ง ๊ฒฐ์ ํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค.
์ดํด ๊ด๊ณ์๊ฐ ์ํ๋ ์ฌ์ฉ ์ฌ๋ก์ ํจ๊ป ์๋ก์ด ๋ฒ๊ทธ๋ฅผ ์ ๊ณ ํ๊ณ ์ฌ๊ธฐ์ ๋ค์ ์ฐ๊ฒฐํ ์ ์์ต๋๊น? ์ด ๋ฌธ์ ์์ญ์ ๋ํ ์ผ๋ฐ์ ์ธ ๊ด์ฌ์ ์ถ์ ํ๊ธฐ ์ํด ์ด ๋ฌธ์ ๋ฅผ ์ด์ด ๋๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค.
์ฑ๋ฅ๊ณผ ๊ด๋ จํ์ฌ 2. ์: Flutter์ platform_channels ์ฑ๋ฅ์ด ํฅ์๋ ์ ์๋ค๊ณ ํ์ ํ์ง๋ง(๋ชจ๋ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด ๋ค๋ฅธ ํ๋ฌ๊ทธ์ธ/์ํธ ์ด์ฉ ๋ฐฉ๋ฒ์ด ํ์ํ ๊ฐ๋ฅ์ฑ์ด ์์) ์ฐ๋ฆฌ๋ ๋ช ๊ฐ์ง ๊ตฌ์ฒด์ ์ธ ์ฌํญ์ ์ํ ๊ฒ์ ๋๋ค. Flutter์ platform_channels ์ฑ๋ฅ์ด ์กฐ์น๋ฅผ ์ทจํ๊ธฐ ์ ์ ๋ณ๋ชฉ ํ์์ด ๋ฐ์ํ๋ ์ฌ์ฉ ์ฌ๋ก(์๋ง๋ ์กด์ฌํ์ง๋ง ๋ด๊ฐ ๋ณธ ์ ์ด ์์๊น์?). ์์คํ ์ฑ๋ฅ ์ต์ ํ์ ๋ํ ๋์ ๊ฒฝํ์ ๋ด ์ง๊ฐ์ด ์ข ์ข ์๋ชป๋์๋ค๋ ๊ฒ์ ๋๋ค. JNI ๋๋ platform_channels์ ๊ฐ์ ๊ฒ๋ค์ด ์ ์ฌ์ ์ธ ๋ณ๋ชฉ ํ์์ฒ๋ผ ๋๊ปด์ง์ง๋ง ์ธก์ ํ ๋๊น์ง๋ ์ค์ ๋ก ์ ์ ์์ต๋๋ค.
๋์๊ณผ ํผ๋๋ฐฑ์ ์ฃผ์ ๋ชจ๋ ๋ถ๋ค๊ป ๋ค์ ํ ๋ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
Java/Obj-C ๊ธ๋ฃจ๋ฅผ ์ถ๊ฐํ ํ์ ์์ด C/C++ ์ฝ๋๋ง ์ฌ์ฉํ์ฌ Flutter์ฉ ํ๋ฌ๊ทธ์ธ์ ์ฝ๊ฒ ์์ฑํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ํฉ๋๋ค(์ด๊ฒ์ด ์ด ๋ฒ๊ทธ์ ๋ํ ์ ์ ์๋ ์ดํด์์ผ๋ฉฐ ํ์คํ ํ ์/ํด์ผ ํ๋ค๊ณ ์๊ฐํ๋ ๊ฒ์ ๋๋ค) .
๊ทธ๊ฒ์ ๋ํ ํ๋ฌํฐ๋ฅผ ์ํ ๋ ๋์ sqlite ํตํฉ์ ์ ๊ณตํ ๊ฒ์ ๋๋ค + ํฌ๋ฆฝํ , ssh ๋ฐ ๊ธฐํ ํญ๋ชฉ์ ์ํ ์๋ง์ C/Rust ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ต๋๋ค. ๊ฐํธํ๊ฒ ์ฌ์ฉํ ์ ์์ด์ ์ข๋๋ผ๊ณ ์.
@seidel
๋๋ ์ ์ด๋ ์ธ ๊ฐ์ง ๋ค๋ฅธ ์๋ง์ด ์ ์๋๋ ๊ฒ์ ๋ฃ๊ณ ์์ต๋๋ค.
๋ด ํฌํ 1.)
Flutter ๋ฌธ์๋ฅผ ์ฝ์ผ๋ฉด C๋ฅผ ์ง์ํ๋๋ก ํ๋ซํผ ์ฑ๋์ ํ์ฅํ๋ ๊ฒ์ด ์๋นํ "๊ฐ๋จ"ํด์ผ ํฉ๋๋ค.
์ ์ผํ ์๋ก์ด ๊ฒ์ ์๋ง๋ ํ์ฌ ํ๋ก์ธ์ค์ _๋์ ๊ณต์ ๊ฐ์ฒด_๋ฅผ ๋ก๋ํ๋ ๋ฐฉ๋ฒ์ผ ๊ฒ์
๋๋ค.
_Android-C_-usage๊ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ผ๊ณ ์์ํ ์ ์์ต๋๋ค.
#include <ndk-version.h>
#include "methodchannel.h"
#include "methodchannels.h"
MethodChannel* flutter_channels;
__attribute__((constructor))
void
on_library_load() {
flutter_channels = NULL;
}
__attribute__((destructor))
void
on_library_unload() {
while (MethodChannel* channel = MethodChannels_pop(flutter_channels)) {
MethodChannel_delete(channel);
}
}
#define str(a) #a
void
{{pluginClass}}_on_method_call(MethodCall* call, Result* result) {
if (strcmp("getPlatformVersion", call.method) == 0) {
Result_success(result, "Android " str(__NDK_BUILD__));
} else {
Result_not_implemented();
}
}
void
{{pluginClass}}_register_with(Registrar* registrar) {
MethodChannel* channel = MethodChannel_new(Registrar_messenger(registrar), "{{projectName}}");
flutter_channels = MethodChannels_push(flutter_channels, channel);
MethodChannel_set_call_handler({{pluginClass}}_on_method_call)
}
๊ฐ๋ ์ ์ผ๋ก ์ต์ํ _Android-C_์ ๊ฒฝ์ฐ Java์ C์ ์กฐํฉ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํด์ผ ํฉ๋๋ค.
@eseidelGoogle
์ฐ๋ฆฌ๋ ํ์ฌ ์๋ฐ์ ์ค์ํํธ ๋ํผ๋ฅผ ํตํด golang ์ฝ๋๋ฅผ ๊ณต๊ฐํ๊ณ ์์ผ๋ฉฐ ๋๊ธฐ ์๊ฐ์ ์ฐ๋ฆฌ๊ฐ ๊ฒช๊ณ ์๋ ์๋นํ ๋ฌธ์ ์
๋๋ค.
์์ ?
ํฌ์น ์ฐจ์ด๋ฅผ ๋ง๋ค ๊ฒ์
๋๋ค ์ง์ ์ ์ธ ์์ค์์ golang ์ง์์ ์ถ๊ฐํ ์ ์๋ค๋ฉด!
๋ชจ๋ฐ์ผ์ฉ golang ์ฝ๋ ์ปดํ์ผ๋ LDFLag ๋ง๋ฒ ์์ด ๋งค์ฐ ์ฌ์์ ์ธ๊ธฐ๊ฐ ์์ ๊ฒ ๊ฐ์์. ํ์ฌ Method Channels๋ ์ฌ์ฉํ๊ณ ์๋ ๋ช ๊ฐ์ง ๋ค๋ฅธ golang ์ฝ๋๋ฅผ ์๊ณ ์์ต๋๋ค.
์ง๋ ฌํ์ ๊ดํด์๋ ํ์ฌ Protobufs์ ํ๋ซ ๋ฒํผ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์์:
https://github.com/dnfield/flatbuffers/blob/master/samples/sample_binary.go
์ํ์์์ ์ด๊ฒ์ FIDL๋ก ์ํ๋๋ฉฐ c, rust ๋ฐ golang์ ๋ํ ๋ฐ์ธ๋ฉ์ด ์์ต๋๋ค.
์ฌ์ฉํ๊ธฐ์ ๊ฝค ํ๋ฅญํ๊ณ ์๋ฒ ๋๋ ๋ณด๋์์ ๋
น๊ณผ golang์ ์ํํด ๋ณด๋ ๊ฒ์ ์ฆ๊ฒผ์ต๋๋ค.
iOS ๋ฐ Java๋ฅผ ํตํด fidl ํญ๋ชฉ์ ๋
ธ์ถํ๋ ๊ฒ๋ ๊ฐ๋ฅํด์ผ ํฉ๋๋ค.
๊ทธ๊ฒ์ ๋ชจ๋ฐ์ผ๊ณผ ๋ฐ์คํฌํ์์ ์ํ์๊ณผ ํ๋ฌํฐ ์ฌ์ด์ ์ข์ ์ง์
๋ก๋ฅผ ์ค ๊ฒ์
๋๋ค.
๋ด๊ฐ ๊ฐ์ง๊ณ ๋
ธ๋ ์๊ฐ
@eseidelGoogle
Hiix๋ FIDL์ด Fuchsia์ ์๋ zircon์ ์ปค๋ ์ฝ๋์ ์์กดํ๊ธฐ ๋๋ฌธ์ Flutter ์์ค์์ FIDL์ ์ํํ ์ ์๋ค๊ณ ๋งํ์ต๋๋ค. ๋ฐ๋ผ์ Flutter ๋ด์์ FIDL IPC ์คํ์ผ ๊ธฐ๋ฅ์ ๋ณต์ ํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ Flutter ์์ง์ FIDL ๋ฒ์ ์ ์์ฑํ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ๊ทธ๊ฒ์ ๊ฐ์ง๊ณ ๋๋ค๊ฐ Flatbuffers์ ๋งค์ฐ ์ ์ฌํ๋ค๋ ๊ฒ์ ์์์ฐจ๋ ธ์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด Flutter์ cpp ์ฌ์ด์ ์ง๋ ฌํ ๋ ์ด์ด์ FlatBuffers๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ Flutter์ golang ๋๋ rust ๋ ์ด์ด๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น? ?
์ด๊ฒ์ +1ํ๋ฉด Superpowered๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ flutter ์ฑ์ด ์์ต๋๋ค. Superpowered๋ C++๋ก ์์ฑ๋์์ผ๋ฉฐ Java ๋ฐ JNI ์ ํ ํญ๋ชฉ์ ์ฌ์ฉํ์ฌ ์ํธ ์์ฉํ๊ณ ํ๋ซํผ ์ฑ๋์ ์ฌ์ฉํ์ฌ Java ์ฝ๋์ ๋ํํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ค๊ฐ ์ฌ๋์ ๊ฑด๋๋ธ ์ ์๋ค๋ฉด ํ์คํ ์ข์ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ ๋ํ Realm๊ณผ ๊ฐ์ ์ธ๊ธฐ ์๋ ๋ชจ๋ฐ์ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํต์ฌ์ด C/C++๋ก ์์ฑ๋๊ณ java/objc/swift ์ค๊ฐ์๋ฅผ ๋ค๋ฃจ๊ธฐ๋ฅผ ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ํ๋ฌํฐ ๋ฒ์ ์ ๋ง๋๋ ๊ฒ์ ๋ฐฉํดํฉ๋๋ค.
์ด๋ฌํ ์ด์ ๋ก ์ผ๋ฐ์ ์ธ ์์ ์ฑ์ ์ ์ธํ๊ณ ์ด ๋ฌธ์ ๋ ํ์ฌ Flutter์์ ๊ฐ์ฅ ํ์ํ ๋ณ๊ฒฝ ์ฌํญ ์ค ํ๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. (๋ ๊ตฌ์ฒด์ ์ผ๋ก @eseidelGoogle ์ ๋ชฉ๋ก์์ 1์์ ๋๋ค.)
ํ๋ซํผ ํ์ฅ์์ Java/JNI๋ฅผ ์ฐํํ๋ ๊ฒ์ ๋ํ ์ฃผ์ฅ์ ๋ฃ๊ณ ์ถ๋ค๋ฉด(์ฆ, ๊ฐ๋ฐ์๋ฅผ ์ํ Java ๊ธ๋ฃจ ๋ ์ด์ด๋ฅผ ์จ๊ธฐ๊ฑฐ๋ ์๋ํํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ) Superpowered๋ https://www.youtube ์์ ํด๋น ์ฃผ์ ์ ๋ํด ํ ๋ง์ด ๋ง์ต๋๋ค
@pnico ์ด๊ฒ์ด Java/JNI๊ฐ ๋ฐ์ดํจ์ค๋์ด์ผ ํ๋ค๊ณ ์ฃผ์ฅํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ ์ ์์ต๋๊น? ์ค๋์ค ์ฒ๋ฆฌ ์ฝ๋๊ฐ C++๋ก ์์ฑ๋์ด์ผ ํ๋ ๊ฒ๋ณด๋ค ์กฐ๊ธ ๋ ๋ง์ ๊ฒ์ ๋งํ๋ ๊ฒ ๊ฐ์ต๋๋ค. (์ฆ, JNI๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํธ์ถํ ์ ์๋ค๋ ์๋ฏธ๋ ์๋๋๋ค.)
@ csga5000 ๋น์ ์ด ์์ ํ ์ณ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ง์ด๋์ง ์์ต๋๋ค. D JNI๋ ์๋ง๋ ๋ ๋ํดํ ์ผ์ํ๋ ค๊ณ ํ์ง ์๋ ํ ์ค์ ๋ก ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น์ง ์์ ๊ฒ์ ๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ์ ๋ง๋ก ํธ๋ฆฌํจ/์ ์ง๋ณด์ ๊ฐ๋ฅ์ฑ์ผ๋ก ๊ท๊ฒฐ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ง๋ ๋ ๋ง์ ์ฑ๋ณ ์ฝ๋๋ฅผ Java/C++์์ Dart๋ก ์ฎ๊ธฐ๋ ๊ธฐ๋ฅ์ผ ๊ฒ์ ๋๋ค.
@pnico ๊ฐ JINI๋ฅผ ํตํด ํธ์ถํ ์ ์์ง๋ง JINI๊ฐ ๋๊ธฐ ์๊ฐ์ ๋๋ฌด ๋ง์ด ์ถ๊ฐํ๋ค๊ณ ๋งํ๋ ๊ฒ
๋ฐ๋ผ์ ์ฑ๋ฅ์ด ๋ฌธ์ ์
๋๋ค.
์ ์๋์ค ??
์ด๊ฒ์ ์ฃผ๋ก ์ํธํ ๊ด๋ จ ์์ ์ ํฐ ์ฐจ์ด๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
๋ํ ๋๋ ์คํ์ ๋ณด๊ฑฐ๋ ๋ง๋ค์ง ์์์ง๋ง Android Things์ ๋ํด ๊ฐ์ ํฉ๋๋ค.
c๋ dart ๋ชจ๋์์ ํ์ด๋ฐ์ ๋ฏผ๊ฐํ gpio์ ๋ํ ๋ฒค์น๋งํฌ
๋
๋.
2018๋ 6์ 9์ผ ํ ์์ผ 10:52 Eddy WM, ์๋ฆผ @github.com ์์ฑ:
์ด๊ฒ์ ์ฃผ๋ก ์ํธํ ๊ด๋ จ ์์ ์ ํฐ ์ฐจ์ด๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
โ
์ด ์ค๋ ๋์ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฉ์์ง๋ฅผ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/flutter/flutter/issues/7053#issuecomment-395927258 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AFHMcSI2JDHbgv3iYrStDN5mlzkQ8XEkks5t6xxMgaJpZM4K-PLw
.
๊ทธ ์ดํ๋ก ์ด๋ค ์ง์ ์ด ์์ต๋๊น?
์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๋๊น์ง ac/c++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ์์ ํ๋ฌํฐ ํ๋ฌ๊ทธ์ธ์ ๋ํ ๊ถ์ฅ ์ฌํญ์ด ์์ต๋๊น? djinni ๊ฐ ์ข์ ๋ฐฉ๋ฒ์ธ๊ฐ์?
ํด๊ฒฐ๋ ๋๊น์ง ๋ค์ดํฐ๋ธ android ๋ฐ ios ์ฝ๋๋ฅผ ์์ฑํ๋ c/c++๋ฅผ ํตํฉํ ๋ค์ ํ๋ซํผ ์ฑ๋์ ์ฌ์ฉํ์ฌ dart ์ฝ๋์ ์ธํฐํ์ด์คํ๋ ์ ์ผํ ๋ฐฉ๋ฒ
๋๋ ํ๋ซํผ ์ฑ๋์ ์ฌ์ฉํ๋ ํ๋ฌ๊ทธ์ธ์ ๊ตฌํํ์ต๋๋ค(jar ํ์ผ ๋ฐ CocoaPods์). ๋์ผํ c/c++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์๋๋ก์ด๋ ๋ฐ ios ๋ชจ๋)์ ํตํฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ์์ ํ๋ฌ๊ทธ์ธ์ ์ฐพ๊ณ ์์ต๋๋ค. ์ถ์ฒ ์ฌํญ์ด ์์ต๋๊น?
@ mmcc007 Java ๋๋ swift์์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ค์ํํธ: https://www.google.com/search?client=opera&q=swift+use+C%2B%2B&sourceid=opera&ie=UTF-8&oe=UTF-8
๋น์ ์ ๋น์ ์ด ์ ๋ง๋ก ์๋ฅผ ์ํ๋ค๋ฉด ๋น์ ์ด ๊ทธ๊ฒ์ ์ด๋ป๊ฒ ๊ฐ๋ ฅ ํ์ง ๊ถ์ฅ ๋ณผ ์์๋ค (์ด๊ฒ์ ๋จ์ง ํ๋์ ๋ด๊ฐ ์๋์
๋๋ค) : https://github.com/superpoweredSDK/Low-Latency-Android-iOS-Linux-Windows-tvOS-macOS- ์ธํฐ๋ํฐ๋ธ ์ค๋์ค ํ๋ซํผ
์์ ํด๋๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ์๋ฅผ ๋ค์ด https://github.com/superpoweredSDK/Low-Latency-Android-iOS-Linux-Windows-tvOS-macOS-Interactive-Audio-Platform/tree/master/Examples_Android/SuperpoweredRecorder/app/src/main ์๋ cpp/RecorderExample.cpp์ ์ฝ๋๋ฅผ ์ฐธ์กฐํ๋ java/com/superpowered/recorder/MainActivity.java
@csga5000 ์ฒซ ๋ฆฌ๋ทฐ๋ก
์ด๊ฒ์ ๋ํด +1. C++๋ฅผ ์ฌ์ฉํ๋ ํ๋ฌํฐ ์ฑ์ ๋ชจ๋ ์๋ ์์ ๋ ํธํ์ ๋ฐ์ ๊ฒ์ ๋๋ค.
golang์ ๋ํด์ด ์์
์ ์ํํ๋ ํ๋ก์ ํธ๊ฐ ์์ผ๋ฉฐ ๋์ผํ ์ ๊ทผ ๋ฐฉ์์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
C++์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
golang ํ๋ก๊ทธ๋จ์ jsonrpc๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ jsonrpc๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ golang ์ฝ๋๋ฅผ ์์ ํ์ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ฉด ๋ชจ๋ ๊ฒ์ด ๋งค์ฐ ์ฝ์ต๋๋ค.
ํ๋ซํผ ์ฑ๋์ ๋ถ๊ฐ์ง๋ก ์ ์ง๋ ฌํ๋ก JSON๋ง ์ง์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํ์ ?
2018๋
7์ 18์ผ ์์์ผ 16:50 Jefferson Bledsoe, ์๋ฆผ @github.com
์ผ๋ค:
์ด๊ฒ์ ๋ํด +1. C++๋ฅผ ์ฌ์ฉํ๋ ํ๋ฌํฐ ์ฑ์ ์๋ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ ๋ฐ์์ต๋๋คโ
๋น์ ์ด ๋๊ธ์ ๋ฌ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/flutter/flutter/issues/7053#issuecomment-405958345 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/ATuCwkPbb9vLdoaEwM-bLhYPZxtyQ5Vjks5uH0sqgaJpZM4K-PLw
.
์๋ ํ์ธ์, ์ด๋ค ์์์ด ์์ต๋๊น?
์ด ์ค๋ ๋์ ๋๊ตฐ๊ฐ๊ฐ Superpowered ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ Flutter ์ฑ์ ์ง์ ํตํฉํ๋์ง ์๊ณ ์ถ์ต๋๊น?
์ @skills-up ์ฐ๋ฆฌ ๊ฐ ํด๋์ต๋๋ค. ์คํ ์์ค ํ๋ก์ ํธ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ๋ณด์ฌ์ค ์ ์์ต๋๋ค. ํ์ง๋ง ์์ ๋ด ํ์ ๋ณธ๋ค๋ฉด ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ ๋๋ค. ๊ฐ CPU ์ํคํ ์ฒ์ ๋ํ Flutter ์ฑ์ ๋น๋ํด์ผ ํ ์๋ ์์ต๋๋ค.
๋๋ ๋น์ ์ด ๋คํธ์์ ์ง์ ์ ์ผ๋ก๊ฐ ์๋๋ผ JNI/Java๋ฅผ ํตํด ํ๋ค๋ ๊ฒ์ ์ดํดํฉ๋๋ค. ํ๋ซํผ๋ณ ์ฝ๋๋ฅผ ๋ชจ๋ ํผํ ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค.
๊ฐ CPU ์ํคํ ์ฒ์ ๋ํ Flutter ์ฑ์ ๋น๋ํด์ผ ํ ์๋ ์์ต๋๋ค.
๊ฐ ์ํคํ ์ฒ์ ๋ํด ๋ณ๋์ ์ฑ์ ์๋ฏธํฉ๋๊น, ์๋๋ฉด ์ง์๋๋ ๋ชจ๋ ์ํคํ ์ฒ๋ฅผ ์ง์ ํ๊ธฐ๋ง ํ๋ฉด ๋๋์?
BTW, ์ฐ๋ฆฌ๋ ์ด๋ฏธ ๊ธฐ๋ณธ์ ์ผ๋ก Java๋ก ์์ฑ๋ ์๋ํ๋ ์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด์ iOS ์ฑ๋ ๋ง๋ค์ด์ผ ํ๋ฏ๋ก (Swift/XCode์ ๋ ธ๋ ฅ์ ๋ค์ด๋ ๋์ ) ํ๋ฌํฐ๋ก ๋ง๋๋ ๊ฒ์ด ๋จ์ผ ์ฝ๋ ๊ธฐ๋ฐ์ ์ด์ ๊ณผ ํจ๊ป ํฅํ ์ ์ง ๊ด๋ฆฌ ์ธก๋ฉด์์ ๋ ์๋ฏธ๊ฐ ์๋์ง ๊ถ๊ธํ์ต๋๋ค.
์. Realm์ ์ฌ๋ฌ๋ถ์ด ๋ฐฉ๋ฒ์ ์ ๊ณตํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค: https://github.com/realm/realm-object-server/issues/55
lukaspili : ๋ค๋ค ์์ง ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ๊ฒ ๊ฐ์์: flutter/flutter#7053
bmunkholm: @lukaspili ๋ค, ๊ทธ๊ฑด ํ์คํ ์ ์ ์กฐ๊ฑด์
๋๋ค.
๊ทธ๋งํ ๊ฐ์น๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ ์ด๊ฒ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค. ์ฌ๋ฌ๋ถ์ด ์ ์ ํ ๋ฐฐ๊ด์ ์ป์ ๋๊น์ง XF ์ฑ์ flutter๋ก ๊ต์ฒดํ๋ ๊ฒ์ ์ค์ ๋ก ์กฐ์ฌํ ์ ์์ต๋๋ค. ํ์ฌ ์ํ๋ก Xamarin์ ์ด ๋ถ์์์ ๋ฌผ ๋ฐ์ผ๋ก ํ๋ญ์ ๋๋ค.
์ด ํํฐ์ ๋ฆ์์ง๋ง ์ด ์ค๋ ๋์ ๋ํด ํฐ +1์ ๋๋ค.
์ ๋ ๋ฐ์คํฌํ ์ฑ์ ๊ฐ๋ฐํฉ๋๋ค. ์ ๋ณด๊ธฐ๋ ํ ์ค์ ์ฝ๋(๋ฐ์คํฌํฑ์ฉ)์ ๋๋ค.
Flutter - Dart + C++ > Qt ? partyTime() : makeDoWithElectronOrQt()
Flutter๊ฐ C++์ ๋ํ ์ต๊ณ ์์ค์ ์ง์์ ์ ๊ณตํ ์ ์๋ค๋ฉด ์ผ๋ฐ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ด "๋ชจ๋ฐ์ผ ์ฐ์ "๋ฟ๋ง ์๋๋ผ ์ธ๊ณ ์ต์ด์ ํฌ๋ก์ค ํ๋ซํผ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์์ ์ ๋์ ์ธ ์น์๊ฐ ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. Qt๋ ์๊ท๋ชจ ๊ฐ๋ฐ์์๊ฒ ๋น์ธ๊ณ ๋ ๋จ์ ์ด๋ฉฐ ํ๋์ ์ธ C++๋ฅผ ์์ฉํ์ง ์์ผ๋ฉฐ ์ค์ ๋ก ๊ฒฝ์ํ ๋งํ ๊ฒ์ด ์์ต๋๋ค. Flutter๊ฐ UI ํ์ด์ ์ ์ด๋ ์ผ๋ถ๋ฅผ ๋จน์ ์ ์์ต๋๊น?
์ถ์ : ์ ๋ ๋คํธ๋ฅผ ๋ฐ๋ํ๋ ๊ฒ์ด ์๋๋ผ ๋ ๋ค๋ฅธ ์๋ก์ด C#/Go/Rust/etc์ ๋๋ค. ์๋ก์ด ํ๋ซํผ์์๋ ๋งค์ฐ ์์ฐ์ ์ผ ์ ์์ง๋ง ๊ณ ์ฑ๋ฅ ๋ฐ์คํฌํ(์ฌ๊ธฐ์ ๋ด ๊ด์ฌ) ์์ฉ ํ๋ก๊ทธ๋จ์ ์ธ๊ณ๋ ํ๊ณ ํ C++์ด๋ฉฐ, ๊ด๋ฒ์ํ OS ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์์ ์ ๊ณตํ๋ฉฐ, ์ธ์ด ์์ฒด๊ฐ ๋น ๋ฅธ ์๋๋ก ๋ฐ์ ํ๊ณ ์์ต๋๋ค. C), Flutter๋ ๊ทธ๋ด ์๊ฒฉ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค!
๋๋ ํ๋ฌํฐ๊ฐ ๊ฐ๊น์ด ์ฅ๋์ C++๋ฅผ ์ง์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ผ๋ฉฐ, ์ง๊ธ์ ํ์คํ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ Dart๋ฅผ ์์ฒญ๋๊ฒ ์ ํธํฉ๋๋ค. C++๋ก ์ฑ์ ์์ฑํ๋ ๋ฐ์๋ ํ๋ฌํฐ๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ํจ์ฌ ๋ ๋ง์ ๋ ธ๋ ฅ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ C++๊ฐ ๋ฐ์คํฌํ ์ง์์ผ๋ก ์ง์ ๋ณํ๋๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๊ทธ๋ค์ ์ฌ์ ํ โโ์๋นํ ์์ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๊ณ dart VM์ ์ด์จ๋ ๋ฐ์คํฌํ์์ ์๋ํด์ผ ํฉ๋๋ค. ๋๋ถ๋ถ์ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ฑ๋ฅ์ด ๋ฌด์ํ ๋งํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ฒฐ๊ตญ Google์ ์ํธ ์ด์ฉ์ฑ์ ์ง์ํ์ฌ ์ง์๋๋ ์ธ์ด ๋๋ ํด๋น ์ธ์ด์ ์กฐํฉ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํ๋ซํผ์ ๋ํ ํ๋ฌํฐ ์ฑ์ ์์ฑํ ์ ์๊ธฐ๋ฅผ ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ง๋ง Fuchsia๊ฐ ์ถ์๋ ๋๊น์ง๋ ๊ทธ๋ ๊ฒ ๊ธฐ๋ํ์ง ์์ ๊ฒ์ ๋๋ค. ํ์ฌ ๊ทธ๋ค์ ๋ชฉํ๋ ์ฝ๋๋ฅผ ํ ๋ฒ ์ฝ๊ฒ ์์ฑํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋๋ค. Dart๋ ์ฌ์ฉ/๋ฐฐ์ฐ๊ธฐ ์ฝ๊ณ ํจ์จ์ ์ด๋ฉฐ ์ด์จ๋ Google์ ์ธ์ด ์ค ํ๋์ด๊ธฐ ๋๋ฌธ์ ๊ทธ ๋ชฉํ์ ๋ถํฉํฉ๋๋ค. ์ผ๊ธ C++ ์ง์์ ๋ฐ๋ ์ผ๋ฐ ์ฌ์ฉ์์๊ฒ๋ ์ค์ง์ ์ธ ์ด์ ์ด ๊ฑฐ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฑ๋ฅ์ ๋ชจ๋ฐ์ผ ์ฑ์์ ๋ฌด์ํ ์ ์๋ ์์ค์ด๋ฉฐ, C++๊ฐ ํฌํจ๋ ํ๋ซํผ ์ฑ๋์ ์ฌ์ฉํ๋ฉด ๊ธฐ์กด C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ํธ ์์ฉํ ๋ ํธ๋ฆฌํฉ๋๋ค. ๋ฐ์ ๋ฉด์์, ๋น์ ์ ๊ทธ๋ค์ด ๋ฐ์คํฌํ์ ์ง์ํ๊ธฐ ์ํด ๊ฒฐ๊ตญ flutter๋ฅผ ์๋ํ๋ค๋ ๊ฒ์ ํ์ ํ ์ ์์ต๋๋ค(์ ์ด๋ Fuchsia์ ์นดํผ๋ฐ๋ผ, ๊ทธ๋ฌ๋ ๊ทธ๋ค์ด ๊ฑฐ๊ธฐ์ ๋ฉ์ถ์ง๋ ์์ฌ์ค๋ฝ์ต๋๋ค).
์ด ์ค๋ ๋๋ dart/flutter์์ ์ง์ ํตํฉ w/ C++๋ฅผ ์ง์ํ๋ ๊ฒ์ ๊ดํ ๊ฒ์ผ๋ก, ๊ฐ๊น์ด ์์ผ ๋ด์ ์ ๊ณต๋ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋๋ flutter๊ฐ C++๋ฅผ ์ง์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
์ผ๊ธ C++ ์ง์์ ๋ฐ๋ ์ผ๋ฐ ์ฌ์ฉ์์๊ฒ๋ ์ค์ง์ ์ธ ์ด์ ์ด ๊ฑฐ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
Flutter/Dart๊ฐ C++์ ๋นํด ์ผ๋ง๋ ๋ฐ์ด๋์ง ๋ฌธ์ ๊ฐ ์๋๋ผ ํ์ฌ ์์ฝ์์คํ ์ ๋ง์ถ๊ธฐ ์ํด ํ์ํ ํตํฉ์ ์์ /์ฌ์์ ๊ดํ ๊ฒ์ ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธด ๋ชฉ๋ก์ ์ ๊ณ ํ์ค์ธ ๊ณต์ ๊ฐ์ฒด(์: OpenCV)๋ก ์กด์ฌํฉ๋๋ค. ์ฌ๋๋ค์ด Dart์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ ์์ฑํ ๊ฒ์ด๋ผ๊ณ ๊ธฐ๋ํ ์ ์์ต๋๊น?
์ฑ๋ฅ์ ๋ชจ๋ฐ์ผ ์ฑ์์ ๋ฌด์ํ ์ ์๋ ์์ค์ด๋ฉฐ, C++๊ฐ ํฌํจ๋ ํ๋ซํผ ์ฑ๋์ ์ฌ์ฉํ๋ฉด ๊ธฐ์กด C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ํธ ์์ฉํ ๋ ํธ๋ฆฌํฉ๋๋ค.
์ด์ ์ ๋ฐ๋๋ก ์ฑ๋์ ์ฌ์ฉํ๋ ๊ฒ์ ์ด ์ปจํ
์คํธ์์ ์ฐจ์ ์ฑ
์
๋๋ค. ๋ฉ๋ชจ๋ฆฌ(์ด๋ฏธ์ง)์์ ํฐ ์ด์ง ๊ฐ์ฒด๋ก ์์
ํด์ผ ํ๋ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์๊ฐํ๋ฉด ๋ค์ ์ค ํ๋๊ฐ ํ์ํฉ๋๋ค.
1- ์ด ๋ฐ์ด๋๋ฆฌ๋ฅผ C++ ๋ฉ๋ชจ๋ฆฌ์์/๋ก ๋ณต์ฌํฉ๋๋ค.
2- JNI๋ฅผ ์ฌ์ฉํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ธํฐํ์ด์คํ๊ณ ์ด ๋ฐ์ด๋๋ฆฌ์ ๋์ ์ผ๋ก ํ ๋น๋ ํฌ์ธํฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
์ฑ๋์ ์ฌ์ฉํ์ฌ ๋ฐ์ํ๋ ์ง๋ ฌํ/์ญ์ง๋ ฌํ ๊ฐ/๋งค๊ฐ๋ณ์ ๋น์ฉ์ ์ค๋ฒํค๋๋ ์ธ๊ธํ์ง ์์ต๋๋ค.
์ข์ ํ๋ ์์ํฌ๋ ๊ทธ๊ฒ์ด ๋์ ํ๋ ์๋ก์ด ๊ธฐ๋ฅ/ํจ๋ฌ๋ค์๊ณผ C++๊ฐ ์ผ๋ถ์ธ ๊ฒ์ ๋ถ์ ํ ์ ์๋ ํ์ฌ ์์ฝ์์คํ /๋ ๊ฑฐ์์ ์ผ๋ง๋ ์ฝ๊ฒ ํตํฉํ ์ ์๋์ง ์ฌ์ด์ ๊ท ํ์ ๋๋ค.
@nhachicha @csga5000 ์ C++๋ฅผ ์ง์ ํตํฉํ๋ ๊ฒ์ด ์ค์ํ๋ค๋ ๋ฐ ๋์ํ์ง ์์์ต๋๋ค. ๊ทธ๋ Flutter๋ฅผ Dart ์ฝ๋ ์์ด๋ C++์์ ์ง์ ์ฌ์ฉํ ์ ์๋์ง ๋ฌป๋ ์ด์ ์๊ฒฌ์ ๋ตํ์ต๋๋ค.
์ฑ๋ฅ์ ๋ชจ๋ฐ์ผ ์ฑ์์ ๋ฌด์ํ ์ ์๋ ์์ค์ด๋ฉฐ, C++๊ฐ ํฌํจ๋ ํ๋ซํผ ์ฑ๋์ ์ฌ์ฉํ๋ฉด ๊ธฐ์กด C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ํธ ์์ฉํ ๋ ํธ๋ฆฌํฉ๋๋ค.
@nhachicha ๋ ๋์ํ ์ ์์ต๋๋ค.
์ง์ค์ ์ด๋นจ์ ๊นจ๋ ์ฑ๋ฅ์ด ํ์ํ์ง ์์ ์์ฉ ํ๋ก๊ทธ๋จ(๋ง์)์ ๋ํ ๊ฒ์ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ง์คํฐ C++๋ฅผ ๋ ์์ฐ์ ์ธ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ฌ์ค Dart๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. Dart๋ณด๋ค ํจ์ฌ ๋ ๋์ค์ /ํ๋ฆฝ) ์ธ์ด:
๊ทธ๋ฆฌ๊ณ ๊ฐ์ธ์ ์ผ๋ก ์ด๋ฌํ ์ธ์ด ์ค ์ผ๋ถ๋ฅผ ๋งค์ผ ์ฌ๋ํ๊ณ ์ฌ์ฉํ๋ ๋งํผ C ๋ฐ C++๋ Linux์ ํต์ฌ์ด๋ฏ๋ก Android, iOS ๋ฐ Windows, MacOS ๋ฐ ๊ธฐํ ๋ฐ์คํฌํฑ๊ณผ ๊ฐ์ ๋ฐ์คํฌํฑ ํ๋ซํผ์ ๋๋ค. ์์ ์ธ์ด ์ค ์ ๋ฐ(Dart ํฌํจ)์ C++๋ก ์์ฑ๋์์ต๋๋ค. ์ต์ฒจ๋จ ๊ธฐ์ ์ AI(Tensorflow๋ C++, Caffe C++, Pytorch๋ Python์์ C ๋ฑ), ์ฆ๊ฐ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ, AAA ๊ฒ์ ์์ง ๋ฐ GPU(CUDA)์ ๊ฐ๊น์์ผ ํ๋ ๋ชจ๋ ๊ฒ๊ณผ ๊ฐ์ ์กฐ์ ๋ ๊ธฐ๋ณธ ์ฑ๋ฅ์ ๊ณ์ํด์ ์๊ตฌํฉ๋๋ค. , C/C++์์ ํธ์ถ๋จ).
Flutter ๋ ๋๋ง ์์ง ์์ฒด๊ฐ C++ (๋ค์ดํฐ๋ธ, ๊ณ ์ฑ๋ฅ, ๋ฐฐํฐ๋ฆฌ/๋ฉ๋ชจ๋ฆฌ/cpu ํจ์จ)๋ก
_์ฐธ๊ณ ๋ก ์ ๋ ์์ ์ ํจ์ฑ ๊ฒ์ฌ์์ ํฝ์ ์ ฐ์ด๋์ ์ด๋ฅด๊ธฐ๊น์ง ๋ชจ๋ ๊ฒ์ C/C++๋ก ์์ฑํ๊ณ ์์ง๋ง ์ด๊ฒ์ด ์ด ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณด๊ณ ์๋ ๋ง์ ์ฌ๋๋ค์ ๊ฒฌํด์ธ ์ฒํ๋ ๊ฒ์ ์๋๋๋ค. ๋งค์ฐ ์์ฐ์ ์ธ ์ธ์ด - ๊ทธ๋ฌ๋ ์ ์ ์ผ๋ก ๊ฐ์ธ์ ์ธ ์ ํ์ ๋๋ค._
์ด๊ฒ์ด C++ ํตํฉ์ด ํ์ํ ์ฃผ์ ์ด์ ์ค ํ๋์ ๋๋ค.
C/C++ ํตํฉ์ ๋ํ ๋ ๊ฐ์ง ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๋ถํํ๋ ์ด ๋ ๊ฐ์ง ๋ชจ๋ ์ฐ๋ฆฌ๊ฐ ์ถ๊ตฌํ๋ ๋ฐ ๋ฐฉํด๊ฐ ๋๋ ์ฃผ์ ๋จ์ ์ด ์์ต๋๋ค.
๋ ๋ฐ๋์งํ ๋์์ dart:ffi
์ ๋์
์
๋๋ค. ๋ค์ดํฐ๋ธ ์ฝ๋์ ์ง์ ๋ฐ์ธ๋ฉํ ์ ์๋ Dart VM์ ํต์ฌ ๊ตฌ์ฑ ์์๋ก ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ์์ฑํ ์ ์์ต๋๋ค.
import 'dart:ffi' as ffi;
// Bind foo to symbol _foo from library libxyz.so with signature
// int32_t (int32_t, double, char*).
@ffi.import("libxyz.so", name: '_foo',
signature: ffi.Signature(ffi.Int32, [ffi.Int32, ffi.Double, ffi.PChar]))
extern int foo(int foo, double x, String foo);
์ฐ๋ฆฌ๋ ์ค๋ซ๋์ ์ด์ ๊ฐ์ FFI๋ฅผ ๊ตฌํํ๋ ๋ฐ ์๋นํ ๊ด์ฌ์ ๊ฐ์ง๊ณ ์์์ต๋๋ค. ๊ฐ๊น์ด ์ฅ๋์ FFI๋ฅผ ์คํํ ๊ฒ์ผ๋ก ์์ํ์ง๋ง ๊ตฌ์ฒด์ ์ธ ์ผ์ ์ ๋ํด์๋ ์ฝ์ํ์ง ์๊ฒ ์ต๋๋ค.
@kirbyfan64 ๋ง์ต๋๋ค, @nailgilaziev , @bytesoftly C++ ํตํฉ์ด ํ์ํ์ง ์๋ค๊ณ ๋งํ๋ ๊ฒ์ด ์๋๋ผ ๊ทธ๋ฅ ํ๋ฌํฐ ์ง์์ C++ INPLACE of dart - ํ์ง๋ง ํตํฉ์ด ํ์ํ์ง ์๋ค๊ณ ๋งํ๋ ๊ฒ์ด ์๋๋๋ค. @mraleph ๊ฐ ๋งํ๋ ๊ฒ์ ๋์๊ฒ ๋๋ํ๊ฒ ๋ค๋ฆฝ๋๋ค.
@mraleph The Dartino๋ FFI์ ๋ํด ์ ์ฌํ ๊ตฌํ์ ํ์ต๋๋ค. ๋ถํํ๋ ๊ฒ์ด ์ผ๋ง๋ ์ด๋ ค์ด ์ผ์ ๋๊น?
@listepo์ ์ผ๋ถ์ ๋๋ค. Dartino์ FFI ๊ตฌํ์ ๋งค์ฐ ์ญ๋์ ์ด์์ต๋๋ค. ์ด๊ฒ์ Dart 1๋ณด๋ค ํจ์ฌ ๋ ์ ์ ์ธ Dart 2์ ๋ํด ์ํ๋ ๊ฒ์ด ์๋๋๋ค.
๊ฒ์์ ๋ฆ์์ง๋ง ์ฌ๊ธฐ์ ๋ ๋ค๋ฅธ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ต๋๋ค. ์ํธํ ๋ชฉ์ ์ผ๋ก c ํ์ผ๊ณผ ๋ฉ์๋๋ฅผ ๋คํธ์ ํฌํจํ๊ณ ์ถ์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋ฐ๋ผ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1) iOS ๋ฐ Android์ฉ ๋์ผํ ์ฝ๋, ์ฆ ObjC ๋๋ JNI ๊ณ์ธต์ ๊ฑฐ์น์ง ์์ต๋๋ค.
2) ์๋ฅผ ๋ค์ด JNI๋ฅผ ๋ ๋ฒ ํต๊ณผํ ๋๋ณด๋ค ๋ ํจ์จ์ ์ธ ๊ตฌํ์ ๋ฐ๋๋๋ค.
3) AngularDart์ ๊ฐ์ ํ์ ์น ์ฑ ๋๋ ์ด ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ๋ ํ์ ๋ฐ์คํฌํฑ ์ฑ์์ dart ๋ชจ๋ธ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๋ ๊ฐ๋ฅ์ฑ: https://github.com/google/flutter-desktop-embedding
์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ์ด ์์์ ์ธ๊ธํ @eseidelGoogle์ 2
@mraleph๊ฐ ์ ์ํ ๋๋ก FFI๋ฅผ ์ฌ์ฉํ๋ฉด ์ด์ ์๊ฒฌ์์์ ๊ฐ์ด 1)-3)์ด ํ์ฉ
@CryptUser C/C++ ์ฝ๋๊ฐ ๋ชจ๋ ํ๋ซํผ์์ ๋์ผํ ๊ฒฝ์ฐ FFI๋ฅผ ํตํด ํธ์ถํ๋ Dart ์ฝ๋๋ ๋ชจ๋ ํ๋ซํผ์์ ๋์ผํฉ๋๋ค.
@mraleph ์
@mraleph ์ด๋๊ฐ์ Dart์ FFI์ ๋ํ ๋ฏธํด๊ฒฐ ๋ฌธ์ ๊ฐ ์์ต๋๊น?
@dnfield ์ง๊ธ ๋ฐ๋ก ์ ์ถํ์ต๋๋ค https://github.com/dart-lang/sdk/issues/34452
C/C++/Rust ์ฝ๋๋ฅผ ์์ฑํ๊ณ ffi๋ฅผ ํตํด ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์์:
Android ํ๋ธ๋ฆฟ(Android 4.4)์์ ํ๋ฌํฐ๋ฅผ ํ
์คํธํฉ๋๋ค.
ํ๋ญ์ด๋ ๋น ๋ฅด๊ฒ ์คํ.
๊ทธ๋ฌ๋ ํ๋ซํผ ์ฑ๋์ ์ฌ์ฉํ๋ sqflite๋ก 1000 ํ์ ์ฝ์ผ๋ ค๊ณ ํ๋ฉด ์์ฒญ๋๊ฒ ๋๋ฆฝ๋๋ค.
์ด์ : sqlite ์ปค์ ๋ฆฌ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ์ง๋ง sqlite ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ ์ฌ์ฉํ ์ ์๋ค๋ฉด ๋์ผํ ์ฟผ๋ฆฌ๊ฐ ์ฆ์ ์คํ๋ฉ๋๋ค. (xamarin ๋ฐ ๊ธฐ๋ณธ Android ํ๋ก์ ํธ๋ก ํ ์คํธ๋จ).
์ฐ๋ฆฌ๋ ์ง๊ธ ์ด ๋ฌธ์ ์ ๊ฐ์ฅ ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ ผ์ํ๊ณ ์์ต๋๋ค. ์์ https://github.com/flutter/flutter/issues/7053#issuecomment-377711814์์ ์ธ๊ธํ๋ฏ์ด ์ด ๋ฌธ์ ์๋ ๋ง์ ๋ถ๋ถ์ด ์์ผ๋ฉฐ ์๋ง๋ ๋ถํ ํด์ผ ํ ๊ฒ์ ๋๋ค. :)
๊ทธ๋ฌ๋ FFI ํ์์ ๊ด์ฌ์ด ์๋ ์ผ๋ถ ์์ง๋์ด๋ฅผ ์ฐพ์์ต๋๋ค(https://github.com/flutter/flutter/issues/7053#issuecomment-415161464 ์ฐธ์กฐ). ์ง๊ธ ์ฐ๋ฆฌ์ ์ด์ ์ 1.0์ ์ถ์ํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋จ ์๋ฃ๋๋ฉด ์ด๊ฒ์ ๋ชฉ๋ก์์ ๊ฐ์ฅ ๋์ ๊ฒ์ ๋๋ค. ๊ทํ์ ์ง์์ ์ธ ํผ๋๋ฐฑ์ ๋ค์ ํ ๋ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๊ณต์ ํ ์งํ ์ํฉ์ด ๋ ์์ผ๋ฉด ์ด ๋ฌธ์ ๋ฅผ ์ ๋ฐ์ดํธํ๊ฒ ์ต๋๋ค.
์ ๋ Matlab/Simulink ์ฌ์ฉ์์ ๋๋ค. ๊ณ ๋๋ก ์ต์ ํ๋ CPU ํน์ c/cpp ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋ด ์๊ณ ๋ฆฌ์ฆ์ ํ๋ฌํฐ์ ํตํฉํ๊ณ ์ถ์ต๋๋ค. ๋๋ ๋ง์ ์ด๋ฏธ์ง ์ฒ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ค์ดํฐ๋ธ ์ฝ๋์ ๋ํ ๋ฐ์ธ๋ฉ ์์ฑ๊ธฐ๊ฐ ํ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋๋ ๋ชจ๋ ๋คํธ ํ๋ฌํฐ ๊ฒฝํ์ ์์ด๋ฒ๋ฆฌ๊ณ ์๋ง๋ฆฐ์ด๋ ๋์๊ฒ ๋ง๋ ๊ฒ์ ๋ฐฐ์ฐ๊ธฐ ์์ํ ๊ฒ์ ๋๋ค.
์งํ ์๋๋ฅผ ๋์ผ ์ ์์ต๋๊น?
Dart์ C๋ฅผ ์ํธ ์ด์ฉํ๋ ๊ฒ์ ์์ฒญ๋ ๊ณ ํต์ ๋๋ค.
ํ๋ก์ธ์ค๋ฅผ ์๋๋ฅธ๋ค๊ณ ํด์ ์ข์ ํ์ง์ ์ ํ์ด ๋์ค์ง๋ ์์ ๊ฒ์ ๋๋ค. ์ค๋น๋๋ฉด ์ค๋น๋ฉ๋๋ค. :-)
ํ๋ก์ธ์ค๋ฅผ ์๋๋ฅธ๋ค๊ณ ํด์ ์ข์ ํ์ง์ ์ ํ์ด ๋์ค์ง๋ ์์ ๊ฒ์ ๋๋ค. ์ค๋น๋๋ฉด ์ค๋น๋ฉ๋๋ค. :-)
๊ธ์, ๋ด๊ฐ ๋งํ๋ ค๊ณ ํ๋ ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋ ๋ง์ ์์๊ณผ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์ผ ์ ์๋๋ก ์ฐ์ ์์๋ฅผ ๋์ด๊ณ ์ถ์ ์๋ ์๋ค๋ ๊ฒ์ ๋๋ค. "ํฅํ ๋ช ๋ ๋ด์ ์์ ๋ " "๋ชฉํ"๋ฅผ ๋ชฉํ๋ก ํ๋ ํ์ฌ 1386๊ฐ์ ๋ฏธํด๊ฒฐ ๋ฌธ์ ๊ฐ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
์ค๋ ๋๋ฅผ ๋ค์ ํ ๋ฒ ์ฝ์ ํ @eseidelGoogle์์ Flutter 1.0์ด ์ค๋น๋ ํ์ ์ด๊ฒ์ด ๋ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ๊ฒ ๋ ๊ฒ์ด๋ผ๊ณ ๋งํ์ต๋๋ค. ์ ๊ณ ๋ฏผ์ ์ ํด๊ฒฐํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
"๋ชฉํ"๊ฐ ์๋ชป๋ ๋ฒํท์ผ ์ ์์ต๋๋ค. :) @mraleph ๋ ์ฐ๋ฆฌ๊ฐ ๋งํ๋ ๋์ https://github.com/dart-lang/sdk/issues/34452 ๋ฅผ ํ์ํ๋ ์ฌ๋์ด ์์ต๋๋ค. ๊ทธ๊ฒ์ ์ ์ด๋ ์๋ฃจ์ ์ ์ผ๋ถ์ ๋๋ค.
๋ค์์ ํ์ฌ Dart ์ธก์์ ํ๋กํ ํ์ดํ ์ค์ธ FFI์ ๋ํ ๋น์ ๋ฌธ์ ์ ๋๋ค.
์ดํด๋ณด๊ณ ์ด๋ป๊ฒ ์๊ฐํ๋์ง ์๋ ค์ฃผ์ธ์.
FFI ๋ถ๋ถ์ ๊ทธ๋ฐ๊ฑธ ์จ๋ณธ์ ์ด ์์ด์ ๋ญ๋ผ ๋ง์ ๋ชปํ๊ฒ ๋๋ฐ
ํ์ง๋ง ํ ํตํฉ์ด ์ด๋ป๊ฒ ๋ณด์ผ์ง ๊ถ๊ธํฉ๋๋ค.
FFI๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํจํค์ง๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋ฉ๋๊น?
FFI๋ฅผ ์ฌ์ฉํ๋ ํจํค์ง๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํฉ๋๊น?
@zoechi ์ฐ๋ฆฌ๋ ์์ง pub
ํตํฉ์ ๋ํด ๋
ผ์ํ์ง ์์์ต๋๋ค.
์ค๋๋ Flutter ํ๋ฌ๊ทธ์ธ๊ณผ ์ ์ฌํ๊ฒ ์๋ํ ์ ์์ด์ผ ํฉ๋๋ค. ํ๋ซํผ/์ํคํ ์ฒ์ ์ ํฉํ ์์ค ๋ฐ/๋๋ ์๋น ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ์ปดํ์ผ/๋งํฌํ ์ ์๋ ๋ฐ์ด๋๋ฆฌ๋ฅผ ํฌํจํฉ๋๋ค.
ํ์ ๊ด์ ์์ ๋ณด๋ฉด ํจํค์ง์ ๋ ํฐ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ด ํฌํจ๋ ์ ์๋ค๋ ์ ์ ์ ์ธํ๊ณ ๋ ํฐ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค.
Flutter ํ๋ก์ ํธ์ ํตํฉํ๋ ค๋ฉด Flutter ๋๊ตฌ ๋๋ถ๋ถ์ ์ฝ๊ฐ์ ์์ ์ด ํ์ํฉ๋๋ค. ํ์ฌ Android/iOS ํ๋ฌ๊ทธ์ธ๊ณผ ์์ ํ ๋์ผํ๊ฒ ์๋ํ์ง ์์ ๊ฒ์ ๋๋ค.
์ด ๋ฌธ์ ์ ๋ ์ง์คํ๊ธฐ ์ํด pub-integration์ dart-lang/pub ๋ฌธ์ ๋ก ์ฎ๊ฒจ์ผ ํฉ๋๊น?
๋๋ '๋น์ ๋ฌธ์'๋ฅผ ์ฝ์๊ณ ๋ง์นจ๋ด ์๊ฐ ์ฌ์ด๋ก ๋ชจ์์ด ๋ณด์ ๋๋ค.
๊ทธ ๋์ ๋๋ ํจ์ฌ ๋ค๋ฅธ ๊ฒ์ ๋ํด ์๊ฐํ๊ณ ์์๋ค.
์ฆ, Flatbuffer ๋ฅผ (์ฌ)์ฌ์ฉํ์ฌ
๋ฉ์์ง ์ ๋ฌ ๋ฐฉ์์ ํ์ฌ ์คํธ๋ฆผ ๊ธฐ๋ฐ ์ํคํ ์ฒ(Bloc, Rx)์๋ ์ผ์นํฉ๋๋ค. ์ปดํ์ผ๋ฌ๊ฐ ์ ์ ํ ๊ฒฝ์ฐ ์ ์ ํ ๋ง ๋ฒํผ๋ฅผ ์์ฑํ๊ฑฐ๋ ํธ์ถ ์์ ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ ์ค๋ ๋ณด์ ํด์ผ ํ๋ ๊ฐ๋จํ 'ํธ์ถ ์์ ์ ํด์ '๋ฅผ ๊ฐ์ ํ ์ ์์ผ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋ํ ์ฐ๋ ค๋ ๋ฌดํจํ๋ฉ๋๋ค.
ํ์ง๋ง ์์งํ ๋งํด์ Flutter(Fuchsia) ์ํ๊ณ์ ๋งค๋๋ฝ๊ฒ ํตํฉ๋๊ณ Dart ์ฑ ๋ด์์ cpu์ ์ต์ ํ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค๋ฉด ์ด๋ค ํํ์ ffi์๋ ๋ฐ์๋ฅผ ๋ณด๋ด๊ฒ ์ต๋๋ค.
@ohir ๋น์ ์ด ์์ํ๋ ๊ฒ์ ๋ฒ๊ทธ์ ๋ํ๋ ์ผ๋ถ ๋ฌธ์ ์ ๋ํ ๋ ๋ค๋ฅธ ํด๊ฒฐ์ฑ ์ด ๋ ๊ฒ์ ๋๋ค. ์ด ๋ฒ๊ทธ๋ C++์ ๊ด๋ จ๋ ๋ชจ๋ ๊ฒ์ ํฌ๊ดํ๋ ๋ฒ์ฉ์ผ๋ก ๋ฐ์ ํ์ต๋๋ค. :/ ๋๋ (์ด์ ์๊ฒฌ์์ ์ธ๊ธํ๋ฏ์ด) ์ด ๋ฒ๊ทธ๋ฅผ ๋ ์์ ๊ฒ์ผ๋ก ๋๋ ํ์๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. FFI ์์ ์ ์ฐ๋ฆฌ๊ฐ ์ด ๋ถ์ผ์์ ๊ตฌ์ถํ๋ ์ ์ผํ ์๋ฃจ์ ์ด ์๋ ์๋ ์์ต๋๋ค.
@eseidelGoogle ์ด์ ๋ํ ์ง์ ์ด ์์ต๋๊น? ํ์ฌ dart ํจํค์ง๋ ์คํ ๊ฐ๋ฅํ ์๋ฃจ์ ์ ์ ๊ณตํ ์ ์๊ธฐ ๋๋ฌธ์ ffmpeg๋ฅผ ํตํด ์ํํ ์ ์๋ ๋ฌด๊ฑฐ์ด ๋น๋์ค ์ฒ๋ฆฌ ์์ ์ ๊ตฌํํด์ผ ํ๋ ํ๋ก์ ํธ๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ flutter๊ฐ ffmpeg lib๋ฅผ ์ง์ ํธ์ถํ๊ธฐ๋ฅผ ๊ฐ์ ํ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค.
ํ์ด์ง ๊ฐ UI ๊ธฐ๋ฐ ์ฑ์ ๊ฒฝ์ฐ ์ด์ ํ๋ฌํฐ๋ Android์ ios ๋ชจ๋์์ ์ด์ค ์ฝ๋ฉ ์์ ์ผ๋ก ์ ํํ๋ ๊ฒ๋ณด๋ค ์ ๋ง ์ข์ ์ ํ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ณ๊ฒฝ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ํ์ฌ Flutter์ ์ด์ ์ ์ด์ ๋ฐฉ์์ผ๋ก ์ด๋ฏธ ์ถฉ๋ถํ ์์ ์ ์ํํ๊ธฐ ๋๋ฌธ์ ํ์ฌ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ํ์ฌ์๊ฒ ์จ์ด ๋งํ ์ ๋๋ ์๋๋๋ค.
dart๊ฐ ์ธ์ ๊ฐ๋ ๊ทธ ์์ ์ ์ ํฉํ์ง ์๊ฑฐ๋ ์คํ ๊ฐ๋ฅํ์ง ์๋ค๋ ๊ฒ์ ์๋ฏธํ์ง๋ ์์ง๋ง ํ๋ฌํฐ ์ํ๊ณ์ ํฌํจ๋ ์ ์๋ ์ผ๋ฐ IT ํ์ฌ์ ๊ด์ ์์ ํ์ํ ๊ฒ์ ํฌ๋ก์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋น์ฉ์ ์ค์ด๋ ๊ฒ์ ๋๋ค. ํ๋ซํผ ์ฝ๋ฉ ๋ฐฉ๋ฒ์ ํด๋ผ์ด์ธํธ ์ธก ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ๋น๋์ค/์ค๋์ค, AR ์ง์ ๋ฑ๊ณผ ๊ฐ์ด ์ด๋ฏธ c/c++๋ฅผ ํตํด ์ํํ ์ผ๋ถ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ ํ ๊ฐ์ฅ ๋ฉ์ง ๊ธฐ๋ฅ์ ๋ฌ์ฑํ ์ ์๋ ๊ฒฝ์ฐ์๋ง ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ค์ด dart lang์ ์ฌ์ฉํ์ฌ ๊ทธ๊ฒ์ ๋ค์ ๊ตฌํํ๊ฑฐ๋ ์ฌ๋ฐ๋ช ํ๋ ๊ฒ์ ์ ๋ง ์ด๋ ต์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ํต์ฌ ์๋ฃจ์ ์ flutter๊ฐ C++์ ํต์ ํ ์ ์๋ ์ง์ ์ ์ด๊ณ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ๋์ ํ๋ ๊ฒ์ ๋๋ค. ์ ๋ ์ด๊ฒ์ด "ํฌ๋ก์ค ํ๋ซํผ"์ ์ต์ฐ์ ์์๋ผ๊ณ ์๊ฐํฉ๋๋ค. UI ์ง์์ ์ํ dart๋ ์๋ฒฝํ๊ณ ์ผ๋ถ ์ผ๋ฐ ๋ฐ์ดํฐ ๋ ผ๋ฆฌ๋ ๊ฐ๋ฅํฉ๋๋ค. ๋คํธ์์ ์ํ๋์ง๋ง, ์๋ก์ด ๊ฒ์ ์ฌ๊ตฌ์ถํ๋ ๊ฒ๋ณด๋ค ํ๋ฌํฐ๊ฐ ๊ธธ์ง๋ง ์ฌ์ ํ ํ๋์ ์ด๊ณ ํจ์จ์ ์ธ C++ ์ํ๊ณ์ ๋ณํฉํ๋ ๊ฒ์ด ํจ์ฌ ๋ซ์ต๋๋ค!
์ง์ ํ "ํฌ๋ก์ค ํ๋ซํผ" ์ฝ๋ฉ ๊ฒฝํ์ ๊ฟ์ ๋ด๋ถ์ C++๊ฐ ์๊ณ Java ์ฝ๋๊ฐ ์ ํ ์๊ณ OC ์ฝ๋๊ฐ ์ ํ ์๋ dart UI ์ง์์ ๋๋ค. ์ํํ, ๋๋ ๊ทธ๊ฒ์ด ์ผ์ด๋๋ ๊ฒ์๋ณด๊ณ ์ถ์ด ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค!
@smellbee ffmpeg ๋ช ๋ น์ค์ ์ฌ์ฉํ ์ ์์ต๋๊น?
@smellbee I featr ์ด ์ง๋ฌธ์ ๋ตํ ์ ์๋ ์ฌ๋์ด ์๋๋๋ค. @eseidelGoogle ์ด์ ๋ํ ์์์ด ์์ต๋๊น?
@smellbee ffmpeg ๋ช ๋ น์ค์ ์ฌ์ฉํ ์ ์์ต๋๊น?
ffmpeg lib๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋์ค ํ๋ ์์ ๋ ๋๋งํ์ฌ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ ์คํธ๋ฆผ์ ์์ฑํ๋ ํด๋ผ์ด์ธํธ ์ธก ์์ ์ ๋๋ค. ๋ช ๋ น์ค์ ์ฌ์ฉํ ์ ์์ต๋๊น?
@smellbee I featr ์ด ์ง๋ฌธ์ ๋ตํ ์ ์๋ ์ฌ๋์ด ์๋๋๋ค. @eseidelGoogle ์ด์ ๋ํ ์์์ด ์์ต๋๊น?
์ฃ์กํฉ๋๋ค. "es"๋ฅผ ์ ๋ ฅํ๊ณ ์๋์ผ๋ก ์๋ฃ ๋์์ง๋ง ๋์น์ฑ์ง ๋ชปํ์ต๋๋ค.
์์ ์ Dart ์ชฝ์์ ์งํ ์ค์ ๋๋ค. ์ฐ๋ฆฌ๋ 2019๋ 1๋ถ๊ธฐ์ ๋ฌด์ธ๊ฐ๋ฅผ ์ค๋นํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ทธ๊ฒ์ ํฐ ๊ธฐ๋ฅ์ด๋ฉฐ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์ฌ๋ฐ๋ฅด๊ฒ ๋ง๋ค๊ณ ์ถ์ต๋๋ค. ์ฐ๋ฆฌ๋ Dart์ ๋ค์ํ ์คํ ๋ชจ๋์์ ํ๋ฅญํ๊ฒ ์๋ํ๊ธฐ๋ฅผ ์ํ๋ฏ๋ก ์ธ๋ถ ์ฌํญ์ ์ฒ๋ฆฌํ๋ ๋์ ์ฐ๋ฆฌ๋ฅผ ๊ธฐ๋ค๋ ค์ฃผ์ญ์์ค.
Dart ์ธก์์ ์์ ์ ์ถ์ ํ๋ dart-lang/sdk#34452๋ฅผ ๋ฐ๋ฅผ ์ ์์ต๋๋ค.
Dart FFI๋ฅผ ์ฌ์ฉํ๋ฉด Dart์์ C ํจ์๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ C++ ๊ธฐ๋ฅ(ํด๋์ค, ํ์ค ์ปจํ
์ด๋, ์ค๋งํธ ํฌ์ธํฐ, ์์ธ)์ ์ด๋ป์ต๋๊น?
์ต์ํ์ ์์ฉ๊ตฌ๋ก C++ ํด๋์ค๋ฅผ Dart๋ก ๋ด๋ณด๋ผ ๊ฐ๋ฅ์ฑ์ ๊ธฐ๋ํ ์ ์์ต๋๊น?
๋ ๋ค๋ฅธ ์ค์ํ ๊ธฐ๋ฅ์ ๋น๋๊ธฐ ์ง์์ ๋๋ค. C++ ์ฝ๋๋ฅผ ๋ณ๋์ ์ค๋ ๋์์ ์คํํ๊ณ ๋ฉ์๋์์ Future/Stream์ ๋ฐํํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
@t-artikov C++ ์ํธ ์ด์ฉ์ฑ์ ์ง์ ์ง์ํ ๊ณํ์ ํ์ฌ ์์ต๋๋ค. ๋๋ฌด ๋ณต์กํฉ๋๋ค. C++์ ์ธ์ฒด๊ณตํ์ ์ผ๋ก ์ํธ ์ด์ฉํ ์ ์๋ ์ ์ผํ ๊ฒ์ C++์ ๋๋ค.
C++์์ ๋์ ์์ค์ ์ํธ ์ด์ฉ์ฑ์ ๊ด์ฌ์ด ์๋ค๋ฉด C์ ๊ฐ์ API๋ฅผ ํตํด C++ API๋ฅผ ๋ ธ์ถํ๋ ๊ณ ์ ํ ์ํธ ์ด์ฉ์ฑ ๊ณ์ธต์ ๊ตฌ์ถํด์ผ ํฉ๋๋ค.
๋ ๋ค๋ฅธ ์ค์ํ ๊ธฐ๋ฅ์ ๋น๋๊ธฐ ์ง์์ ๋๋ค. C++ ์ฝ๋๋ฅผ ๋ณ๋์ ์ค๋ ๋์์ ์คํํ๊ณ ๋ฉ์๋์์ Future/Stream์ ๋ฐํํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
ํจํค์ง๋ก ๋ง๋ค ์ ์์ ๊ฒ ๊ฐ์์. ์ฐ๋ฆฌ๋ ์ด๊ฒ์ด ๊ตฌ์ถ๋ ์ ์๋๋ก ์ฌ๋ฐ๋ฅธ ํ๋ฆฌ๋ฏธํฐ๋ธ๋ฅผ ์ ๊ณตํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
Dart FFI๋ฅผ ์ฌ์ฉํ๋ฉด Dart์์ C ํจ์๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ C++ ๊ธฐ๋ฅ(ํด๋์ค, ํ์ค ์ปจํ ์ด๋, ์ค๋งํธ ํฌ์ธํฐ, ์์ธ)์ ์ด๋ป์ต๋๊น?
์ต์ํ์ ์์ฉ๊ตฌ๋ก C++ ํด๋์ค๋ฅผ Dart๋ก ๋ด๋ณด๋ผ ๊ฐ๋ฅ์ฑ์ ๊ธฐ๋ํ ์ ์์ต๋๊น?
C++์์ dart๋ฅผ ํธ์ถํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ ํ, ๊ทธ๋ฐ ์ผ์ด ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํฉ๋๋ค. C++๋ C++๊ฐ ๊ฑฑ์ ํ๋ ๊ฒ์ ์ฒ๋ฆฌํ๊ณ ํธ์ถ๋๊ฑฐ๋ ํธ์ถํ์ฌ dart์ ํต์ ํ๋ฏ๋ก ์ ์์ค ์กฐ์์ ๋ ธ์ถํ ํ์๊ฐ ์์ต๋๋ค. ๋คํธ์ ์ฌ์ฉ ํธ์์ฑ์ ํ๊ดดํ๋ ๋คํธ.
๋ ๋ค๋ฅธ ์ค์ํ ๊ธฐ๋ฅ์ ๋น๋๊ธฐ ์ง์์ ๋๋ค. C++ ์ฝ๋๋ฅผ ๋ณ๋์ ์ค๋ ๋์์ ์คํํ๊ณ ๋ฉ์๋์์ Future/Stream์ ๋ฐํํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ dart๋ ์ด๋ฏธ ๋น๋๊ธฐ์ ๋ฉ์ปค๋์ฆ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ฐ๋ผ์ C++ ๋ถ๋ถ์ด ํ์ํ ๋๋ง๋ค dart๋ฅผ ํธ์ถํ ์ ์๊ณ "๊ฒฉ๋ฆฌ"๊ฐ ์์ ์ ์ํํ ์๋ง ์๋ค๋ฉด ์ค๋ ๋๊ฐ C++ ์งํฅ์ ์ธ์ง ์ฌ๋ถ๋ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
๊ทธ๊ฒ์ด ๋ด๊ฐ ์๊ฐํ๋ ๊ฒ์ ๋๋ค @mraleph , ๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ์ ๋ฅผ ์์ ํ์ญ์์ค ;)
@mraleph
์ฌ์ค, ๋ค๋ฅธ ์ธ์ด์์ ํ๋ฅญํ C++ ์ํธ ์ด์ฉ์ฑ์ ์๊ฐ ์์ต๋๋ค.
https://github.com/boostorg/python
https://github.com/ThePhD/sol2
https://github.com/dropbox/djinni
Dart/Flutter๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฌํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
C++์์ ๋์ ์์ค์ ์ํธ ์ด์ฉ์ฑ์ ๊ด์ฌ์ด ์๋ค๋ฉด C์ ๊ฐ์ API๋ฅผ ํตํด C++ API๋ฅผ ๋ ธ์ถํ๋ ๊ณ ์ ํ ์ํธ ์ด์ฉ์ฑ ๊ณ์ธต์ ๊ตฌ์ถํด์ผ ํฉ๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ์ด๋ป๊ฒ ์ ์ฉํ ์ ์๋์ง ๋ช ํํ ํ๊ธฐ ์ํด ๋ค์ ะก++ ํด๋์ค๋ฅผ ์๋ก ๋ค์ด ๋ณด์ฌ์ฃผ์ค ์ ์์ต๋๊น?
struct MyObject
{
std::string name;
std::vector<int> data;
};
class MyService
{
// Can throw std::exception
std::shared_ptr<MyObject> createObject(std::string name, std::vector<int> data);
};
Dart์์ ์ฌ์ฉํ ์ ์๋๋ก
var service = MyService();
var object = service.createObject("foo", [1, 2, 3]);
assert(object.name == "foo");
assert(object.data[0] == 1);
@t-artikov boostorg::python
๋ฐ sol2
๋ ๋ค ์ค์ ๋ก ๋ด ์์ ์ ์ ๋ณด์ฌ์ค๋๋ค. ์ด๊ฒ์ ๋ค๋ฅธ ์ธ์ด์ ์ํธ ์ด์ฉํ๊ธฐ ์ํ C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด์ง ๊ทธ ๋ฐ๋๊ฐ ์๋๋๋ค. Dart FFI๋ Dart๋ฅผ ํธ์ถํ๋ C++ ์ค์ฌ ๋ฐฉ์์ด ์๋๋ผ C API๋ฅผ ํธ์ถํ๋ Dart ์ค์ฌ ๋ฐฉ์์
๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ์ด๋ป๊ฒ ์ ์ฉํ ์ ์๋์ง ๋ช ํํ ํ๊ธฐ ์ํด ๋ค์ ะก++ ํด๋์ค๋ฅผ ์๋ก ๋ค์ด ๋ณด์ฌ์ฃผ์ค ์ ์์ต๋๊น?
์ด์ ๊ฐ์ด ์์ฑ(๋๋ ์ผ๋ถ ๋๊ตฌ๋ก ์์ฑ)ํด์ผ ํฉ๋๋ค.
// To be compiled together with your code.
typedef std::shared_ptr<MyObject>* MyObjectPtr;
MyService* MyService_create() {
return new MyService();
}
void MyService_destroy(MyService* ptr) {
delete ptr;
}
MyObjectPtr MyService_createObject(MyService* ptr, const char* name, int* data, size_t size) {
try {
return new std::shared_ptr<MyObject>(createObject());
} catch (...) {
return nullptr;
}
}
const char* MyObject_getName(MyObjectPtr obj) {
return (*obj)->name.c_str();
}
int* MyObject_data(MyObjectPtr obj) {
return (*obj)->data.data();
}
void MyObject_destroy(MyObjectPtr obj) {
delete obj;
}
// To be included on the Dart side.
@ffi.External()
external Pointer<Void> MyService_create();
@ffi.External()
external void MyService_destroy(Pointer<Void> ptr);
@ffi.External<Pointer<Void> Function(Pointer<Void>, Pointer<Void>, Pointer<Void>, Int32)>()
external Pointer<Void> MyService_createObject(Pointer<Void> service, String name, Int32List data, int size);
@ffi.External()
external String MyObject_getName(Pointer<Void> obj);
@ffi.External()
external Pointer<Int32> MyObject_data(Pointer<Void> obj);
@ffi.External()
external void MyObject_destroy(Pointer<Void> ptr);
class MyService {
final Pointer<Void> _impl;
MyService() : _impl = ffi.anchor(MyService_create(), MyService_destroy);
MyObject create(String name, List<int> values) {
final Int32List data = Int32List.fromList(values);
return MyObject._(MyService_createObject(_impl, name, data, data.length));
}
static _destroy(Pointer<Void> ptr) {
return MyService_destroy(ptr);
}
}
class MyObject {
final Pointer<Void> _impl;
MyObject._(Pointer<Void> impl) : _impl = anchor(impl, MyObject.destroy);
String get name => MyObject_getName(_impl);
Int32List data => MyObject_data(_impl).as<Int32List>();
static void destroy(Pointer<Void> ptr) { MyObject_destroy(ptr); }
}
์ด๊ฒ์ ๋ค๋ฅธ ์ธ์ด์ ์ํธ ์ด์ฉํ๊ธฐ ์ํ C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด์ง ๊ทธ ๋ฐ๋๊ฐ ์๋๋๋ค.
๋น์ ์ ํ๋ ธ์ต๋๋ค. ๊ทธ๋ค์ C++ ํด๋์ค๋ฅผ ๋ค๋ฅธ ์ธ์ด์ ๋
ธ์ถํ๋๋ก ํ์ฉํฉ๋๋ค.
https://www.boost.org/doc/libs/1_68_0/libs/python/doc/html/tutorial/tutorial/exposing.html
Dart FFI ์์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋ช ๊ฐ์ง ๊ฒฐํจ์ด ์์ต๋๋ค. C++ ์์ธ๋ Dart ์ธก์ ์ ๋ฌ๋์ด์ผ ํฉ๋๋ค. MyObject.data๋ ์ด ๋ฐฉ์์ผ๋ก ์๋ํ์ง ์์ต๋๋ค(ํฌ์ธํฐ๋ง ๊ฐ์ ธ์ค๊ณ ๋ฐ์ดํฐ ํฌ๊ธฐ๋ ๊ฐ์ ธ์ค์ง ์์).
๊ทธ๋ฌ๋ ์์ด๋์ด๋ ๋ถ๋ช
ํฉ๋๋ค.
์ ์๊ฐ์ ๊ทธ๋ฌํ ์ฝ๋๋ ์๋์ผ๋ก ์์ฑํ๊ธฐ์๋ ๋๋ฌด ์ฅํฉํฉ๋๋ค.
์ด ํ๋ก์ธ์ค๊ฐ ์๋ก์ด Dart FFI Flutter Engine ๋ฐ์ธ๋ฉ์ ๋ํด ์๋ํ๋ ์ง ๊ธฐ๋๋ฉ๋๋ค.
C++ ์ํธ ์ด์ฉ์ฑ์ ์ํ ๋ฐํ์ ๋ฐ์ธ๋ฉ์ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค(์ ๋ค๋ฆญ, ๋ค์ค ์์, ์ฐ์ฐ์ ์ค๋ฒ๋ก๋, ๋งน๊ธ๋ง๋ ์ด๋ฆ ๋ฑ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํฉ๋๊น?). ๋ง์ ํ๋ ์๋(BridJ, CppSharp ๋ฑ)๊ฐ ์์๊ณ ๋ด๊ฐ ์ดํดํ๊ธฐ๋ก๋ ์ฌ๋๋ค์ C interop์ด ๊ฐ์ฅ ์คํ ๊ฐ๋ฅํ ์ต์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๊ณต์ ์ํธ ์ด์ฉ์ฑ ๊ฐ๋ฐ์๊ฐ C++์ ๋ํด ๋ฌ์ฑํ ์ ์๋ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ์๋ฃจ์ ์ ๊ฑฐ์ ์์ต๋๋ค. Kotlin/Native๋ ์ด๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค. ์ค์นผ๋ผ ๋ค์ดํฐ๋ธ iether. .NET(Microsoft C++ interop์ ํญ์ ์ด์ํ๊ฑฐ๋ ์ ์ ์). JNI๋ ์ ์ ์ปดํ์ผ์ด ๊ด๋ จ๋ ๊ฒฝ์ฐ์๋ง C++ interop์ ์ง์ํฉ๋๋ค. ํ์ด์ฌ ๋ถ์คํธ ๊ธ๋ฃจ์ ๊ฐ์ ๊ฒ์ ์๋์ผ๋ก ์์ฑํด์ผ ํฉ๋๋ค. ๋ชจ๋ ์ 3์ ๊ทธ๋ฃน์ JNAerator์ ๊ฐ์ ๊ฒ์ ๊ฐ๋ฐํ ์ ์์ต๋๋ค.
์ค์ ๋ต๋ณ์ด ์๋ ์ด ๋ํ์ ์ด์ด ์ ๋ ํฌ๋ก์ค ํ๋ซํผ์ด๊ณ ์์ ํ C++ ์ง์์ ์ ๊ณตํ๋ Qt๋ฅผ ๊ณ ์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ค์ ํ๋ก์ ํธ์ Flutter๋ฅผ ์๋ํด ๋ณด๊ณ ์ถ์์ง๋ง ์ง๊ธ์ ๊ทธ๋ ์ง ์์ต๋๋ค. ์ ๋ง ๊ฐ์ฌํฉ๋๋ค!
flutter๊ฐ C++๋ก ์์ฑ๋์ด ๋ค๋ฅธ ์ธ์ด์์ ์ํธ ์ด์ฉ์ด ์ฝ๊ฒ ๊ฐ๋ฅํ๋ค๋ฉด ๋ ์ข์์ ๊ฒ์ ๋๋ค. C++์์ flutter๋ฅผ ๋ค์ ์์ฑํ๋ ค๋ ์๋๊ฐ ์์ต๋๊น?
์ง๊ธ ๋ ผ์๊ฐ ๋ถํ์ํ๊ฒ ํ๋๋๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฐ๋ฆฌ๋ Flutter์ ๊ฐ๋ฐ ๋ก๋๋งต์ ๋ฌด์์ด ์๋์ง(๋๋ ๊ทธ๋ ์ง ์์์ง) ์๊ณ ์์ต๋๋ค.
๋ฐ๋ผ์ ํน์ ์ฌ์ฉ ์ฌ๋ก์ ๋ํด ์ฌ์ฉ(๋๋ ์ฌ์ฉํ์ง ์์)์ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
๊ฐ๋ฐ ์์ ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐ ์๋ฌด๋ฐ ๋์์ด ๋์ง ์๊ฑฐ๋
์ด ์ง์ ์ ๋์ด์๋ ํน์ ์ํคํ
์ฒ ๊ตฌํ์ด ํ์ํฉ๋๋ค.
๊ฐ์ฌ ํด์,
๊ฐ์ฐ๋ผํ
2019๋ 2์ 25์ผ ์์์ผ ์คํ 10์ 51๋ถ bhauj, ์๋ฆผ @github.com์ด(๊ฐ) ์์ฑํ์ต๋๋ค.
flutter๊ฐ C++๋ก ์์ฑ๋์๋๋ผ๋ฉด ๋ ์ข์์ ๊ฒ์ ๋๋ค.
๋ค๋ฅธ ์ธ์ด์์ ์ํธ ์ด์ฉ์ฑ์ด ์ฝ๊ฒ ๊ฐ๋ฅํ์ ๊ฒ์ ๋๋ค. ~์ด๋ค
C++์์ flutter๋ฅผ ๋ค์ ์์ฑํ๋ ค๋ ์๋๊ฐ ์์ต๋๊น?โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/flutter/flutter/issues/7053#issuecomment-467098455 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AZ86acDpZgNeyezx40uxe_c5E2xZHWxaks5vRBumgaJpZM4K-PLw
.
์ค์ ๋ก Flutter๋ C++๋ก ์์ฑ๋ ๊ฒ์ผ๋ก ์๊ณ ์์ง๋ง Flutter ํ๋ก๊ทธ๋๋ฐ์ ๊ฒฝ์ฐ VM์์ ์คํ๋๋ ์ธํฐํ๋ฆฌํฐ Language Dart๋ก๋ง ์ํํ ์ ์์ต๋๋ค. ํ์ง๋ง ์์ง Dart์์ Flutter์ C++ ๋ถ๋ถ์ผ๋ก ์ด๋ํ ๊ธฐํ๊ฐ ์์ต๋๋ค...
๋ฐ๋ผ์ ์ด ๊ธ์ ์ฝ๊ณ ์ข์ ํฌ๋ก์ค ํ๋ซํผ ๊ฐ๋ฐ ์ฑ ๊ฐ๋ฐ์ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์๋ ์ฌ๋์ด๋ผ๋ฉด Flutter์์ C++๋ฅผ ์ง์ ์ฌ์ฉํ๋ ๊ฒ์ ํ์ฉํ์ง ์์ ๊ฒ์ ๋๋ค. ํ์ํ ๊ฒฝ์ฐ Qt C++์ ๊ฐ์ ๋ค๋ฅธ ํฌ๋ก์ค ํ๋ซํผ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ธ์.
๋์๊ฒ C++๋ ๊ฑฐ์ ๋ชจ๋ ๊ธฐ์ ์์ ๊ฐ์ฅ ๋ฎ์ ๊ณตํต ๋ถ๋ชจ์ด๊ธฐ ๋๋ฌธ์ ํ๋ซํผ ๊ฐ ๊ฐ๋ฐ์ ํ์์ ์ ๋๋ค.
@aqmappdesigners
VM์์ ์คํ๋๋ ์ธํฐํ๋ฆฌํฐ Language Dart
์ ํํ์ง ์์ต๋๋ค.
Flutter๋ ๋๋ฒ๊ทธ ๋ชจ๋์์ Dart VM์ ์ฌ์ฉํ๋ฏ๋ก ํซ ๋ฆฌ๋ก๋๋ ๊ฐ๋ฅํฉ๋๋ค.
๋ฆด๋ฆฌ์ค ๋น๋์์ Dart๋ C++์ ๊ฐ์ ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ก ์ปดํ์ผ๋ฉ๋๋ค.
@zoechi ๊ฐ์ฌํฉ๋๋ค, ๋๋ ์ด๊ฒ์ ๋ชฐ๋์ต๋๋ค. ์ฑ๋ฅ์ ์ข์ ๊ฒ ๊ฐ๋ค.
์ฑ๋ฅ์ ์ข์ ๊ฒ ๊ฐ๋ค.
Apples App Store์ ์๊ตฌ ์ฌํญ์ ๋๋ค.
dart:ffi
ํ๋กํ ํ์
์ API ๊ฒฐ์ ์ ๊ฒฐ์ ํ๋ ์ง์ ๊น์ง ์งํ๋์์ต๋๋ค. (์ผ๋ถ ๋์์ธ ๊ฒฐ์ ์ ์ฌ๊ธฐ์์ ๋
ผ์
์ ๋ณด์ ์ ๊ฐํ ๋์์ธ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ธฐ ์ํด ๋ฐ์ธ๋ฉํ๋ ค๋ C API์ ๋ํ ๋ ๋ง์ ์๊ฐ ํ์ํฉ๋๋ค. ์ง๊ธ๊น์ง ์ด ๋ฌธ์ ์์๋ SQLite, Realm, OpenCV, Superpowered ๋ฐ ffmpeg์ ๋ํด ์ธ๊ธํ์ต๋๋ค. ๊ณ ๋ คํด์ผ ํ ๋ค๋ฅธ API๊ฐ ์์ต๋๊น?
@dcharkes ๋์์ด๋๋์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง Android์ Telegram์ JNI๋ฅผ ํตํด C++์์ ๋คํธ์ํน์ ์ํํฉ๋๋ค.
https://github.com/DrKLO/Telegram/blob/master/TMessagesProj/jni/TgNetWrapper.cpp
๋ํ ffmpeg๋ก GIF ์ฌ์์ ์ฒ๋ฆฌํ์ฌ Android Bitmaps์ ์ง์ ์์ฑํฉ๋๋ค.
https://github.com/DrKLO/Telegram/blob/master/TMessagesProj/jni/gifvideo.cpp
๋ฑ๋ก ์์์ ๋ํด libphonenumber ๋ฐ libpostal ์ ํตํด ์ ํ ๋ฐ ์ฃผ์๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๋ฐฉ๋ฒ์ด ์์ผ๋ฉด ํฅ๋ฏธ๋ก์ธ ์ ์์ต๋๋ค. ๋ํ glfw + flutter- embedder ๊ทธ๋ฆฌ๊ณ ์ธ์ ๊ฐ๋ ์์ ํ ๋คํธ๋ก ์์ฑ๋ ๋ฐ์คํฌํ ์ฑ์ ๋ณด๊ฒ ๋ ๊ฒ์ ๋๋ค.
SQLite ๋ฐ Realm์ ๊ฒฝ์ฐ +1. Couchbase ๋ ์ดํด๋ณด์ญ์์ค. C SDK์ ํจ๊ป ๊ณตํต C++ ์ฝ์ด๊ฐ ์์ต๋๋ค.
Firebase C++ API๊ฐ ์ฌ๋ฏธ์์๊น์? https://firebase.google.com/docs/reference/cpp/
์์ธํ ์ดํด๋ณด์ง ์์์ง๋ง iOS ๋ฐ Android ํ๋ฌ๊ทธ์ธ์ C++์ ์ง์ ๋ํํ๋ ๋จ์ผ ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋์ฒดํ ์ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
์ผ๋ถ ์ํธํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ring from rust - https://github.com/briansmith/ring ๊ณผ ๊ฐ์ ์ฌ๋์ ๋ฐ์์ผ ํฉ๋๋ค.
OpenCV, Realm, SqlCipher์ ๊ฒฝ์ฐ +1(https://github.com/sqlcipher/sqlcipher)
์ํธํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ. ํนํ libsodium ๋๋ ํ ํฌ.
https://github.com/google/tink
https://libsodium.gitbook.io/doc/
์ด๋ฏธ flutter-sodium ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ผ๋ฉฐ ํ๋ซํผ ์ฑ๋์ ํตํด ๊ฐ ํ๋ซํผ์ libsodium ๋ํผ์ ํต์ ํ ๋ค์ ๊ธฐ๋ณธ์ผ๋ก ํต์ ํฉ๋๋ค.
mapbox-gl https://github.com/mapbox/mapbox-gl-native ์ ๊ฐ์ ์ฌ์ฉ์ ์ง์ ๋งคํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
https://github.com/deltachat/deltachat-core ๋ฅผ ํตํ Flutter์ SMTP/IMAP ์ฒ๋ฆฌ(์ด๋ฉ์ผ ์ฑํ ์ฉ)๋ ์ง์ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒ์ ๋๋ค.
๋ด๊ฐ ๋๋ฌด ๊ณผ๊ฐํ๊ฒ ๋ฐ๊ฟ ๋งํ๋ฉด ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ ๋ง์ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ ์ ์์ง๋ง ์ด๊ฒ๋ค์ ๋ด
์ ์ .
์์ ๋ฅผ ์ ๊ณตํด ์ฃผ์ ๋ชจ๋ ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค! ์ด๊ฒ์ ๋งค์ฐ ๋์์ด ๋ฉ๋๋ค.
@skills-up ์ฐ๋ฆฌ๋ ์ถ์์ ์ธ ๋ถ๋ฅ๋ณด๋ค ๊ตฌ์ฒด์ ์ธ ์์ โโํจ์ฌ ๋ ๊ด์ฌ์ด ์์ต๋๋ค. ๊ตฌ์ฒด์ ์ธ ์ฌ๋ก๋ฅผ ํตํด FFI์ ์ธ์ฒด ๊ณตํ์ ํ๊ฐํ๊ณ ์ถ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด์ํ๊ฒ๋ C++์์/๋ก ์ต๊ณ ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ์ธ์ด ์ค ํ๋๋ OO์ ๋ํด ์์ ํ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ๊ฐ์ง๊ณ ์์์๋ ๋ถ๊ตฌํ๊ณ ๊ฐ๋ ฅํ ๋งคํฌ๋ก + ๋น๋ ์์คํ ์ ํตํด Rust์ ๋๋ค.
ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋ ์์ฒญ๊ณผ xml ํ์ผ(XMLDSig, Xades l)์ ๋์งํธ ์๋ช
์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ OpenSSL์ด๋ผ๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค.
Dart ์์ฒด์๋ BoringSSL์ด ์์ง๋ง ๊ทธ ์ค ์ผ๋ถ๋ง Dart๋ฅผ ํตํด ๋
ธ์ถ๋ฉ๋๋ค. ๊ทธ๋์ ์ฐจ์ ์ฑ
์ ํ๋ฌํฐ์์ ๋ค์ดํฐ๋ธ openssl ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํธ์ถํ๋ ๊ฒ์
๋๋ค.
์คํธ์ด ์๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ทธ๋ฌ๋ JNI๋ฅผ ๊ฑฐ์น์ง ์๊ณ tensorflow lite์ ๋ ์ ํตํฉ๋๊ธฐ๋ฅผ ์ํฉ๋๋ค. ์ด๋ ๋น๋์ค ์์ ์ ์ ์ฉํ ๊ฒ์ ๋๋ค.
์์ธํ ์ดํด๋ณด์ง ์์์ง๋ง iOS ๋ฐ Android ํ๋ฌ๊ทธ์ธ์ > C++์ ์ง์ ํต์ ํ๋ ๋จ์ผ ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋์ฒดํ ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
C++๋ฅผ ์ง์ํ๋ ๊ฒ ์ธ์๋ Go์ ์ง์ ๋ํํ ์ ์๋ ํ๋ฌ๊ทธ์ธ์ด ์๋ค๋ฉด ์ ๋ง ์ข์ ๊ฒ์ ๋๋ค. ์ง๊ธ ์ฐ๋ฆฌ๋ UI ์๋ต ์๋๋ฅผ ๋ฆ์ถ๋ gomobile ๋ฐ flutter ํ๋ซํผ ์ฑ๋์ ํตํด Go์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค. Flutter์์ Go ๋ฐ C++๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ฉด ์ฌ๋ฌ ํ๋ซํผ์ ๋ํด ๊ท ์ผํ ์ฝ๋ ๊ธฐ๋ฐ(๋น์ฆ๋์ค ๋ ผ๋ฆฌ/์๊ณ ๋ฆฌ์ฆ)์ ์ ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ก์ธ์ค์ ๊ฒฝ์ฐ +1์ ๋๋ค.
Android/iOS์ฉ ํ๋ซํผ ์ฑ๋์ ๋ง๋ค๊ณ ๋ ๊ฐ์ ํ๋ฌ๊ทธ์ธ์ ์ ์งํ์ง ์๊ณ ๋ Vulkan/MoltenVK์ ์ก์ธ์คํ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด Dart์์๋ง ๊ฐ๋ฐํ๋ฉด์ 3D ์ ํ๋ฆฌ์ผ์ด์
์ ๋น๋ํ๊ณ ํ
์ค์ฒ ์์ ฏ์ผ๋ก ๋ ๋๋งํ ์ ์์ต๋๋ค. ํ๋ซํผ ์ฑ๋์ ํดํค ํด๊ฒฐ ๋ฐฉ๋ฒ์ฒ๋ผ ๋ณด์
๋๋ค. ๊ฐ ํ๋ซํผ์ ๋ํ ๋ํผ๋ฅผ ์์ฑํ์ง ์๊ณ ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ก์ธ์คํ๊ณ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ ๋ฒ์ ์ด ์์ ๋๋ง๋ค ์ ์ง ๊ด๋ฆฌํ๊ณ ์ถ์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ ๋ ๋ง์ ๊ฐ๋ฐ์๋ฅผ ๋์ด๋ค์ผ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์, plz๋ flutter์์ ๋ค์ดํฐ๋ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ง์ ์ก์ธ์คํฉ๋๋ค.
Flutter์์ C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค.
์, plz๋ flutter์์ ๋ค์ดํฐ๋ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ง์ ์ก์ธ์คํฉ๋๋ค.
Flutter์์ C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค.
์ด์ ํผ๋๋ฐฑ์ ๋ฐ๊ธฐ ์ํด ์กฐ๊ธฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ ๊ณตํ๊ณ ์ ํฉ๋๋ค.
์์ธํ ๋ด์ฉ ์ Dart ์ถ์ ๋ฒ๊ทธ ์ ๋ฐ์ดํธ ๋ฅผ ์ฐธ์กฐํ์ธ์.
@mit-mit ์ด๊ฒ์ด ์ด ๋ฌธ์ ์ ๋์์ด ๋ ๊น์? Flutter์ ํจ๊ป ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํธ์ถํ๊ฑฐ๋ ์ฌ์ฉํ ์ ์์ต๋๊น?
ํํฐ์ ๋ฆ์์ง๋ง SQLCipher @dcharkes @mraleph์ ๊ฒฝ์ฐ +1
@doc-rj ์ฐ๋ฆฌ๋ ์ด์ SQLCipher ๋ฐ์ธ๋ฉ์ ์คํํ๊ณ ๊ฒฝํ์ ๋ํ ํผ๋๋ฐฑ์ ์ ๊ณตํ ์ ์์ด์ผ ํ๋ ๋จ๊ณ์ ์์ต๋๋ค. ์ด ์ฃผ์์ ์ฐธ์กฐํ์ญ์์ค.
์์ฒญ์ด ๋งค์ฐ ๋ค์ํ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๊ฐ ์ค์ ๋ก ํน์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ์ธ๋ฉ์ ์ ๊ณตํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ์ง ์๋๋ค๋ ์ ์ ๊ฐ์กฐํ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๋ชจ๋ ์ฌ๋๊ณผ ๋๊ตฌ๋ C API๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฐ์ธ๋ฉํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
๋ฉํฐํ๋ซํผ์ด ๋ฐํ๋๋ฉด์ ๊ทธ ํ์์ฑ์ด ๋์์ง ๊ฒ ๊ฐ์์.
์ด๊ฒ์ ๋ก๋๋งต์ ์ผ๋ถ์ ๋๊น?
@felemedeiros ์์ ์ด ์งํ ์ค์ ๋๋ค. FFI๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ธ๋ฉํ๋ ค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ ๊ฒฝ์ฐ ํผ๋๋ฐฑ์ ์ ๊ณตํ๊ธฐ ์ํด ๋ฐ์ธ๋ฉ ์์ ์ ์์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ ๋ณด๋ ์ด ๋๊ธ ์ ์ฐธ์กฐํ์ธ์.
์์ธํ ์ดํด๋ณด์ง ์์์ง๋ง iOS ๋ฐ Android ํ๋ฌ๊ทธ์ธ์ > C++์ ์ง์ ํต์ ํ๋ ๋จ์ผ ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋์ฒดํ ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
C++๋ฅผ ์ง์ํ๋ ๊ฒ ์ธ์๋ Go์ ์ง์ ๋ํํ ์ ์๋ ํ๋ฌ๊ทธ์ธ์ด ์๋ค๋ฉด ์ ๋ง ์ข์ ๊ฒ์ ๋๋ค. ์ง๊ธ ์ฐ๋ฆฌ๋ UI ์๋ต ์๋๋ฅผ ๋ฆ์ถ๋ gomobile ๋ฐ flutter ํ๋ซํผ ์ฑ๋์ ํตํด Go์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค. Flutter์์ Go ๋ฐ C++๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ฉด ์ฌ๋ฌ ํ๋ซํผ์ ๋ํด ๊ท ์ผํ ์ฝ๋ ๊ธฐ๋ฐ(๋น์ฆ๋์ค ๋ ผ๋ฆฌ/์๊ณ ๋ฆฌ์ฆ)์ ์ ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
ํ์ฌ Flutter์์ Go ๋ผ์ด๋ธ๋ฌ๋ฆฌ API๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ธฐ์ฌ๋ฅผ ์์ฑํ์ต๋๋ค. ๊ด์ฌ ์๋ ์ฌ๋์๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค. https://medium.com/@archan.paul/using -go-library-in-flutter-a04e3496aa05
Flutter ์ฑ์ C++ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?
Flutter ์ฑ์ C++ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?
ํ์ฌ๋ก์๋ C++ -> JNI(Android์ฉ) -> PlatformChannel ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ฐ์ํ ๋ฐฉ๋ฒ์ด ๋ ๋๊น์ง ์ ํํ๋ ๊ฒ๋ฟ์ธ ๊ฒ ๊ฐ์ต๋๋ค!!
ezored(http://ezored.com)๋ผ๋ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ด๋ฏธ Java ๋ฐ objc์ ์์ผ๋ฏ๋ก ๋ค๋ฅธ ๊ฒ์ผ๋ก ๋ณํํ ํ์ ์์ด ๋ณต์กํ ๊ฐ์ฒด๋ฅผ Flutter์ ์ ๋ฌํ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ๋๊ตฌ๋ ezored๋ฅผ ์ฌ์ฉํ์ฌ SDK๋ฅผ ์์ฑ(๋๋ ๋ฏธ๋ฆฌ ๋น๋๋ ๋ค์ด๋ก๋)ํ์ฌ ๋ค์ดํฐ๋ธ์ Dart ๊ฐ์ Flutter ํตํฉ์ ํ ์คํธํ ์ ์์ต๋๋ค. ์์ฒญ, ๊ตฌ๋ฌธ ๋ถ์, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ crud ๋ฐ ์ด๋ฏธ ๊ตฌํ๋ ๋ฐ๋ชจ SDK์ ๋ง์ ๊ฒ๋ค์ด ์์ต๋๋ค.
Flutter ๊ทธ๋ฃน์์ ๊ฒ์ํ์ง๋ง ๊ฐ์ฒด์ ๊ฐ์ฒด ๋ชฉ๋ก์ Flutter์ ์ง์ ์ ๋ฌํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๋์์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์๋ก์ด ์ง์ ์ด ์์ต๋๊น? 2.5๋ ์ ๋๊ฒ ํ๋ ๋ ๊ฒ ๊ฐ๋ค...
@fzyzcjy ์์ ์ค์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๊ธฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ถ์ํ์ต๋๋ค. ์ฐธ์ฌ ๋ฐฉ๋ฒ์ https://github.com/dart-lang/sdk/issues/34452#issuecomment -482136759๋ฅผ ์ฐธ์กฐ
์ด ์ด๊ธฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์ดํ๋ก Intel 32, Arm 64 ๋ฐ Arm 32์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด๋ฌํ ํ๋ซํผ์ ์์ง ์์ ๋ฒ์ ์ด๋ ๊ฐ๋ฐ ๋ฒ์ ์ผ๋ก ์ถ์๋์ง ์์์ผ๋ฉฐ Dart sdk์ ๋ง์คํฐ ๋ธ๋์น์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์์ ์งํ ์ํฉ์ ์ถ์ ํ๊ณ
@dcharke ๊ทธ ์์์
์ด๋ค ์ง์ ์ด ์์ต๋๊น?
์ํ ์ ๋ฐ์ดํธ ๋ฐ ์ถ๊ฐ ์ ๋ณด๋ https://github.com/dart-lang/sdk/issues/34452 ๋ฅผ ์ฐธ์กฐ
Flutter๋ฅผ ์ฌ์ฉํ์ฌ ์น ์ฑ์ ๋ง๋ค ๋ ac ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ffi๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น?
Flutter๋ฅผ ์ฌ์ฉํ์ฌ ์น ์ฑ์ ๋ง๋ค ๋ ac ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ffi๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น?
๊ทธ๋ด ๊ฐ๋ฅ์ฑ์ ์์ต๋๋ค. ์ด๋ก ์ ์ผ๋ก ์ฅ๊ธฐ์ ์ผ๋ก WebAssembly๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ํ ์ ์์ง๋ง ํ์ฌ ์์ ์ค์ธ ๊ฒ์ ์๋๋๋ค.
@ with-with ์ ๋ง?
Flutter๋ฅผ ์ฌ์ฉํ์ฌ ์น ์ฑ์ ๋ง๋ค ๋ ac ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ffi๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น?
๊ทธ๋ด ๊ฐ๋ฅ์ฑ์ ์์ต๋๋ค. ์ด๋ก ์ ์ผ๋ก ์ฅ๊ธฐ์ ์ผ๋ก WebAssembly๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ํ ์ ์์ง๋ง ํ์ฌ ์์ ์ค์ธ ๊ฒ์ ์๋๋๋ค.
WebAssembly๊ฐ ํ์ํ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ฌ๋๋ค์๊ฒ ๋ฏธ๋์ WebAssembly๋ก ๋ค์ ๋น๋ํ๋๋ก ์์ฒญํ ์ ์๋ค๋ฉด ์ง๊ธ ASM.js๋ก ๋ค์ ๋น๋ํ๋๋ก ์์ฒญํ ์ ์์ต๋๋ค.
@nic-hartley ์ข์ ์๊ฐ์ด์ง๋ง ๋ฌธ์ ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์ปดํ์ผํ๋ ๋ฐฉ๋ฒ์ด ์๋๋ผ Dart(JS๋ก ์ปดํ์ผ๋)์ ๋ค์ดํฐ๋ธ ์ฝ๋ ์ฌ์ด์ ๋ค๋ฆฌ๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค. ํ์์ด ๋ฌด์์ด๋ ์๊ด์์ต๋๋ค.
๊ธฐ๋ณธ FFI๋ ์ฑ๋ฅ์์ ์ด์ ๋ก ๋งค์ฐ ๋ฎ์ ์์ค์ด๋ฉฐ asm.js ๋๋ WebAssembly๋ก ์ฝ๊ฒ ๋ณํ๋ ์ ์์ต๋๋ค.
๋ช ํํ ํ์๋ฉด, ์ฐ๋ฆฌ์ ๊ตฌํ์ด ๋งค์ฐ ๋ฎ์ ์์ค์ด๋ผ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๊ฒ์ ํ์คํ ํฅ๋ฏธ๋ก์ด ๊ธฐ๋ฅ์ด์ง๋ง ์ ๊ณตํ๋ ค๋ฉด ์๋นํ ์์ ์ด ํ์ํ ๊ฒ์ ๋๋ค.
flutter๋ C++๋ฅผ ์ง์ํ๊ธฐ ์ ๊น์ง๋ ์ฅ๋๊ฐ์ผ ๋ฟ์ ๋๋ค.
Flutter๊ฐ C++์ ์ฝ๊ฒ ์ํธ ์ด์ฉํ ์ ์์ ๋๊น์ง(๋ธ๋ฆฌ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๊ณ ์ฑ๋ฅ ์ ํ ์์ด) ๊ธฐ์กด ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ํฌ์๊ฐ ์๋ ๋๊ท๋ชจ ์์ฉ ํ๋ก๊ทธ๋จ์ด๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ ๋ ์ฑํ๋์ง ์์ ๊ฒ์ด๋ผ๋ ๋์ผํ ์์ ์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋ํ์ดํ๊ธฐ ์ํด ์ฌ๊ธฐ์ ์์ต๋๋ค. ์ฑ๋ฅ์ด ๊ฐ์ฅ ๋์ ์ฐ์ ์์์ ๋๋ค.
React Native๋ ํ์ฌ ๋ธ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํ๋ฏ๋ก FFI๋ฅผ ๊ตฌํํ๋ ค๋ ์ธก๋ฉด์์ Flutter๊ฐ ์ค์ ๋ก ์์ ๊ฐ๊ณ ์๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
C++์์ ํตํฉ์ AppKit์ ์ฌ์ฉํ๋ iOS์์ ๊ฐ๋จํฉ๋๋ค. ์ด๊ฒ์ด React Native๊ฐ ์๋๋ผ ์ฐ๋ฆฌ๊ฐ ๋น๊ตํด์ผ ํ๋ ๊ฒ์ ๋๋ค.
UWP ๋ฐ C++๋ ๊ฐ๋จํฉ๋๋ค.
๋๋ ์ผ๋ฐ์ ์ผ๋ก "๋คํธ FFI ๋ ธ๋ ฅ ์ง์" ํํฐ์๋ ๋์ํ์ง๋ง...
Xamarin์ UWP๋ณด๋ค ๋ ์ ์ ํ ๋น๊ต์ผ ์ ์์ง๋ง Xamarin์ ๊ต์ฐจ ํ๋ซํผ ๋ณด๊ธฐ๋ Flutter๋งํผ ์ฌ์ฉ์ ์ ์ํ ์ ์์๊ณ ์ข ์ข ๋ณด๊ธฐ ์ข๊ฒ ๋ณด๊ธฐ ์ํด ๋ง์ ๋ค์ดํฐ๋ธ ์ฝ๋๊ฐ ํ์ํ์ต๋๋ค.
์ด๊ฒ์ ์ฌ์ค์ด ์๋๋๋ค. Flutter์ ๋ฌ๋ฆฌ Xamarin์๋ ๊ธฐ๋ณธ API(์: Xamarin.iOS ๋ฐ Xamarin.Android)์ ๋ํ ํ๋ซํผ ๋ฐ์ธ๋ฉ์ด ์์ผ๋ฉฐ ์ฑ ๊ฐ๋ฐ์๋ ์์ฒด ์ธ์ด(C#/.NET)๋ก ํ๋ซํผ๋ณ ๊ตฌํ์ ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ ์ธ์ด ๊ธฐ๋ฅ์ ๊ดํ ๊ฒ์ด๋ฉฐ UI ์์ ฏ API ๋์์ธ๊ณผ ํผํฉ๋์ด์๋ ์ ๋ฉ๋๋ค.
๋ค์ดํฐ๋ธ API ์ฌ์ฉ์ ๋ง์ง๋ง ๋ค์ดํฐ๋ธ ์ฝ๋ ํธ์ถ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ Flutter๋ ๊ฐ์ ๋ฐฐ์ ์์ต๋๋ค(Xamarin์ ์ฑ ์ฝ๋์ ๋ฆฌํ๋ ์ ํดํน ์์ด Java ๋๋ ObjC๋ฅผ ์์ฑํ ํ์๊ฐ ์์ง๋ง). ๋ค์ดํฐ๋ธ ์ฝ๋ ์ ๊ฒฝ์ฐ Xamarin.Android ์์ฒด(๋ฐฑ์๋ ํ๋ซํผ ๋ฐฑ์๋ ์ค ํ๋)์์๋ ๋ค์ดํฐ๋ธ ์ฝ๋์ ์ฌ์ฉ์ ๊ฑฐ์ ์์ผ๋ฉฐ ์ฑ ๊ฐ๋ฐ์๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์์ฑํ์ง ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ React Native๋ Xamarin๊ณผ ๋ฌ๋ฆฌ Flutter๋ ์์ ํ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด๋ฏ๋ก ์ ์ฒด Flutter ํ๋ ์์ํฌ๋ฅผ AppKit๊ณผ ๊ฐ์ ๊ฒ๋ค๊ณผ ๋น๊ตํ๋ ๊ฒ์ ์ ์ ์ผ๋ก ๊ณต์ ํ ๊ด์ ์ ๋๋ค.
์๋ฌด๋ C++ ํตํฉ์ ๊ดํ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ์์ ์๋ Qt ํ๋ ์์ํฌ์ ๋ํด ์ธ๊ธ์กฐ์ฐจ ํ์ง ์๋ ๊ฒ์ด ์ด์ํฉ๋๋ค.
QT๋ C++์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฒ์๋ถํฐ ๋ถ๋ฆฌํ ๋ผ์ด์ผ์ค๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
2019๋
8์ 12์ผ ์์์ผ, 06:41 Vladyslav Stelmakhovskyi, <
[email protected]>์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
์๋ฌด๋ ํจ์ฌ ์์์๋ Qt ํ๋ ์ ์ํฌ์ ๋ํด ์ธ๊ธ์กฐ์ฐจํ์ง ์๋ ๊ฒ์ด ์ด์ํฉ๋๋ค.
C++ ํตํฉ์ ๊ดํ ๊ธฐํ ๋ชจ๋ ๊ฒโ
์ด ์ค๋ ๋์ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฉ์์ง๋ฅผ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/flutter/flutter/issues/7053?email_source=notifications&email_token=AGDYMWXHTJUBUW64LEOO27TQEDSWNA5CNFSM4CXY6LYKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNNMVXH
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AGDYMWTNMTM7QUOY2BEIPM3QEDSWNANCNFSM4CXY6LYA
.
Qt๋ C++ ๋ฐ QML(JS ์์ง)์
๋๋ค.
๋ฌด์จ ๋ผ์ด์ผ์ค? LGPL? GPL? ๋ญ๊ฐ ๋ฌธ์ ์ผ?
๋จผ์ IANAL์ด์ง๋ง ๋ด๊ฐ ์ดํดํ๋ ๊ฒ์ฒ๋ผ Qt์ ๋๋ถ๋ถ์ LGPL(IDE ๋ฑ์ GPL์)์ ๋๋ค. ์ฆ, ์ ์ ๋งํฌ๋ฅผ ๋ช ์์ ์ผ๋ก ๊ธ์งํ์ง๋ ์์ง๋ง ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ฒฝ์ฐ ๋ผ์ด์ ์ค๋ฅผ ์ค์ํ๋ฉด์ ์ํํ๊ธฐ ์ด๋ ค์ด ์ธ์ด๊ฐ ์์์ ์๋ฏธํฉ๋๋ค. ๋น๊ณต๊ฐ ์์ค์ ๋๋ค.
๊ธฐ์ ์ ์ผ๋ก LGPL๋ง ์ฌ์ฉํ๊ณ ์ฌ์ฉ์๊ฐ ์ ์ฌ์ ์ผ๋ก ๋ค๋ฅธ ๋ฒ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ๋ค์ ์ฐ๊ฒฐํ ์ ์๋๋ก ๊ฐ์ฒด ํ์ผ(๋ฐ ์๋ง๋ ์ง์นจ)์ ์ ๊ณตํ๋ฉด LGPL์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋๋ Qt Company๊ฐ ๊ทธ ์ฌ์ค์ ๊ด๊ณ ํ์ง ์๋๋ค๊ณ ํ์ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ผ๋ฐ์ ์ธ ๊ฐ๋ ์ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐฐํฌํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ฆ, ๊ณผ๋ํ ๋ผ์ด์ ์ค ๋น์ฉ์ ์ง๋ถํ์ง ์๊ณ ๋ ์ฑ ์คํ ์ด์ ์ฑ์ ์ถ์ํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฒด ํ์ผ์ ์ ๊ณตํ๋ ๊ฒ์ ๋ํด ๋ด๊ฐ ํ๋ฆด ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋จ์ง ๊ทธ๊ฒ์ ๋ํ ๋์ ์ดํด์ด๋ฉฐ, ์ด๋ค ํ์ฌ๊ฐ ๊ทธ๋ ๊ฒ ํ๊ณ ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
Android๋ LGPL์์ ๋ ๋ช ์์ ์ผ๋ก ํ์ฉ๋๋ ๋์ ์ผ๋ก ๋ก๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ ์ฝ์ต๋๋ค.
์๋ ํ์ธ์ @cpboyd๋ , ์ ๋ ์ด๊ฒ์ ๋ฐ๋ ๋ฐฉํฅ์์ ๋ณด๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ํ๋ซํผ๋ณ UI ํ๋ ์์ํฌ์ ๊ตฌ์ถ๋ ์ฑ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๊ฐ ํ๋ซํผ์์ ๊ธฐ์กด C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฐฉ๋ํ ์ปฌ๋ ์ ์ ํ์ฉํ ์ ์์ต๋๋ค. Flutter๊ฐ ํฌ๋ก์ค ํ๋ซํผ์ด๋ผ๋ ๊ฒ์ ์ดํดํ์ง๋ง, ์ค์ ๋ก ์ฌ์ฉํ ์ ์๋ค๋ฉด(๊ธฐ์กด ์ฝ๋์ ํจ๊ป) ํฌ๋ก์ค ํ๋ซํผ์ด ์๋ UI๋ฅผ ๊ณ ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ ์ผํ ๋ฌธ์ ๋ ๋ฏธ๋์ OS(์: Fuchsia)๊ฐ Flutter & Dart์ ์ฌ์ฉ์ ์๊ตฌํ์ง๋ง ์ด ์ฌ์ฉ ์ฌ๋ก๋ฅผ ํ์ฉํ์ง ์๋ ๊ฒฝ์ฐ์ ๋๋ค. ์ด ๊ฒฝ์ฐ ๊ธฐ์กด ์ฝ๋๋ฒ ์ด์ค๊ฐ ํฐ ์ฌ๋์ ๋ฌด์ํ ์ ์์ต๋๋ค.
Flutter/Dart๊ฐ "์น" ์ฑ(์ฆ, ๋ฐฑ์๋๊ฐ ์น์ ์๋ ๊ณณ)์ ์ผ๋์ ๋๊ณ ์ค๊ณ๋๊ณ ์๋์ง, ์๋๋ฉด ์ ๋ฌธ ๋ฐ์คํฌํฑ ์์ฉ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์์ ์๊ตฌ ์ฌํญ์ ๋ํด ์ง์งํ๊ฒ ๊ณ ๋ คํ๊ณ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ถ๊ทน์ ์ผ๋ก ์ด์ ๊ฐ์ ๊ฒฐ์ ์ ์ฑ ์คํ ์ด์ ์๋ ๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ํ์ง์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์๋ฐฑ๋ง ์ค์ ๊ธฐ์กด ์ฝ๋๋ฅผ ํ์ฉํ์ฌ UIKit์ ์ฌ์ฉํ์ฌ iOS์ฉ ๊ณ ํ์ง ์ ๋ฌธ ์ฑ์ ์์ฑํ ์ ์์ง๋ง Fuchsia/Flutter/Dart์ฉ์ผ๋ก ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ์๋ ๊ทธ๋ ๊ฒ ํ ์ ์์ต๋๋ค(์ฑ๋ฅ ๋น์ฉ์ด ๊ฑฐ์ 0์ ๊ฐ๊น์). ๋ด๊ฐ ๊ฐ๋ฐํ์ง ์์ OS ๋ฐ ํ๋ซํผ์ด ๋ ๊ฒ์ ๋๋ค.
๋ด ๊ฒ์๋ฌผ์ ๋ชฉ์ ์ Flutter๋ฅผ ๋ค๋ฅธ ํฌ๋ก์ค ํ๋ซํผ ๋๋ ๋น ํฌ๋ก์ค ํ๋ซํผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋น๊ตํ๋ ๊ฒ์ด ์๋๋ผ ์ผ๋ถ ๊ฐ๋ฐ์์๊ฒ ์ค์ํ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๊ฐ์กฐํ๋ ๊ฒ์ ๋๋ค.
Dart FFI๋ ํฅ๋ฏธ๋กญ์ต๋๋ค. sqllite ์์ ์ _very_ ๊ฐ๋ตํ ์ฝ๊ธฐ์์ PInvoke๊ฐ ์๋ C#๊ณผ ์ ์ฌํด ๋ณด์ด์ง๋ง ๋ถํํ๋ ์ฒ๋ฆฌํ๋ ๊ฑฐ์ ๋ชจ๋ ์ ํ์ ๋ํ์ด ํ์ํ๊ฑฐ๋ ๋ค์์ ์์ฑํด์ผ ํ๊ธฐ ๋๋ฌธ์ C++์๋ ์ ํฉํ์ง ์์ต๋๋ค. C++๋ฅผ ๋ํํ๊ธฐ ์ํ ์์ ํ ์ผ๋ฐ์ ์ธ ์ ํ์ด ์๋ ์ธํฐํ์ด์ค ์์คํ . ๋ค์ Obj-C ํด๋์ค์ ์ฉ์ด์ฑ๊ณผ ๋น๊ตํ ๋ ๋ ๋ค ํนํ ๋งค๋ ฅ์ ์ด์ง ์์ต๋๋ค.
#include <mylib/mytype.h>
<strong i="11">@implementation</strong> MyView
{
MyLib::MyType *_pMyType;
}
<strong i="12">@end</strong>
๋๋ C++/WinRT๋ฅผ ์ฌ์ฉํ๋ UWP:
#include <mylib/mytype.h>
class MyUserControl : public UserControl
{
MyLib::MyType *_pMyType;
};
๊ฐ์ฌ ํด์ :-)
@Hixie @MarkIngramUK ๋ ๋ค ํฌ๋ก์ค ํ๋ซํผ์ด
AppKit์ Apple ์ ์ฉ์ด๊ณ UWP๋ Windows ์ ์ฉ์ ๋๋ค.
์๋ง๋ Flutter๊ฐ Dart ๋์ Swift ๋๋ C#์ ์ฌ์ฉํ๋ค๋ฉด ์ด๋ฏธ ๋์ผํ ์์ค์ ์ง์์ ๋ฐ์์ ๊ฒ์ ๋๋ค. ํ์ง๋ง ์ด๋ ์์ ํ ๋ค๋ฅธ ์ฃผ์ฅ์ ๋๋ค.
Xamarin์ UWP๋ณด๋ค ๋ ์ ์ ํ ๋น๊ต์ผ ์ ์์ง๋ง Xamarin์ ๊ต์ฐจ ํ๋ซํผ ๋ณด๊ธฐ๋ Flutter๋งํผ ์ฌ์ฉ์ ์ ์ํ ์ ์์๊ณ ์ข ์ข ๋ณด๊ธฐ ์ข๊ฒ ๋ณด๊ธฐ ์ํด ๋ง์ ๋ค์ดํฐ๋ธ ์ฝ๋๊ฐ ํ์ํ์ต๋๋ค.
์ ์ ์์ ์ฌ์ ํ โโ๋จ์ ์์ต๋๋ค. C++์ ํจ๊ป Flutter๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด Dart ํ์ FFI ๋ฏธ๋ฆฌ ๋ณด๊ธฐ์ ์ฐธ์ฌํ๊ณ ์ฐ๋ฆฌ ๋ชจ๋์ ๋ํ ์ง์์ ๊ฐ์ ํ๋ ๋ฐ ๋์์ ์ฃผ์ ์ผ ํฉ๋๋ค ๐
์ด ๋ฌธ์ ๋ ์ธ์ด ๊ธฐ๋ฅ์ ๊ดํ ๊ฒ์ด๋ฉฐ UI ์์ ฏ API ๋์์ธ๊ณผ ํผํฉ๋์ด์๋ ์ ๋ฉ๋๋ค.
@atsushieno ๋ฌผ๋ก ์ ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ด ํ ๋ก ์ด Dart FFI ํฌ๋ผ์์ ๋ ์์ฐ์ ์ผ ๊ฒ์ ๋๋ค... Flutter๋ ํ๋ ์์ํฌ์ ๋๋ค. ๋คํธ๋ ์ธ์ด์ ๋๋ค.
๋ค์ Obj-C ํด๋์ค์ ์ฉ์ด์ฑ๊ณผ ๋น๊ตํ ๋ ๋ ๋ค ํนํ ๋งค๋ ฅ์ ์ด์ง ์์ต๋๋ค.
@MarkIngramUK ์ด๊ฒ์ด Dart ํ์ด https://groups.google.com/forum/#!forum/dart -ffi์์ ๋ณด๊ณ ์ถ์ดํ๋ ํผ๋๋ฐฑ๊ณผ ์ ํํ ์ผ์นํ๋ค๊ณ ํ์ ํฉ๋๋ค.
C++์ SDK ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ C++ ๋ถํธ์คํธ๋ฉ ํ๋ก์ ํธ์ธ ezored(https://ezored.com)๋ผ๋ ํ๋ก์ ํธ๊ฐ ์์ต๋๋ค. ๋ชจ๋ฐ์ผ ํ๋ก์ ํธ(Android ๋ฐ iOS)์์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. FFI๊ฐ ์๋ฃ๋์ด ๊ธฐ๋ณธ SDK๋ฅผ flutter๋ก ์ฌ์ฉํ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค.
๊ธฐ๋ณธ ๊ตฌํ(poco ํ๋ก์ ํธ, openssl, sqlite, ํน์ ํ๋ซํผ ์ฝ๋ ํตํฉ ๋ธ๋ฆฌ์ง ์ฝ๋ ๋ฑ).
๋ด ์ ํ์๋ ์ด๊ฒ์ด ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค.
์์ ๋กญ๊ฒ ํ๋ก์ ํธ์ ์์์ ์ถ๊ฐํ์ธ์ :)
Kotlin Multiplatform์ ์๋ฒฝํ ์๊ฐ์ด ์๋๋ผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ๋ ์ ์์ต๋๋ค. ์์ง https://github.com/dart-lang/sdk/issues/34452 ๋ฅผ ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค.
Unity3d๋ C# VM[1]์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์์ง์ ํ๋ฌํฐ๋ฅผ ์ด๋ป๊ฒ๋ ์ด์ํ๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ ์ธ๊ณ์์๋ C#๊ณผ C++ ๊ฐ์ ๋ํ๊ฐ ์ ์ ํฉ๋๋ค. ๊ทธ๋ค์ด ์ด๋ป๊ฒ ์ผ๋ถ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋์ง ๊ทธ๋ค์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ดํด๋ณผ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๊ทธ๋ค์ "UIWidget์ ์ฃผ๋ก Flutter์์ ํ์๋์์ต๋๋ค"๋ผ๊ณ ๋งํฉ๋๋ค. ๋ํ ๋ฐ์ ๋ค์ดํฐ๋ธ ์บ ํ์ TurboModules๋ฅผ ์ฌ์ฉํ ์๋ก์ด ์ ๊ทผ ๋ฐฉ์์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1) ๋๊ธฐ ๋ฐ ๋น๋๊ธฐ ๋ฐ
2) ๋ง์ฌ๋ง์ด ์๊ณ
3) C ๋ฟ๋ง ์๋๋ผ C++๋ ์ง์ํฉ๋๋ค.
๋ ์บ ํ๋ฅผ ์์ํ๊ณ ์์ต๋๋ค.
Dart 2.5๋ถํฐ ์ด( dart:ffi
)๋ ํ์ฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ ์์ต๋๋ค.
https://medium.com/dartlang/announcing-dart-2-5-super-charged-development-328822024970
์ข์ ์์!
์... Flutter์ ํจ๊ป ์ค๋ณด์๋ฅผ ์ฌ์ฉํ๋ฉด ์ถฉ๋ถํ ๊น์?..
@rg4real ๋ต! ๊ทธ๋ฌ๋ Oboe ์ธํฐํ์ด์ค๊ฐ C++๋ก ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ผ๋ถ C ๋ํผ๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
์์ ์ง์นจ์ https://github.com/flutter/flutter/wiki/Binding-to-native-code-via-FFI ์์ ํ์ธํ ์ ์์ต๋๋ค.
https://github.com/atsushieno/oboe-sharp/tree/master/native ๊ฐ ์๋ํ๋ ๊ฒฝ์ฐ C# ๋ฐ์ธ๋ฉ์ ๋ํด ์์ฑํ oboe-c.so
๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
@sjindel-google, ๋ฉ์ง ์์์ ๋๋ค!
๋ฐ๋ผ์ ํด๋์ค์ ํจ์๋ฅผ ๋ง๋ค์ด C++์ C ์ฝ๋ ์ฌ์ด์ ๋ค๋ฆฌ๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํด๋น ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ณ Dart ์ฝ๋์์ ํด๋น ํจ์๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค. ๋ง๋ค๊ณ ์๊ฐํฉ๋๋ค.
@atsushieno๋ , ๊ฐ์ฌํฉ๋๋ค. ์ดํด๋ณด๊ณ ์์ต๋๋ค. ๋ด ๊ฒฝ์ฐ์๋ ๋ค๋ฆฌ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค(๊ฒฝํ ๋ถ์กฑ). ํ์ง๋ง ์ ํํ ์ค๋ณด์ ์ฐ์ฃผ๋ผ๋ ์ ๋ฐ์ ์ธ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ์ต๋๊น? ๊ทธ๊ฒ ๊ทธ๋ ๊ฒ ์ข์์ด?
@rg4real ์ ๋ ๋๊ธฐ ์๊ฐ์ด ์งง์ ์ค๋์ค๋ณด๋ค ๋จ์ํ API(OpenSLES์ ๋นํด)๋ฅผ ์ํด ๊ทธ๋ ๊ฒ ํ๊ณ ์์์ต๋๋ค. ๋ด๊ฐ ๋๊ธฐ ์๊ฐ์ ๋ํด ์ ๋ง๋ก ์ง์งํ๋ค๋ฉด Xamarin.Android๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒ์ ๋๋ค. ๋น์ ์ (๋ค์ ๋๋ AAudio) ์ค๋ณด์ ๋ํด ์๊ธฐํ๋ค๋ฉด, ๋๋ ๊ทธ๊ฒ์ ์ฌ์ฉํฉ๋๊น Fluidsynth ๊ทธ๊ฒ์ ์ ์๋ํฉ๋๋ค. AAudio๊ฐ OpenSLES์ ๋น๊ตํ์ ๋ "์ผ๋ง๋ ์ข์์ง" ํ์คํ์ง ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ ๋ํ ์ง์นจ์ด ์์ต๋๊น?
C++ ์ฝ๋๊ฐ new/malloc์ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ๋คํธ ์ฝ๋๋ก ๋ฐํํ๋ ๊ฒฝ์ฐ ํด๋น ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ ๋ฐฉ๋ฒ.
C++ ์ฝ๋
๋ฌดํจ foo(char** out) {
*out = ์๋ก์ด char[25];
}
|out|์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ญ์ ํ๋ ๋ฐฉ๋ฒ ๋คํธ ์ฝ๋์ ๋ณ์?
Dart 2.5๋ฅผ ์ฌ์ฉ ์ค์ด๋ผ๋ฉด .free()
์ Pointer
.free()
Pointer
์์ต๋๋ค. dev/master ๋ธ๋์น์ ์๋ค๋ฉด ์ด ๋ฐฉ๋ฒ์ด package:ffi
https://github.com/dart-lang/ffi/blob/master/lib/src/allocation.dart#L70์ผ๋ก ์ด๋ํ์ต๋๋ค.
์ฃผ์์ ๋ฐ๋ผ - "[ํ ๋น]๊ณผ ๋์ผํ ๋ฐฉ์์ผ๋ก ํ ๋น๋ ํฌ์ธํฐ์ ๋ํด์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค." - free()๋ assign()๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด์ผ๋ง ์ฌ์ฉํ ์ ์๋ค.
์
ffi.ํฌ์ธํฐ
ptr.free();
์ด๊ฒ์ ๋คํธ ์ฝ๋์์ new ๋๋ malloc์ ์ฌ์ฉํ์ฌ C++ ์ธก์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ ๊ฒ์ ์ฒ๋ฆฌํฉ๋๊น?
๋ฉ๋ชจ๋ฆฌ๊ฐ malloc
ํตํด ํ ๋น๋ ํ Dart ๋๋ C++๋ฅผ ํตํด free
๋ก ํด์ ํ ์ ์์ต๋๋ค.
๋คํธ 2.6์์ ์ฐ๋ฆฌ๋ ์ฌ์ฉ DynamicLibrary.lookupFunction("free")
์ ์ free
๊ฐ ๋ ์ ์๋๋ก, ๋คํธ ์ ํํ ๊ฐ์ free
ํ๋ก๊ทธ๋จ์ C ++ ๋ถ๋ถ์์๋ค. ( free
์ ์ฌ๋ฌ ๋ฒ์ ์ ๋ฐ์ด๋๋ฆฌ์ ์ฐ๊ฒฐํ์ง ์๋ ํ.)
์ด ๊ธฐ๋ฅ์ด ์ด์ ๋ชจ๋ Flutter ์ฑ๋์์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ฏ๋ก(๋ฒ ํ ๋ฒ์ ) ์ด ๋ฌธ์ ๋ฅผ ์ข ๋ฃํฉ๋๋ค. ๊ณ์ํด์ ๋ฌธ์ ๋ฅผ ๊ฐ์ ํ๊ณ ์์ต๋๋ค. ์์ธํ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ https://github.com/dart-lang/sdk/issues/new์ ์ ์ถ
C++ ํด๋์ค๋ฅผ C ํธํ์ฑ์ผ๋ก ๋ง๋๋ ๊ฒ์ ์ง์ ๋ถํฉ๋๋ค. plz๋ C++ ํด๋์ค๋ฅผ ์ง์ ํธ์ถํ๋ ๊ธฐ๋ฅ์ ๋ง๋ญ๋๋ค.
+1 C++๋ฅผ ์ง์ํ ์ ์์ต๋๊น?
@KaungZawHtet ๋ฐ @fzyzcjy - ์ด์ ๋ํ ์ ๋ฐํ(์๋ง๋ flutter๋ณด๋ค๋ dart-lang์ผ๋ก)์ ์ฌ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
์ด ๋ฌธ์ ๋ฅผ ์ ๊ทธ๊ฒ ์ต๋๋ค. ๋ง์ ์ฌ๋๋ค์ด ๊ตฌ๋ ํ๊ณ ์์ง๋ง ์๋ ๋ชฉํ๋ ๊ฝค ๋ช ํํ๊ฒ ํด๊ฒฐ๋์์ต๋๋ค.
์, ์๋ก์ด ๋ฌธ์ ์ ๊ฒฝ์ฐ ๋ค์ ๋งํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ถํ์ญ์์ค. https://github.com/dart-lang/sdk/issues/new?labels=library-ffi ,area-vm
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ช ๊ฐ์ง Google ์ฑ์์ ์ด ์๊ตฌ์ฌํญ์ ๋ค์์ต๋๋ค.
์ด๋ฌํ ์ฑ ์ค ํ๋๋ ๋๊ธฐ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด ์นด๋ฉ๋ผ๋ฅผ ์๋ํ๊ธฐ ์ํ ์์ฒด C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฑํ์ต๋๋ค. ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ซํผ์ ๋ฐ๋ผ ๋ค๋ฅด๋ฉฐ ์ต๋ํ ๋นจ๋ฆฌ ์๋ํ๋๋ก ์ต์ ํ๋์ด ์์ต๋๋ค. ๊ฐ๋ฅํ ๊ฐ์ฅ ์งง์ ๋๊ธฐ ์๊ฐ์ผ๋ก ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํธ์ถํ๋ ๊ฒ์ ์ด๋ฌํ ์ฑ์ ์ค์ํฉ๋๋ค. ๊ฐ์ ๋ก PlatformChannel + JNI๋ฅผ ํต๊ณผํ๋๋ก ํ๋ฉด Android์์ ์ด๋ฅผ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
Android์ iOS ๊ตฌํ ๊ฐ์ ๊ณต์ ํ ์ ์๋๋ก C++๋ก ๋น์ฆ๋์ค ๋ ผ๋ฆฌ ๊ตฌ์ฑ ์์๋ฅผ ์์ฑํ๋ ๊ณ ๊ธ ๋ชจ๋ฐ์ผ ํ์ด ์์ต๋๋ค. ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ง์ ํตํฉ์ ์ง์ํ๋ Flutter๋ ์ต๊ณ ์ ํฌ๋ก์ค ํ๋ซํผ ํ๋ ์์ํฌ๋ผ๋ ์ ์ง๋ฅผ ๋์ฑ ๊ณต๊ณ ํ ํ ๊ฒ์ ๋๋ค.
๋๋ ์ด๊ฒ์ด _ํ์ํ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ Flutter๊ฐ ๋ค๋ฅธ ํฌ๋ก์ค ํ๋ซํผ ์๋ฃจ์ ๊ณผ ๋์ฑ ์ฐจ๋ณํํ ์ ์๋ ์์ญ ์ค ํ๋์ ๋๋ค.