Laya Air 1.x版本打包输出Android工程简明流程

1. 官方文档

https://ldc.layabox.com/doc/?nav=zh-as-7-1-0

2. LayaNative命令行工具

https://ldc.layabox.com/doc/?nav=zh-ts-7-3-0

  • 安装
npm install -g layanative
  • layanative的使用文档:
layanative

用法:
   layanative createapp [OPTIONS]
   layanative refreshres [OPTIONS]
   layanative removeres [OPTIONS]
   layanative listversions
描述:
   createapp
       创建一个runtime项目。
       具体帮助信息用 layanative createapp --help 查看。
   refreshres
       刷新当前目录对应的项目的资源。
       具体帮助信息用 layanative refreshres --help 查看。
   removeres
       删除当前目录对应的项目的资源。
       具体帮助信息用 layanative removeres --help 查看。
   listversions
       列出所有可用SDK版本。
       具体帮助信息用 layanative listversions --help 查看。

3. 导出Android Studio工程

3.1. 从Laya Air IDE导出

https://ldc.layabox.com/doc/?nav=zh-ts-7-3-1

  • 1). 从Laya Air IDE打开“app 构建”对话框
  • 2). 下载要用的Native版本模板,建议用能选的最新版本。
    截图为演示
  • 3). 配置好项目内容
    • 项目类型:建议选Android studio
    • 单机版:如果是单机游戏,即所有代码和资源都从本地加载,则需要勾上“单机版”
    • 项目名称、应用名、包名,导出后可以在Android Studio中修改
    • 输出路径:导出的根目录
    • 资源路径:选择Laya项目的bin目录,例如 /bin

3.2. 使用命令行工具导出

使用layanative createapp,也可以导出native项目,具体可以查看帮助

layanative createapp --help

文档:https://ldc.layabox.com/doc/?nav=zh-ts-7-3-0

3.3. 更新js代码及资源

当Laya项目的js代码或者资源有更新时,不需要再次导出项目
只需在Android Studio项目目录下执行:

layanative refreshres -p android_studio

4. 代码要点

4.1. 横竖屏设置

需要保持两个地方一致

  • 1). index.html
<meta name="laya" screenorientation="portrait" />

  • 2). menifest
android:screenOrientation="portrait"

4.2. 声音

只支持ogg或者wave格式,建议用ogg,尺寸小一些。

4.3. 开启WebGL

如果你要运行3D功能,必须要开启WebGL,不然会报错:

Laya3D init error, must support webGL    

修改 app/assets/scripts/config.js文件,添加

window.ConchRenderType = 6;

5. 与Java交互

5.1. JS 调用 Java

详细文档:https://ldc.layabox.com/doc/?nav=zh-ts-7-2-2

要点

  • 1). 支持类的静态方法和对象方法调用
    平台类 PlatformClass
class PlatformClass
{
  /**
   创建Java/OC的类, 脚本和平台对应
   className  包 + 类名
  */
  static createClass(className:string):PlatformClass;
  /**
     创建该类的对象
     args 构造函数的参数
  */
  newObject(...args):PlatformObj;
  /**
     调用该类的静态方法, 返回返回值
     (注: Java层可以直接返回返回值, OC不能, 返回值为空的, OC可以调用改方法)
     methodName 方法名
     args  参数
  */
  call(methodName:string,...args);   
  /**
     调用该类的静态方法, 通过异步返回给脚本, 此时需要平台(Java/OC)调用相应的接口
     Java : ExportJavaFunction.CallBackToJS(class|className,methodeName, result);
     返回给脚本:
     Callback  回调函数, 参数为返回值
     methodName 方法名
     args  参数
  */
  callWithBack(callback,methodName:string,...args);
}

平台对象 PlatformObj

class PlatformObj
{
  /**
     调用该对象的成员方法, 返回返回值
     (注: Java层可以直接返回返回值, OC不能, 返回值为空的, OC可以调用改方法)
     methodName 方法名
     args  参数
  */
  call(methodName:string,...args);
  /**
     调用该对象的成员方法, 通过异步返回给脚本, 此时需要平台(Java/OC)调用相应的接口
     Java : ExportJavaFunction.CallBackToJS(obj(this),methodeName, result ); // obj即该Java对象
     返回给脚本:
     Callback  回调函数, 参数为返回值
     methodName 方法名
     args  参数
  */
  callWithBack(callback,methodName:string,...args);
}
  • 2). 使用支持传入参数类型为:数字, 字符串, 布尔值
  • 3). 返回值需要用回调方法获取
PlatformClass.callWithBack
PlatformObject.callWithBack

注意,只return是不无法把返回值传递给JS代码的,还需要在Java方法中显式调用ExportJavaFunction.CallBackToJS来传递返回值。

ExportJavaFunction.CallBackToJS

举个例子

5.2. Java调用JS

使用ConchJNI.RunJS可以直接执行一段js代码

ConchJNI.RunJS("alert('hello world')");

6. 打包前的其他工作

6.1. 打包前移除x86 jniLibs库

  • 路径:studio中路径 app/jniLibs/x86

注意:实际在文件系统中的路径是 app/libs/x86

注意: 不删除的话,提交到Google Play时报错:

6.2. 修改启动画面

文档:https://ldc.layabox.com/doc/?nav=zh-as-7-1-5

  • 默认的启动画面是Laya的Logo
  • 对话框的配置:app/res/layout/splash_dialog.xml
  • 默认的splash素材:app/res/drawable/layabox.png

    可以替换成自己的启动图,并适当修改显示尺寸和背景颜色。

6.3. 修改加载提示

  • 1). 加载提示文字
    默认的加载提示是很中二的中文提示,修改app/assets/scripts/config.js中以下代码,来替换成自己的文字。
  • 2). 加载显示方式
    如果不想显示加载的百分比,或者显示方式,可以进一步修改 app/java/SplashDialog类
  • 3). 其他
    如果想进一步修改,比如添加加载进度条,可以参考文档

https://ldc.layabox.com/doc/?nav=zh-as-7-1-5

6.4. 移除自动更新APK

修改 app/java/MainActivity onCreate方法

        /*
         * 如果不想使用更新流程,可以屏蔽checkApkUpdate函数,直接打开initEngine函数
         */
        checkApkUpdate(this);
        //initEngine();

示例

6.5. 其他工作

  • 1). 替换icon
  • 2). 修改包名
  • 3). 修改游戏名

7. 打包

完成!

8. 其他问题请关注公众号在后台提问