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版)相关推荐

  1. ubuntu下街机模拟器 mame 安装和玩拳王97

    打开一个终端窗口(命令可以直接键入或粘贴到它 删除旧的sdlmame存储库(如果有): sudo rm -f /etc/apt/sources.list.d/sdlmame4ubuntu.* 添加非官 ...

  2. 好用的街机模拟器-WinKawaks提供下载

    WinKawaks街机模拟器194个游戏是好用的街机模拟器之一,与Nebula和MAME齐名,WinKawaks街机模拟器194个游戏支持的游戏的有CAPCOM公司的CPS1,CPS2所有游戏,Win ...

  3. 安卓街机模拟器 MAME4droid 源码,只需要自己加入rom 可以发布到安卓市场了。

    安卓街机模拟器 MAME4droid 源码,只需要自己加入rom 可以发布到安卓市场了,可以开始自己的赚钱了.为了方便大家赚钱,apk展示的包含万普广告条,也就是只要自己去申请万普广告条,填一下app ...

  4. html如何把三个按键放一起_winkawaks使用手柄按键玩游戏的教程-winkawaks街机模拟器用手柄攻略...

    Android版iPhone版PC版 Android版 winkawaks使用手版本:版 / 大小: 9.8MBhttp://30tqyb.com/zuixinban/1504480.html 查看详 ...

  5. linux终端玩fc游戏,在UBuntu下玩FC和街机模拟器

    我不是太爱玩游戏,所以Linux下我并没有特别关心游戏的问题.不过有一天,突然觉得想起以前在Windows下玩过的VirtualNES FC(红白机)模拟器和Nebula街机模拟器了.也许是怀旧的缘故 ...

  6. 模拟器显示空白图片_Kawaks街机模拟器,还是小时候的味道!

    APP菜园 打造属于我们自己的APP帝国 1.打开支付宝app,首页搜索 "8221050"  然后点击快捷功能,天天领红包. 2.软件领取流程:1.认真阅读下软件介绍:2.找到图 ...

  7. 开源ios街机模拟器

    今天分享两个开源的街机模拟器,app store上的街机模拟器因为侵权问题都被下架了,但作为开发者,我们可以用xcode编译安装源码级别的app. 上两个开源地址: 模拟器项目github地址1: h ...

  8. 安卓街机模拟器对战源码修改详解(1)

    源码编译是c界面,java部分启动模拟器,然后进入c的界面. 我们需要修改代码,然后传递文件名作为启动游戏路径的标志,这样我们就不需要c的这样丑陋的界面了.下面是java开发界面.点击按钮会直接启动模 ...

  9. skype安卓手机版_安卓:街机游戏大全~手机版

    街机游戏大全~手机版 大家好,我是雨晨~ 给大家带来的 一款游戏叫做 街机游戏大全 ~手机版 目前支持安卓系统 大家快来亲身感受一下吧~~ 游戏介绍 安卓手机街机游戏1500合集,街机模拟器街机游戏可 ...

  10. 手机qq表白代码大全可复制_街机游戏大全~手机版

    街机游戏大全~手机版 安卓:街机游戏大全~手机版 1.街机游戏 2.经典游戏 游戏介绍 安卓手机街机游戏1500合集,街机模拟器街机游戏可以说是一代80.90后的童年回忆,此合集收录1500多款街机经 ...

最新文章

  1. lede 插件_家中路由换新——lede软路由安装教程
  2. 如何建立顺畅的项目流程
  3. c语言动态链表creat函数,用create建立动态链表
  4. 计算机网络技术在农业中的应用,计算机网络技术在农业节水灌溉系统中的运用——评《计算机网络技术与应用实践》...
  5. 37 个 MySQL 数据库小技巧,不看别后悔!
  6. Key usage extensions and extended key usage
  7. 【CentOS Linux 7】实验6【web服务器搭建与管理】
  8. CF - 741(C. Arpa’s overnight party and Mehrdad’s silent entering) 二分图构造
  9. ArcGIS案例学习笔记-找出最近距离的垂线
  10. 6月21 百度文本编辑器
  11. sql修改链接服务器名称,SQL Server 创建链接服务器的脚本,自定义链路服务器的简短名称...
  12. 8月| R社区原创作者免费赠书
  13. 读取usb接口数据_笔记本接口不够?无须担心!小米分线器开箱初体验
  14. 【游戏】基于matlab GUI音乐闹钟设计【含Matlab源码 1105期】
  15. keil报错:*** FATAL ERROR L250,注册2032年
  16. cad修改快捷键_CAD自定义修改快捷键
  17. C语言:cJSON库用法详解
  18. JS判断页面是否刷新
  19. 运用supervisor管理thinkqueue 和swoole推送
  20. 修改域服务器同步时间,配置Windows Server 2008 R2 域控制器的时间同步

热门文章

  1. hdu5294Tricks Device 最大流之最小割
  2. Python多线程爬虫获取电影下载链接
  3. 探索GIS+物联网应用场景 MapGIS IoT实时大数据解决方案
  4. 鸿蒙系统清理垃圾,极速清理系统垃圾 一举收回上G磁盘空间
  5. 初步了解JS的作用域
  6. 联想正在美丽的海南岛搞个大活动,速看
  7. c语言中math的作用,C语言常用的math函数
  8. 解决pychram:卡在Updating Python Interpreter
  9. O形橡胶密封圈设计标准
  10. 项目管理第四章项目整合管理