Project1

标题: Rpg Maker MV android 打包方案(加入自定义存档目录设置) [打印本页]

作者: huhao1987    时间: 2020-4-19 21:34
标题: Rpg Maker MV android 打包方案(加入自定义存档目录设置)
本帖最后由 huhao1987 于 2020-4-28 10:10 编辑

大家好,我算是初来乍到了,虽然注册了很久,但几乎没发过贴.最近是玩过了某个游戏才开始研究RMMV的,因为本职是Android程序员,所以对和Android有关的东西都会有点敏感.研究了下目前各类把RMMV游戏打包成android格式的方法,主流的有两种方式(应该).

一种是使用github上的MV Android Client,基于Android studio,相对于原生,但是操作比较复杂,而且是基于他项目的复制粘贴,看起来运行没问题,但是实际上项目内很多东西修改起来很复杂,比如包名和一些代码.
另一种则是比较常见的傻瓜打包工具,这类工具简单方便,但是可塑性比较差,比如用的应该是比较久版的sdk之类的.

所以废话了这么多,终于该说正题了.我用了2天时间写了个依赖库,基于原生android,也就是必须要使用Android studio,但内部代码量非常少,可以使用最新sdk,可以自己加代码(如果你想学着写点Android代码给游戏加点料之类的),生成出来的apk完全是你自己的东西,包括包名,签名之类的.后面的版本会对本地存档的bug进行android端的修复(因为这个问题在目前版本的Android上其实是用纯JS实现不了的).后续还会加入对obb的支持,也就是可以上架Google Play(这个我知道对国内开发者可能意义不大).

项目介绍:https://github.com/huhao1987/RMMV-android-deployment/blob/master/README.zh_CN.md

有任何问题请留言,或者在github上开issues.


本项目提供了一个可以帮助RMMV游戏作者制作_安卓_版本游戏的依赖库,并且使用方便快捷.
本项目使用kotlin编写,所以代码比Java更易读和简便.

更新日志
添加Android本地存档支持(基于我编写的插件)

添加自定义存档目录


基本步骤

1. 首先你要下载最新Android Studio, 目前最新版是3.6.3.
2. 创建一个新项目或者打开一个已有的项目.
3. 在项目环境刷新完毕后,选择"build.gradle(Project:xxxx)" 在allproects里加入 "maven { url 'https://jitpack.io' }"
  1. allprojects {
  2.     repositories {
  3.         google()
  4.         jcenter()
  5.          maven { url 'https://jitpack.io' }

  6.     }
  7. }
复制代码


4. 在 "build.gradle(Module:app)"中加入下面一行
  1. implementation 'com.github.huhao1987:RMMV-android-deployment:1.0.8'
复制代码

5. 选择 "manifests", 在"activity"标签内添加
   
  1.   android:configChanges="orientation|screenSize"
  2.        android:screenOrientation="sensorLandscape"
复制代码

此步骤可以保证游戏运行于横屏

如果你的游戏需要网络支持
5.1 请添加

   
  1. <uses-permission android:name="android.permission.INTERNET" />
  2.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
复制代码

5.2 在"application"标签内添加

  1.         android:networkSecurityConfig="@xml/network_security_config"
复制代码

5.3 右键点击 "app"->"New"->"Android Resource Directory", 在Resource type里选择"xml". 右键点击 "xml"->"New"->"XML Resource file",命名为"network_security_config",然后复制以下代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <network-security-config>
  3.     <base-config cleartextTrafficPermitted="true" />
  4. </network-security-config>
复制代码

5.1 和 5.2设置可以让游戏有网络连接权限.5.2能保证连接到"http"和"https"都不被阻断

在项目的主activity的layout文件中加入下面的控件,默认主activity为MainActivity, 它的layout文件一般为activity_main.
  1. <hh.rpgmakerplayer.webviewmodule.rpgPlayerView
  2.         android:id="@+id/rpgwebview"
  3.         android:layout_width="match_parent"
  4.         android:layout_height="match_parent" />
复制代码

如果你的项目里没有assets目录,右键点击 "app"-"New"->"Folder"->"Assets Folder",然后把你游戏的www文件夹复制进去.

在MainActivity的oncreate方法中加入下面几行

kotlin:
  1. rpgwebview.build()
  2. rpgwebview.Playgame("//android_asset/www/index.html")
复制代码

Java:
  1. rpgPlayerView rpgwebview=findViewById(R.id.rpgwebview)
  2. rpgwebview.build()
  3. rpgwebview.Playgame("//android_asset/www/index.html")
复制代码

在手机上编译并且运行你的游戏.
高级操作
除去基本步骤,你也可以使用一些其他属性

1)全屏游戏或者不全屏
  1. rpgwebview
  2. .isfullscreen(false/true)
  3. .build()
复制代码

2)使用你自己的evaluateJavascript运行游戏
  1. rpgwebview
  2. .setevaluateJavascript(xxxxxx)
  3. .build()
复制代码

3)Android 存档支持
由于Android系统的限制,RMMV无法将存档保存在Android本地,我写了个插件来支持。 用法很简单,首先使用本项目来创建你的Android游戏项目,从 这里下载hh_Android_save.js,然后在你的RMMV项目中开启这个插件。

记住修改之后更新你Android项目中的assets文件夹

之后当你测试和玩游戏的时候,游戏存档会被存储在app的内部存储中,如果你root过,可以在这个文件夹下找到游戏存档。

4) 自定义存档设置
添加自定义存档设置,本功能允许你把存档保存在设置的目录里,但是你必须自己获取android的写文件权限。
  1. rpgwebview.setupcustompath("your path")
  2. rpgwebview.build()
复制代码

5)更多新功能...敬请期待
作者: PLeaseS    时间: 2020-4-19 22:46
感谢大佬
然而好像还是不能用一些插件
作者: huhao1987    时间: 2020-4-20 06:13
PLeaseS 发表于 2020-4-19 22:46
感谢大佬
然而好像还是不能用一些插件

请问是什么插件呢?我用RMMV时间很短,不知道哪些插件会和Android本身属性有冲突
作者: huhao1987    时间: 2020-4-21 09:35
重大新更新:Android本地存档支持
作者: walf_man    时间: 2020-4-21 11:32
本帖最后由 walf_man 于 2020-4-21 11:35 编辑

不错,教程步骤清晰明了,内容翔实,可以说是非常好的教程,学习了
支持楼主为rmmv生态贡献自己的力量

edit:国内下载很卡,建议补充使用国内镜像的相关教程,虽然说百度一大把,但不懂这块知识得同学,可能都不知道该怎么百度
作者: CxyGL    时间: 2020-4-21 11:44
好物,非常感谢
作者: huhao1987    时间: 2020-4-21 12:05
walf_man 发表于 2020-4-21 11:32
不错,教程步骤清晰明了,内容翔实,可以说是非常好的教程,学习了
支持楼主为rmmv生态贡献自己的力量

Android studio吗?我看能不能传个百度网盘
作者: huhao1987    时间: 2020-4-28 10:10
加入更新:自定义存档目录设置
作者: haiyin    时间: 2020-5-3 13:42
大佬,你的方法Playgame()第二个参数的Boolean值true代表啥路径,false呢
作者: huhao1987    时间: 2020-5-3 15:36
本帖最后由 huhao1987 于 2020-5-3 15:44 编辑
haiyin 发表于 2020-5-3 13:42
大佬,你的方法Playgame()第二个参数的Boolean值true代表啥路径,false呢


是判断是否为网络链接,也就是传网络url过去,把这个设置成true能直接运行.
不过这个功能只是我之前测试的时候用的,并不算完善,我也没深入写,默认是false,后面可能会删掉
作者: xiaoruis    时间: 2020-5-9 11:29
非常好!又提供了更多的打包可能!
作者: dhies    时间: 2020-5-28 23:34
这个报错是缺少插件吧  但是按照这个提示网址下载后的文件 放在那
还是因为其他什么原因?

QQ图片20200528233042.png (128.31 KB, 下载次数: 24)

QQ图片20200528233042.png

作者: huhao1987    时间: 2020-5-31 06:29
dhies 发表于 2020-5-28 23:34
这个报错是缺少插件吧  但是按照这个提示网址下载后的文件 放在那
还是因为其他什么原因? ...

你用法错了,这个是源码,我已经编译好了,直接按照介绍里的方法是用就行了。你自己新建项目,然后把我的库引用进去,不需要修改源码
作者: 远去之情    时间: 2020-5-31 22:44
支持大佬
作者: 小怪兽奇奇侠    时间: 2020-7-15 16:19
本帖最后由 小怪兽奇奇侠 于 2020-7-15 18:00 编辑

我还是放弃android studio了,自己捣鼓了两天,软件用起来蛮卡的,而且要安装的东西一大堆,好像还只能装到c盘,整的我c盘一点空间都没了。
唉~~
作者: 两只小猪呼噜噜    时间: 2020-8-4 07:29
小怪兽奇奇侠 发表于 2020-7-15 16:19
我还是放弃android studio了,自己捣鼓了两天,软件用起来蛮卡的,而且要安装的东西一大堆,好像还只能装到 ...

安装时选择自定义安装,可以自行调整安装位置
作者: 两只小猪呼噜噜    时间: 2020-8-4 07:31
小怪兽奇奇侠 发表于 2020-7-15 16:19
我还是放弃android studio了,自己捣鼓了两天,软件用起来蛮卡的,而且要安装的东西一大堆,好像还只能装到 ...


安装时选择自定义安装,可以自行调整安装位置
为啥会发两次
作者: allrobot    时间: 2020-11-23 13:35
小怪兽奇奇侠 发表于 2020-7-15 16:19
我还是放弃android studio了,自己捣鼓了两天,软件用起来蛮卡的,而且要安装的东西一大堆,好像还只能装到 ...

Android studio用起来是挺简单的,下载、安装配置啥花了十几分钟吧,网上搜索打包方法、过程中出现的奇怪错误花了6、7小时,找到靠谱的打包教程网站花了一小时。。。

主要是RPG Maker MV的html打包apk教程网上比较缺乏,你看看我的帖子打包视频以及国外打包教程的网址,按照做基本OK

现在打包RPG MAKER MV不到5分中就搞定了(除了某些使用自定义插件的游戏,需要修改js文件,只要index.html正常运行一般可以正常打包的)
作者: 苍穹之光    时间: 2020-11-23 15:47
支持楼主!其实楼主试试cordova打包,只要配置好sdk啥的就行了。我记得hbuilder有类似的打包方案,我记得当时打包出来了无法全屏,找了好久都没有找到方案。而且无法全屏,最可气的是他开始有个无法关闭的启动广告界面,让人很难以接受。看到楼主的帖子真的是太好了,期待楼主的打包项目~
作者: 苍穹之光    时间: 2020-11-23 15:48
不知道这个mz能不能用呢?
作者: qq983378065    时间: 2021-1-4 17:35
本帖最后由 qq983378065 于 2021-1-4 20:00 编辑

感谢大佬,但是有几点不明白,求解答
首先是建立network_security_config.xml文件后,是把文件里的代码全部删掉然后复制大佬提供的代码进去吗?
然后修改是MainActivity的oncreate这一部分,看不太明白,查询了度娘之后还是看不懂,
最后就是自定义存档目录,请问是要修改哪部分代码?
作者: huhao1987    时间: 2021-1-5 11:37
qq983378065 发表于 2021-1-4 17:35
感谢大佬,但是有几点不明白,求解答
首先是建立network_security_config.xml文件后,是把文件里的代码全部 ...

network_security_config文件,直接覆盖自动生成的代码
OnCreate直接复制粘贴代码。
自定义存档我估计你自己弄会很麻烦,可以暂时不考虑
作者: gwb170269171    时间: 2021-1-5 21:56
好难啊,就不能做个一健打包么?
作者: qq983378065    时间: 2021-1-5 22:51
huhao1987 发表于 2021-1-5 11:37
network_security_config文件,直接覆盖自动生成的代码
OnCreate直接复制粘贴代码。
自定义存档我估计你 ...

从5.3开始就看不太懂了,
在项目的主activity的layout文件中加入下面的控件这一步我是这样写的,修改的是activity_main.xml文件
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     xmlns:app="http://schemas.android.com/apk/res-auto"
  4.     xmlns:tools="http://schemas.android.com/tools"
  5.     android:layout_width="match_parent"
  6.     android:layout_height="match_parent"
  7.     tools:context=".MainActivity">
  8.     <hh.rpgmakerplayer.webviewmodule.rpgPlayerView
  9.         android:id="@+id/rpgwebview"
  10.         android:layout_width="match_parent"
  11.         android:layout_height="match_parent" />
  12. </androidx.constraintlayout.widget.ConstraintLayout>
复制代码

这样子写不知道对不对。

在MainActivity的oncreate方法中加入下面几行这一步我是这样写的,修改改的是WebPlayerView文件
  1.         public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
  2.             rpgPlayerView rpgwebview=findViewById(R.id.rpgwebview)
  3.             rpgwebview.build()
  4.             rpgwebview.Playgame("//android_asset/www/index.html")
  5.             WebView dumbWV = new WebView(view.getContext());
  6.             dumbWV.setWebViewClient(new WebViewClient() {
  7.                 @Override
  8.                 public void onPageStarted(WebView view, String url, Bitmap favicon) {
  9.                     Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
  10.                     view.getContext().startActivity(browserIntent);
  11.                 }
  12.             });
  13.             ((WebView.WebViewTransport) resultMsg.obj).setWebView(dumbWV);
  14.             resultMsg.sendToTarget();
  15.             return true;
  16.         }

  17.     }
复制代码

然后这一步报错了,提示Cannot resolve symbol 'rpgPlayerView'
作者: huhao1987    时间: 2021-1-7 16:26
如果这是你的原代码的话,那就缺了几个分号,java是每行分号结尾的.

  1.     public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
  2.         rpgPlayerView rpgwebview=findViewById(R.id.rpgwebview);
  3.         rpgwebview.build();
  4.         rpgwebview.Playgame("//android_asset/www/index.html",false);
  5.         WebView dumbWV = new WebView(view.getContext());
  6.         dumbWV.setWebViewClient(new WebViewClient() {
  7.             @Override
  8.             public void onPageStarted(WebView view, String url, Bitmap favicon) {
  9.                 Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
  10.                 view.getContext().startActivity(browserIntent);
  11.             }
  12.         });
  13.         ((WebView.WebViewTransport) resultMsg.obj).setWebView(dumbWV);
  14.         resultMsg.sendToTarget();
  15.         return true;
  16.     }
复制代码

作者: hryio    时间: 2021-2-4 19:58
太感谢了!!!帮了我大忙!之前看网上教程试过webview,xwalkview方式在Android studio去打包,但是效果都不好...今天看见这篇帖子,简单的流程就搞定了我的问题~而且效果非常好!大赞!
作者: JRH    时间: 2021-4-27 00:27
所以还是想问大佬MZ可以用嘛
作者: FATE379    时间: 2021-4-27 00:49
谢大佬
作者: kumeng210    时间: 2021-5-10 18:53
膜拜大佬,感谢分享
作者: tengaxa    时间: 2022-11-26 17:54
感谢楼主,但是目前jcenter好像已经不能用了,AS小白自己摸索了一下才改好,如果楼主能有图文教程那就更好了
作者: 青衣blackcloth    时间: 2023-10-30 18:29
支持大佬
作者: Darknessforever    时间: 2024-2-2 04:25
huhao1987 发表于 2020-4-20 21:35
重大新更新:Android本地存档支持

I could not reply in the conversation message you sent. I dont have permission as yet.

Just want to say thank you so much. You are the best

我无法回复您发送的对话消息。 我还没有获得许可。

只是想说非常感谢。 你是最棒的




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1