移植步骤:
1,将VisualBoyAdvance目录放入packages/apps目录下,创建android.mk文件,创建工程编译配置项:
include $(CLEAR_VARS)
LOCAL_MODULE := libvba
include $(BUILD_SHARED_LIBRARY)
LOCAL_MODULE_TAGS := tests
LOCAL_SHARED_LIBRARIES := libc libm libui libpng libz
LOCAL_MODULE := libvba
include $(BUILD_SHARED_LIBRARY)
LOCAL_MODULE_TAGS := tests
LOCAL_SHARED_LIBRARIES := libc libm libui libpng libz
2,将目录中的C++源码文件列表放入android.mk文件列表中,在VisualBoyAdvance目录下使用如下命令,
find -name *.cpp | grep -v win32 | grep -v gtk | awk 'BEGIN
{print "common_SRC_FILES:= \\"} {print $0 " \\"}'
common_SRC_FILES:= \
./src/gb/gbGlobals.cpp \
./src/gb/gbPrinter.cpp \
… #省略很多文件列表
./src/bilinear.cpp #结尾处连接符手工删除
{print "common_SRC_FILES:= \\"} {print $0 " \\"}'
common_SRC_FILES:= \
./src/gb/gbGlobals.cpp \
./src/gb/gbPrinter.cpp \
… #省略很多文件列表
./src/bilinear.cpp #结尾处连接符手工删除
3,手工将./src/sdl/SDL.cpp里面所有涉及sdl api调用的函数全部注空,待填入新的窗口系统处理代码。
4,试着在该目录下键入mm命令编译,正常情况下,能够一次编译通过,如有问题,应将编译错误解决。
5,SDL模块的替换思路如下:输入事件用jni接口方式,从java层获取的键盘事件传入,游戏输出的画面帧则通过直接写入java层申请得到Surface对应的native对象,并及时刷新来实现。
6,用eclipse创建java层代码,主要是创建全屏的窗口,窗口类型为SurfaceView,并将Surface对象通过jni接口传入 libvba中,同理将窗口获取的事件传入libvba中,将启动应用的参数(rom文件路径以及其它配置项)传入libvba中,最终由libvba来实现对rom的模拟执行,将用户的输入转为每一帧的游戏画面,并呈现在手机屏幕上。