================================================================================
项目概述
================================================================================
核心功能是在PSVita上加载和运行Android游戏的原生SO库文件。
技术栈:
-
SO文件加载:so_util库
-
JNI环境模拟:FalsoJNI
-
图形适配:vitaGL (OpenGL ES → vitaGL)
-
控制映射:PSVita按键 → Android触摸事件
-
系统桥接:标准C库函数重新实现
================================================================================
================================================================================
android-so加载器开发流程
vitasdk-soft版本安装命令行 (1)
git clone https://github.com/vitasdk-softfp/vdpm(2)
cd vdpm(3)
./bootstrap-vitasdk.sh(4)
使用文件查看器打开.bashrc文件,在最后面添加变量
export VITASDK=/usr/local/vitasdk # define $VITASDK if you haven't alreadyexport PATH=$VITASDK/bin:$PATH # add vitasdk tool to $PATH if you haven't already保存退出 记得以后每次登录ubantu记得在命令行输入以下代码:
source ~/.bashrc(5)然后安装必要的库:
./install-all.sh(6)安装完毕一定要再更新一下,不然后面各自缺运行库,你会很痛苦 在vdpm的目录下运行以下代码,他会自动更新到最新的所有库
./vitasdk-update注意:
1.关于SceKernelDmacMgr_stub这个库,有些项目的cmake文件会把SceKernelDmacMgr(正确)写成SceKernelDmacmgr(错误),注意手动更正cmake.TXT文件
2.关于sceLibcBridge报缺少的话,需要手动安装克隆R神的此项目!
具体操作:克隆后,使用make命令,会出现out文件夹,把里面的编译出的libSceLibcBridge_stub.a 和libSceLibcBridge_stub_weak.a 移动到~\usr\local\vitasdk\arm-vita-eabi\lib目录下方
cp out/libSceLibcBridge_stub.a $(VITASDK)/arm-vita-eabi/lib/cp out/libSceLibcBridge_stub_weak.a $(VITASDK)/arm-vita-eabi/lib/3.记得测试vitasdk-soft打包vpk是否正常,可以任意选个R神的自制游戏进行构建测试,例如这个项目
git clone https://github.com/Rinnegatamante/valiant-vita.gitcd valiant-vitamkdir build && cd buildcmake .. && make如果构建成功,那么你的开发环境就顺利搭建好了!!!
移植安卓游戏要求:
✔️ 有ARMv6 或 ARMv7 可执行文件,只存在ARMv8 可执行文件就无法移植
✔️ 有OpenGL:要求为GLES 1 或 GLES 2,GLES 3+无法移植,低于的可以移植
✔️ FMOD:如果存在libfmod.so和libfmodstudio.so,可以移植声音,如果存在其他 FMOD 文件例如(libfmodevent.so,libfmodex.so),则游戏无法移植声音。
❌ Kotlin:如果存在 Kotlin 文件夹,但没有 lib 文件夹,则游戏无法移植。
❌ Unity 游戏:如果 lib 文件夹包含 libunity.so,则游戏无法移植。
❌ Java 游戏:如果 lib 文件夹包含 libgdx.so,则游戏无法移植。
判断OpenGL版本可以反编译AndroidManifest.xml,搜索glEsVersion数字(转换成二进制查看)
实在xml文件里面找不到的话可以考虑apk全部反编译,查看opengl调用的相关接口,例如我在《夏日口袋》这个官方安卓版了,在n.java这个文件发现的这一行
// 使用的是GL10接口,这表明:
import javax.microedition.khronos.opengles.GL10;才发现这个游戏用的是gl10的接口,表明他属于OpenGL ES 1.1
补充说明(来自初代NPC大大):
SoLoad加载器游戏移植说明
1游戏apk不是unity制作的,可以看其他公告鉴别
2游戏apk一定要有32位的so文件,如何鉴别就是看游戏apk里的lib文件夹里面有armeabi或armeabi-v7a文件夹就是32位的了。
3游戏apk要求openGL的版本为3.0及以下的
4游戏apk的游戏逻辑最好是在一个so文件里,因为现在好像只能加载一个so文件.
群里的soload加载器工具文件夹里有相应的工具和说明例子可以看
可以找用sdl制作安卓来做游戏移植练习,因为sdl游戏的逻辑一般都在so里,用的安卓java的逻辑少。
轩辕剑3天之痕是sdl游戏,可以作为例子参考
git clone https://github.com/v-atamanenko/soloader-boilerplate.git