2016-04-12 13 views
4

Android için yerel olarak yerleşik bir Yerel Modül'den C veya C++ koduna erişmek için bir Java Yerel Arabirimi (JNI) oluşturmalı mıyım?Android NDK'yı kullanarak C veya C++ 'da reaktif yerli Yerel Modül oluşturun?

Amacım hem Android ve iOS destekleyen bir tepki Yerli Yerli Modül ortak C ve C++ algoritmaları (UI) tekrar kullanmama olduğunu. Bir Objective C * .m modülünden C veya bir Objective C++ * .mm modülünden C++ çağırmak kolaydır. Ancak, Android için bir tepki-yerel Doğal Modülü java'da Doğal Modülü kodunu uygular.

https://facebook.github.io/react-native/docs/native-modules-android.html#content

Android NDK ++ C veya C Android kod yazmak için izin verir. Android NDK, C++ frameworks such as Qt 5.6 ile iyi çalışır. Bir java JNI'den kaçınarak javascript'i nasıl tepki gösterebileceğimi anlayamıyorum. herhangi bir ipucu veya yön için önceden

sayesinde, sen Djinni kullanabilirsiniz biraz ekstra işler yapmak isteyen varsa

+0

Bunun için bir yere var mıydınız? Benzer bir şey elde etmeye çalışıyorum .. JUCE C++ kütüphanesini kullanıyorum ve iOS'u React Native ile iyi çalışıyorum. – Adamski

+2

@Adamski Hey, hala görüyorsanız bu blogu kontrol ediyorum: https://thebhwgroup.com/blog/react-native-jni – PFranchise

+0

@ PFranchise Teşekkürler! Lütfen cevap olarak gönderin ve memnuniyetle kabul ediyorum! –

cevap

10

Son zamanlarda bunu bir React Native projesinde yapmak zorunda kaldım ve JNI kullanmadan etrafta bir yol bulamadım. Bunu yapmak için, JS'den Java köprüsüne kod yazmanız ve daha sonra Java'ya C (JNI) köprüsü üzerinden daha fazla kod yazmanız ve daha sonra JS'ye geri dönmeniz gerekir.

Yalnızca ilkel değerleri iletiyorsanız, JNI, tür dönüşümü ile başa çıkabileceğinden oldukça kolaydır, örneğin, C dilinde bir cümle (bir int yazılır), ancak karmaşık veri türlerinden geçiyorsanız daha sonra JNI'ye sınıfınızın hangi alanlara sahip olduğunu ve bu tür alanların ne tür olduğunu söyleyerek JNI nesnesinin C yapısını elde etmek için kod yazmanız gerekir. Bunu yapmak için yardımcı işlevler yazmayı daha kolay buldum. Bu bir çok ilk kurulum ve sıkıcı kod, ama bir kez gittiğinizde ve buna alıştığınızda o kadar da zor değil. JNI Spec referans için mükemmeldir, sadece 'u kullanmanız gerektiğini söylemez.

Bazı örnek sınıflarını geçmek için JNI kullanan bir github project sahibim. Bu blog article JNI için tüm kurulum adımlarını açıklar ve eğer bundan daha rahatsanız, "Gerçek Dünya JNI" bölümünde kirli ayrıntıya girer. Bununla ilgili herhangi bir sorunuz olursa haberim olsun!

2

.

Bu proje Objective-C ve Java için arayüz bağlamaları oluşturur. C++ için sarmalayıcı kodunu oluşturduktan sonra, React Native ile entegre olan Java ve Objective-C sınıfları oluşturabilirsiniz. Böylece React, C++ adını alacak olan Obj-C/Java'yı arayacaktır. Kar.

Bunun sizin için nasıl çalıştığını görmek güzel olacak, bunu henüz kimsenin görmediğini görmedim.

+0

"Djinni, çapraz dil türü bildirimleri ve arabirim bağlamaları oluşturmak için kullanılan bir araçtır. C++'yı Java veya Objective-C ile bağlamak için tasarlanmıştır." - Teşekkür ederim @magnumkarter! –