Android Programjaim

Android, Flutter/Dart, Kotlin, Java, Unity, HarmonyOS

.Obj 3d file parser és JNI

2011. november 28. 23:52 - lacas8282

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!
 

komment
süti beállítások módosítása