mame android版本,重整街机模拟器MAME(Android版)
github上开源项目MAME4all可将MAME模拟器运行在iOS和Android上,但由于年代比较久远(7-8年前的项目),代码clone下来基本无法编译。
原项目虽然在github上开源,但从目录结构上可看出原项目是svn做的版本控制,这也很正常,毕竟那时github还没流行起来。首先把代码clone下来,为了方便记录升级过程,并且方便读者clone,笔者将源项目分割。基于最后一个tag “MAME4droid 1.9.2 (0.139u1)”来修改,代码已上到我的github MAME4Mobile。本文将基于此来修改编译
环境:
Mac OS X 10.14.4
Android Studio 3.5.2
NDK 17.2.4988734
一、导入Android Studio
原android项目应该是基于Eclipse。用Android Studio菜单的File -> New -> Import project ... 导入为AS的工程,最终工程笔者已经上到github
二、编译libMAME4droid
此步骤比较麻烦,主要工作都集中于此步。
1. 配置makefile
此处历经周折,
NDK 笔者使用NDK 17.2.4988734,原因是 安卓自NDK-r18起移除了gcc, 并完全删除了gnustl、gabi++ 和 stlport。而模拟器源码使用了stl。
具体配置详见github makefile 文件
2. 编译
(建议直接在我的git根目录下执行make,这里编译一次要很久,而且有时遇到修改,make命令不能中途自动更新obj文件,导致重新编译好多次,太花时间)
编译报错 opensl_snd.c:51:30: error: 'memcpy' was not declared in this scope, 找不到memcpy。解决办法 在opensl_snd.c中添加#include
aarch64-linux-android/bin/ld: cannot find crtbegin_so.o: No such file or directory和aarch64-linux-android/bin/ld: cannot find crtend_so.o: No such file or directory 不知道为什么ld始终找不到这2个.o 配置了-L选项也不行,最后没办法把crtbegin_so.o,crtend_so.o拷到makefile同级目录Linking通过。(后来改为ln -s 软连接的方式,已配置到makefile实现自动ln armv7a和armv8a。
libMAME4droid.so: dlopen failed: cannot locate symbol "_ZNSs4_Rep20_S_empty_rep_storageE" 找不到_ZNSs4_Rep20_S_empty_rep_storageE这个符号,经查是c++ string类型的默认值,感觉是手机上没有找到这个,试了把libgnustl_shared.so打到apk包里,运行解决。(我用旧版本的AS-3.4.1 在Application.mk中配置了APP_STL := gnustl_shared后,nkd-build 会自动将libgnustl_shared.so拷贝到libs/armeabi-xxx目录下,升级3.5之后就没有这个行为了,不知道是不是AS改了这方面功能)
编译的最终结果将得到一个名为mame或mame64的二进制文件,即我们的 libMAME4droid.so 库。
当然工程里面还需要配置一下编译jni文件,你可以选择使用ndk-build或是cmake。两种我都写了一下,改下app的build.gradle可以切换两种编译方式。
3. 适配
Run起来后,手机在横屏状态下,会发现摇杆和A、B、X、Y 都挡住游戏画面了,而且两边还有很多空白区。如图:
这里笔者简单适配一下最终效果,看图
这个顺眼多了。界面布局配置写在配置文件里面,位于res下的raw目录。数字的第一列表示控件类型,第二列代表控件ID,第三列x轴坐标... 感兴趣的同学看下MainHelper -> inputHandler.readControllerValues
原作者由于基于当时的Android设备来配置屏幕空间。在当下Android手机上显然是不适配的,小弟就简单的将raw-large中的16_9内容复制到raw中,在我的荣耀V10上效果如上图。
4. 运行
最后 投币、start就可以愉快的玩耍了。
三、总结
MAME是一个跨平台的街机模拟器引擎,但最新版貌似没有考虑兼容移动设备。本文使用的核心源码是比较老的0.139u1版本,在网上找ROM的时候也要留意下版本兼容性。
还有一个iOS版我还没编译,留到下次吧~~(项目好忙)
最近半年多一直在弄Android,好久没搞iOS了,不知道swift啊、xcode啊又加了什么新特性。自从苹果出了刘海屏,越来越不待见苹果了~
标签:NDK,github,makefile,编译,so,Android,MAME,街机
来源: https://www.cnblogs.com/ciml/p/12028435.html
mame android版本,重整街机模拟器MAME(Android版)相关推荐
- ubuntu下街机模拟器 mame 安装和玩拳王97
打开一个终端窗口(命令可以直接键入或粘贴到它 删除旧的sdlmame存储库(如果有): sudo rm -f /etc/apt/sources.list.d/sdlmame4ubuntu.* 添加非官 ...
- 好用的街机模拟器-WinKawaks提供下载
WinKawaks街机模拟器194个游戏是好用的街机模拟器之一,与Nebula和MAME齐名,WinKawaks街机模拟器194个游戏支持的游戏的有CAPCOM公司的CPS1,CPS2所有游戏,Win ...
- 安卓街机模拟器 MAME4droid 源码,只需要自己加入rom 可以发布到安卓市场了。
安卓街机模拟器 MAME4droid 源码,只需要自己加入rom 可以发布到安卓市场了,可以开始自己的赚钱了.为了方便大家赚钱,apk展示的包含万普广告条,也就是只要自己去申请万普广告条,填一下app ...
- html如何把三个按键放一起_winkawaks使用手柄按键玩游戏的教程-winkawaks街机模拟器用手柄攻略...
Android版iPhone版PC版 Android版 winkawaks使用手版本:版 / 大小: 9.8MBhttp://30tqyb.com/zuixinban/1504480.html 查看详 ...
- linux终端玩fc游戏,在UBuntu下玩FC和街机模拟器
我不是太爱玩游戏,所以Linux下我并没有特别关心游戏的问题.不过有一天,突然觉得想起以前在Windows下玩过的VirtualNES FC(红白机)模拟器和Nebula街机模拟器了.也许是怀旧的缘故 ...
- 模拟器显示空白图片_Kawaks街机模拟器,还是小时候的味道!
APP菜园 打造属于我们自己的APP帝国 1.打开支付宝app,首页搜索 "8221050" 然后点击快捷功能,天天领红包. 2.软件领取流程:1.认真阅读下软件介绍:2.找到图 ...
- 开源ios街机模拟器
今天分享两个开源的街机模拟器,app store上的街机模拟器因为侵权问题都被下架了,但作为开发者,我们可以用xcode编译安装源码级别的app. 上两个开源地址: 模拟器项目github地址1: h ...
- 安卓街机模拟器对战源码修改详解(1)
源码编译是c界面,java部分启动模拟器,然后进入c的界面. 我们需要修改代码,然后传递文件名作为启动游戏路径的标志,这样我们就不需要c的这样丑陋的界面了.下面是java开发界面.点击按钮会直接启动模 ...
- skype安卓手机版_安卓:街机游戏大全~手机版
街机游戏大全~手机版 大家好,我是雨晨~ 给大家带来的 一款游戏叫做 街机游戏大全 ~手机版 目前支持安卓系统 大家快来亲身感受一下吧~~ 游戏介绍 安卓手机街机游戏1500合集,街机模拟器街机游戏可 ...
- 手机qq表白代码大全可复制_街机游戏大全~手机版
街机游戏大全~手机版 安卓:街机游戏大全~手机版 1.街机游戏 2.经典游戏 游戏介绍 安卓手机街机游戏1500合集,街机模拟器街机游戏可以说是一代80.90后的童年回忆,此合集收录1500多款街机经 ...
最新文章
- lede 插件_家中路由换新——lede软路由安装教程
- 如何建立顺畅的项目流程
- c语言动态链表creat函数,用create建立动态链表
- 计算机网络技术在农业中的应用,计算机网络技术在农业节水灌溉系统中的运用——评《计算机网络技术与应用实践》...
- 37 个 MySQL 数据库小技巧,不看别后悔!
- Key usage extensions and extended key usage
- 【CentOS Linux 7】实验6【web服务器搭建与管理】
- CF - 741(C. Arpa’s overnight party and Mehrdad’s silent entering) 二分图构造
- ArcGIS案例学习笔记-找出最近距离的垂线
- 6月21 百度文本编辑器
- sql修改链接服务器名称,SQL Server 创建链接服务器的脚本,自定义链路服务器的简短名称...
- 8月| R社区原创作者免费赠书
- 读取usb接口数据_笔记本接口不够?无须担心!小米分线器开箱初体验
- 【游戏】基于matlab GUI音乐闹钟设计【含Matlab源码 1105期】
- keil报错:*** FATAL ERROR L250,注册2032年
- cad修改快捷键_CAD自定义修改快捷键
- C语言:cJSON库用法详解
- JS判断页面是否刷新
- 运用supervisor管理thinkqueue 和swoole推送
- 修改域服务器同步时间,配置Windows Server 2008 R2 域控制器的时间同步