设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3012|回复: 4
打印 上一主题 下一主题

[交流讨论] MV插件开发杂谈之安卓移植初步踩坑

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1912
在线时间
1554 小时
注册时间
2013-4-13
帖子
917
跳转到指定楼层
1
发表于 2019-10-23 22:44:49 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
打算不用任何打包工具从头搞定安卓端移植
官方打包工具Crosswalk已经不再维护
所以我们使用安卓自带的Webview作为浏览器底层
目测很多国产手机定制的Webview版本较低
为了支持更多JS特性(包括WebGl)
需要从酷安等第三方商城安装高版本的Webview
我把我的2000元辣鸡Vivo Y79升级到了70版本

之前我是55版本, 虽然支持大部分比如箭头函数, class关键字, static关键字, getter/setter等特性
但是不支持...运算符, 所以如果要支持更广泛的设备的话还是不要使用解构运算符比较好
(不太清楚为啥国内系统不升级WebView...)

然后是下载安卓的开发工具Android Studio和SDK
选择一个5.1以上的版本的SDK(我选择了7.1版本)
创建一个新的工程, 选择 Empty Activity 就行
语言选择Kotlin就可以
然后Android Studio会自动帮你初始化, 不用管它

我们首先要把浏览器加入到视图当中
我们在左侧选择res/layout/activity_main.xml
修改布局文件, 我们删除了所有没用的东西,
添加了一个WebView进去, 并设置了它的大小和id


  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.     <WebView
  9.         android:id="@+id/webView"
  10.         android:layout_width="match_parent"
  11.         android:layout_height="match_parent"
  12.         app:layout_constraintBottom_toBottomOf="parent"
  13.         app:layout_constraintEnd_toEndOf="parent"
  14.         app:layout_constraintStart_toStartOf="parent"
  15.         app:layout_constraintTop_toTopOf="parent" />
  16. </androidx.constraintlayout.widget.ConstraintLayout>
复制代码


然后修改一下manifests\AndroidManifest.xml 文件

android:configChanges="orientation|screenSize"
android:screenOrientation="landscape"
就是在activity里增加强制横屏和切换不刷新的设定
这个是为了解除切出应用导致WebView重加在的问题


  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3.     package="com.example.myapplication">

  4.     <application
  5.         android:allowBackup="true"
  6.         android:icon="@mipmap/ic_launcher"
  7.         android:label="@string/app_name"
  8.         android:roundIcon="@mipmap/ic_launcher_round"
  9.         android:supportsRtl="true"
  10.         android:theme="@style/AppTheme">
  11.         <activity android:name=".MainActivity"
  12.         android:configChanges="orientation|screenSize"
  13.         android:screenOrientation="landscape">
  14.             <intent-filter>
  15.                 <action android:name="android.intent.action.MAIN" />

  16.                 <category android:name="android.intent.category.LAUNCHER" />
  17.             </intent-filter>
  18.         </activity>
  19.     </application>
  20. </manifest>

复制代码


下一步在工程浏览器里选择app, 右键new->Folder->AssetsFolder创建一个assets文件夹
用来存放我们的RM工程
右键新建的assets文件夹, 选择Show in Explorer就能进入该文件夹下
你可以把你部署打包后的网页版放在这里, index.html应该在assets文件夹下

接下来我们来写主Activity的逻辑, 选择MainActivity.kt
首先我们先在onCreate方法里继续添加代码
这段代码初始化了我们的应用的UI效果
比如隐藏导航栏, 状态栏, 全屏等等


  1. override fun onCreate(savedInstanceState: Bundle?) {
  2.     super.onCreate(savedInstanceState)
  3.     setContentView(R.layout.activity_main)

  4.     window.decorView.systemUiVisibility =
  5.         (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
  6.                 or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
  7.                 or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
  8.                 or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
  9.                 or View.SYSTEM_UI_FLAG_FULLSCREEN
  10.                 or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY)
  11.     window.navigationBarColor = Color.TRANSPARENT;
  12.     window.statusBarColor = Color.TRANSPARENT;
  13.     supportActionBar?.hide();
  14. }
复制代码


如果出现提示缺少导入的包按下Alt+Enter就可以自动导入啦

然后下一步我们要让webView加载我们的html文件, 继续写onCreate方法
我们先选取id为webView的WebView组件并设置它的属性
我们允许JS运行, 这样会有安全警告, 但是我们不添加联网权限就可以了
允许使用网页版的存储, 这个可以让我们在手机端上存档读档
允许以url的方式读取文件, 这个可以解决本地资源文件读取的问题
最后让游戏跳转到index.html



  1. override fun onCreate(savedInstanceState: Bundle?) {
  2.   ....
  3.   val webView: WebView = findViewById(R.id.webView)
  4.   val webSettings = webView.settings
  5.   webView.webViewClient = WebViewClient()
  6.   webSettings.javaScriptEnabled = true
  7.   webSettings.domStorageEnabled = true
  8.   webSettings.allowFileAccessFromFileURLs = true
  9.   webView.loadUrl("file:///android_asset/index.html")
  10. }
复制代码


其实到这里功能已经差不多了, 不过还有几个可以改进的地方

在mainActivity下面重写一下几个类
如果我们按下了返回按钮, 就会导致网页后退, 所以我们要把它禁用
还有如果锁屏状态下, WebView会继续运行, 会导致播放声音
我们需要运行一段js代码来将bgm在暂停的时候停止, 在恢复的时候恢复


  1. override fun onResume() {
  2.     super.onResume()
  3.     val webView: WebView = findViewById(R.id.webView)
  4.     webView.evaluateJavascript(
  5.         "AudioManager.onResume()",
  6.         null
  7.     )

  8. }

  9. override fun onSaveInstanceState(bundle: Bundle) {
  10.     super.onSaveInstanceState(bundle)
  11.     val webView: WebView = findViewById(R.id.webView)
  12.     webView.evaluateJavascript(
  13.         "AudioManager.onPaused()",
  14.         null
  15.     )
  16. }

  17. override fun onBackPressed() {}
复制代码


在我们的工程里rpg_managers里添加两段js代码
这个只是随意添加的, 可以写成插件或者在初始化的时候由安卓端注入代码



  1. AudioManager.onPaused = function() {
  2.     this._pausedBgm = AudioManager.saveBgm()
  3.     this.stopBgm()
  4. };

  5. AudioManager.onResume = function() {
  6.     AudioManager.replayBgm(this._pausedBgm);
  7. };

复制代码


这样这个问题算是勉强解决了,
不过注意安卓系统会自动管理手机内存, 清除不活跃的应用
如果锁屏一段时间, 应用就会被销毁, 未保存的记录也就丢失啦

接下来就是测试, 手机(需要开启开发者权限)连接到电脑上, 然后选择Run就可以了~

以上就是安卓移植踩坑的, 欢迎大家交流心得

评分

参与人数 4+4 收起 理由
acips + 1 精品文章
347780682 + 1 精品文章
白嫩白嫩的 + 1 精品文章
qq57271884 + 1 精品文章

查看全部评分

夏普的道具店

塞露提亚-道具屋的经营妙方同人作品
发布帖:点击这里

Lv4.逐梦者

梦石
0
星屑
6422
在线时间
1557 小时
注册时间
2011-6-14
帖子
520
4
发表于 2019-10-24 09:53:09 | 只看该作者
顺便再求一个空包或是操作截图(˶˚  ᗨ ˚˶)
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6422
在线时间
1557 小时
注册时间
2011-6-14
帖子
520
3
发表于 2019-10-24 09:34:29 手机端发表。 | 只看该作者
好东西  谢谢楼主分享!对了不知道楼主懂不懂怎么在Android Studio嵌入腾讯x5,据说其他低端手机内核版本比55版本还低,腾讯x5可以使用到55版本,不知道楼主知不知道怎么嵌入腾讯x5

点评

我也是才开始学...  发表于 2019-10-24 18:08
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3834
在线时间
1181 小时
注册时间
2016-8-9
帖子
2399

开拓者

2
发表于 2019-10-23 23:07:18 | 只看该作者
之前尝试过安卓四特有丢打包,感觉比官方推荐的流畅很多,过了一年了不知道安卓环境是什么情况了,也没怎么测试手机版,感谢楼主大神分享经验,给我等萌新点亮了前进路上的明灯
酸酸甜甜就④哇噢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-12 01:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表