Android 3D引擎之CatCake----编译hello_catcake

1.下载Catcake:

主页:http://code.google.com/p/catcake/

svn下载:svn checkout http://catcake.googlecode.com/svn/trunk/ catcake-read-only


2.导入Eclipse:

hello_catcake的例子程序在这个路径:catcake-read-only/sample/project/android/hello_catcake

导入直接运行不能成功,因为没有编译出需要的库


3.用ndk编译库

用cygwin进入这个路径:catcake-read-only/sample/project/android/hello_catcake/jni

运行ndk-build命令


我这里出现了错误,说找不到头文件:

cly@topgun /cygdrive/g/3D/CatCake/catcake-read-only/sample/project/android/hello_catcake/jni
$ ndk-build
Compile++ thumb  : hello_catcake <= main.cpp
G:/3D/CatCake/catcake-read-only/sample/project/android/hello_catcake/jni/main.cpp:24:26: error: catcake_main.h: No such file or directory
G:/3D/CatCake/catcake-read-only/sample/project/android/hello_catcake/jni/main.cpp:30: error: ISO C++ forbids declaration of 'ckMain' with no type
G:/3D/CatCake/catcake-read-only/sample/project/android/hello_catcake/jni/main.cpp: In function 'int ckMain()':
G:/3D/CatCake/catcake-read-only/sample/project/android/hello_catcake/jni/main.cpp:32: error: 'ckCreateCatcake' was not declared in this scope
G:/3D/CatCake/catcake-read-only/sample/project/android/hello_catcake/jni/main.cpp:40: error: 'ckResMgr' has not been declared
G:/3D/CatCake/catcake-read-only/sample/project/android/hello_catcake/jni/main.cpp:41: error: 'ckResMgr' has not been declared
G:/3D/CatCake/catcake-read-only/sample/project/android/hello_catcake/jni/main.cpp:49: error: 'ckStartCatcake' was not declared in this scope
/cygdrive/g/android-ndk-r7b/build/core/build-binary.mk:243: recipe for target `/cygdrive/g/3D/CatCake/catcake-read-only/sample/project/android/hello_catcake/obj/local/armeabi/objs/hello_catcake/main.o' failed
make: *** [/cygdrive/g/3D/CatCake/catcake-read-only/sample/project/android/hello_catcake/obj/local/armeabi/objs/hello_catcake/main.o] Error 1


打开Android.mk文件发现这一行:

 LOCAL_C_INCLUDES := apps/catcake/include

从工程中可以看到,include目录在上一层目录中,与jni目录同等级,因此把这一行改成:

 LOCAL_C_INCLUDES := ../include


再执行ndk-build

又出现错误:

cly@topgun /cygdrive/g/3D/CatCake/catcake-read-only/sample/project/android/hello_catcake/jni
$ ndk-build
Compile++ thumb  : hello_catcake <= main.cpp
Compile++ thumb  : hello_catcake <= hello_catcake.cpp
SharedLibrary  : libhello_catcake.so
G:/android-ndk-r7b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld.exe: cannot find -lcatcake
collect2: ld returned 1 exit status
/cygdrive/g/android-ndk-r7b/build/core/build-binary.mk:314: recipe for target `/cygdrive/g/3D/CatCake/catcake-read-only/sample/project/android/hello_catcake/obj/local/armeabi/libhello_catcake.so' failed
make: *** [/cygdrive/g/3D/CatCake/catcake-read-only/sample/project/android/hello_catcake/obj/local/armeabi/libhello_catcake.so] Error 1


连接器找不到lcatcake库。


看了工程中的lib目录,发现有这个库:

libcatcake.a, libfreetype.a, libpng.a, libz.a


再查看Android.mk文件,到这一行:

 LOCAL_LDLIBS := -Lapps/catcake/lib -lcatcake -lfreetype -lpng -lz -lGLESv1_CM -lgcc

跟第一次出现的头文件找不到错误一样,路径有问题,改为:

 LOCAL_LDLIBS := -L../lib -lcatcake -lfreetype -lpng -lz -lGLESv1_CM -lgcc


再运行ndk-build,编译成功:

cly@topgun /cygdrive/g/3D/CatCake/catcake-read-only/sample/project/android/hello_catcake/jni
$ ndk-build
Compile++ thumb  : hello_catcake <= main.cpp
Compile++ thumb  : hello_catcake <= hello_catcake.cpp
SharedLibrary  : libhello_catcake.so
Install        : libhello_catcake.so => libs/armeabi/libhello_catcake.so


4.Eclipse运行为Android程序:

发现程序运行一闪而过。


看程序代码,发现在main.cpp中,有这么一段

 /*
        The resource files need to be copied to the target by using 'adb push' command like this:
            adb push hello_catcake/data /data/data/catcake_application.hello_catcake/data


        And they must be specified by the absolute paths in ckResMgr::loadResource.
    */
    ckResMgr::loadResource("/data/data/catcake_application.hello_catcake/data/catcake_logo_71x14.png", true);
    ckResMgr::loadResource("/data/data/catcake_application.hello_catcake/data/stonsans.ttf", true);


于是在hello_catcake目录的上级目录中运行adb push hello_catcake/data /data/data/catcake_application.hello_catcake/data命令

结果如下:

cly@topgun /cygdrive/g/3D/CatCake/catcake-read-only/sample/project/android
$ adb push hello_catcake/data /data/data/catcake_application.hello_catcake/data
push: hello_catcake/data/stonsans.ttf -> /data/data/catcake_application.hello_catcake/data/stonsans.ttf
push: hello_catcake/data/catcake_logo_71x14.png -> /data/data/catcake_application.hello_catcake/data/catcake_logo_71x14.png
2 files pushed. 0 files skipped.
1294 KB/s (15911 bytes in 0.012s)


点手机上的apk运行,运行成功,但界面有些错乱重叠,如下图:

Android 3D引擎之CatCake----编译hello_catcake_第1张图片


感觉是分辨率有些问题,看代码main.cpp中,有这么一句:

ckCreateCatcake("Hello Catcake", 320, 480, 30);

于是改为我手机的分辨率480,854,重新编译库和apk,运行正常,结果如下:

Android 3D引擎之CatCake----编译hello_catcake_第2张图片


5.疑问:

catcake怎么用这么种资源管理方式?

编译出一个apk,还得另外把资源文件导进去,这在产品上怎么用?

看来还需要研究,肯定不会只是这种方式。


你可能感兴趣的:(eclipse,android,command,jni,include,引擎)