Kezdjünk bele.
Java-ban írtam az .obj file parserem, jelenleg kezel minden elemet benne, nagyon szépen.
Egyedüli hátrányként megemlítem, hogy java-s, tehát egy nagyobb file-al elég sokáig elszórakozik. Értsd: 3 mb-os file esetén kezdetben 55 mperc volt az idő, később pedig maximum 23 mpercre voltam képes redukálni a parse-olást. Nem igazán erre találták ki a mobil telókat, és a javat sem.
Ami most lesz: megpróbálom átrakni NDK-ba. Ehhez írok egy kisebb kis tutorialt az utókornak:
az android proejcten belül kell egy jni mappa, ebbe kell egy Android.mk file és egy akarmi.c file.
android.mk file tartalma
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
LOCAL_LDLIBS := -llog #logolhassunk
include $(BUILD_SHARED_LIBRARY)
Az -llog paraméter azért kell, hogy C-ből írhassunk a Logcat-re.
Nézzünk egy java filet, ami meghív egy c-t.
public native String stringFromJNI();
static {
System.loadLibrary("hello-jni");
}
Ez esetben a hello-jni libet fogja betölteni a projectből (kell lennie egy .so filenak tehát)
Az .so file generálásához kell egy cygwin, ezt letölthetjük a cygwin.com-ról.
Telepításnál a "devel" mappára toljunk "install-t" (jobb klikk a groupon)
majd telepítsük.
cygwin elindítása, beírjuk: make -v
amennyiben kiír mindenféle make paramot, helpet, akkor eddig okék vagyunk. Ha nem akkor telepítéskor ki kell választani a make-et is.
Ez eddig ok.
lássuk a c filet.
jstring Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv* env, jobject obj) {
return (*env)->NewStringUTF(env, "Hello from JNI !"); //The following C JNI function converts an array of C characters to a jstring
}
mint látható ezt a cuccot fogjuk meghívni java-ból.
Ezután elmentünk mindent és:
cygwinben belépünk oda ahol a projectünk van: cd /../../ akármi (unixos parancssor ezért vmiért a perjelek fordítva lesznek)
majd beírjuk: /android_ndk/ndk_build
ezután ha jól csináltuk, akkor kiír dolgokat sharedlibrary: libname.so stb-stb-stb
visszamegyünk Eclipse-be, F5 a projecten. Megjelent pár új mappa: libs és obj, benne a mi kis .so fileunk.
futtassuk a filet, és tádámm, működik!