ysoren 发表于 2018-6-21 08:18:40

【Egret】Windows中Andorid APP打包

Windows中Andorid APP打包
  http://edn.egret.com/cn/index.php?g=&m=article&a=index&id=166&terms1_id=25&terms2_id=39
  前提知识:有基本的Egret项目开发经验,会部署Android开发环境
  技术等级:中级
  必需产品:Egret Engine 1.5+(下载地址)
  Egret开发工具:WebStorm或Visual Studio + EgretVS (下载地址)

  Android开发工具:IntelliJ>说明
  Android封装Egret项目,即为之前所说的Android打包App。也就是让原本只能在浏览器运行的Egret项目变身为Android平台的App。不再依赖浏览器运行,而是像传统的Android App一样,直接运行在Android平台上。
为何建立Egret 的Android封装项目
  对Android开发比较熟悉的朋友会觉得绕弯路了,用Android直接开发岂不更方便?本教程开始前,我们分别对不同偏向的两种开发者进行分析,搞清为什么做,再学习怎么做。
对于原生Android开发者:
  1) 开发效率高,TypeScript本身的高级语言特性带来的开发效率提高,毋庸多言。
  2) 开发API友好。 Egret引擎使用AS3 API体系架构,是当前游戏业界开发2D游戏公认最友好方便,也是最先进的API体系,使开发游戏不再需要在臃肿的API中反复考量,集中精力专注具体的游戏需求实现。
  3) 跨平台开发。移动开发最理想的情况就是一个项目一套代码,多平台发布。Egret项目无论运行于浏览器、打包Android App还是iOS App均使用同一个Egret项目,当然也是同一套代码。
对于Egret标准项目开发者:
  由于建立Android App所使用的Egret-Android-Support本身实质是基于Egret runtime来运行的,所以对于Egret标准项目开发者,建立Android App的优势更加明显:
  1) runtime使用Native方式渲染,将Egret标准项目封装AndroidApp后将使游戏性能得到质的飞跃。
  2) runtime解决了碎片化的问题,因此不同的Android设备上对H5播放多声道声音的支持差异,不同Android版本对于硬件加速的支持差异,均统一得到了解决,统统都支持!
  3) 更多runtime带来的提升可参考 Egret Runtime 白皮书。
从标准的Egret项目开始
  本教程整体的目的是将Egret创建的可运行H5游戏,封装打包为一个可在Android真机运行的游戏App。
  目前的封装方式,实质上是需要额外建立一个Android项目,然后通过一些操作来使其可以运行Egret标准项目。这样的项目在本文中称之为Android封装项目。
  基于这样的封装方式,包含两部分,一个是Egret标准项目,另一个是Android封装项目。Egret标准项目的目的是建立所有的游戏运行及渲染逻辑,Android封装项目的目的是将Egret标准项目封装并且生成标准的Android APK包,安装后运行Egret标准项目的内容。
  为了便于管理,我们设计为一个主项目包含两个子项目并列的结构。 设我们要做的游戏项目名为runner(当然你可以根据自己喜好采用别的项目名称,后文中保持一致即可),则我们以此在工作空间建立主项目目录,名为runner。
  在runner内建立一个名为proj.egret的Egret项目。或者,将现有的Egret项目复制到这个位置。
  建议:由于目前Android封装Egret项目还在发展阶段,不能保证所有能在浏览器正常运行的Egret项目都可以在封装打包后同样正常运行。因此建议用egret create建立的标准项目来学习本教程。
  到这里,项目目录结构如图所示:

  后续小节将在runner内建立与proj.egret并列的目录,对应Android封装项目,我们命名为app。
  这样,我们设计总项目基本结构计划图:
  ├─runner
  │├─proj.egret
  │└─app
建立Android开发环境

  本文的重点不在这里,并且网上有大量优质的教程来教你这个,所以不再详述,只给出一些要点提示。 官方推荐使用JetBeans公司的开发工具IntelliJ>  该公司两种Android开发工具对比:

  a. Intellij>。 Intellij>  b. Android Studio。因为Android Studio只使用新的Gradle模式,因为Gradle要求实时联网编译,暂时不太建议一般用户试用。
  当然,您可以选择Eclipse或其他开发工具,但开发细节与教程不一样的地方,请自行解决~
  为帮助习惯使用Eclipse开发者学习本教程相关内容,特推荐相关教程:
  Eclipse如何导入Android项目?
准备Egret项目的Android封装模板
  由于从Egret项目纯手工建立App包含复杂的配置过程,因此Egret官方提供了现成的模板,方便我们快速建立App,Egret官方定义该模板名为Egret-Android-Support。
  Egret打包Android App的项目依赖我们准备好的Egret标准项目,并且从Egret-Android-Support模板开始。所以进行Android封装前,我们要部署好该模板。
  进入官方Egret-Android-support下载最新版Egret-Android-Support,解压到一个相对稳定的路径。这样我们建立不同的Android App打包项目时,命令的模板参数都指向该路径即可。
  比如,解压到路径D:\_env\egret-android-support。该路径内结构如图:

建立Android封装项目
  首先熟悉一下封装命令:
egret create_app app_name -f h5_game_path -t template_path  app_name参数即我们要创建的Android封装项目的目录名称,我们在前一节已经约定该名称为app。
  -f参数用来指定标准的Egret项目路径。
  -t参数用来指定创建Android封装项目的模板路径。直接使用上一节准备好的路径即可。
  在runner目录下,使用该命令建立Android项目:
...\runner> egret create_app app -f proj.egret -t D:\_env\egret-android-support  请注意,必须在项目的主目录路径执行该命令,本例中即为在runner目录内执行。
  如果该命令执行过程有报错,通常是由于执行过程检查Egret项目中的文件结构不完整造成的。这种情况下,请对Egret项目执行一次编译或引擎编译,之后再次运行create_app命令即可。
  正确运行egret create_app之后,则有如图目录结构:

  注意runner\app\proj.android即为Android项目目录。接下来,我们便导入这个目录为Android项目,并打包运行。
  从现在的目录结构可以看到,标准Egret项目的结构出现在了Android封装项目的assets/egret-game目录中。其内容与Egret标准项目内容是否完全一致我们并不需要清楚,因为引擎提供的同步命令会自动完成这些工作。后边介绍Egret项目同步时,会详细说明相关内容。
在开发环境中导入Android封装项目及进行基本配置

  由于历史遗留的问题,目前Android Support模板是Eclipse项目,但对于海纳百川的IntelliJ>
  打开IntelliJ>
  在弹出的对话框中选择Android项目目录,如前一节所述,选择runner\app\proj.android:
  按OK,在紧接的Import Project步骤,在Import project from external model中选择Eclipse:

  按Next,会提示Select Eclipse projects directory,默认路径通常是计算正确的,即我们在对话框第一步所选择的runner\app\proj.android目录。其他选项保留默认即可:
  继续Next,提示Select Eclipse projects to import,确保勾选了app,底部也勾选Open Project Structure after import:

  Next,该选择Android SDK了,选择准备好的Android SDK:
如还没有准备好,请回到前面的建立Android开发环境小节准备好了再到这里继续。
  通常应该选择最新的Android SDK,因为通常的SDK都是向下兼容的。如拿不定注意,就选择本教程所使用的4.2.2版本SDK。
  到这里,导入结束,按下Finish。
  依照之前的选项,弹出Project Structure对话框。
  默认该对话框会自动选择Modules选项卡,确认在列表中选择app模块。
  IntelliJ新手提示:IntelliJ中的模块(Module)对应于Eclipse的项目,IntelliJ中的Project对应于Eclipse中的工作空间概念,这个区别不搞清楚很容易熬出浆糊!
  模块右侧的子选项卡选择Dependencies,将IntelliJ所不需要的adt依赖删除:
  删除后点Apply按钮生效。
  然后我们还需要添加egret的Android支持库,在Dependencies标签页右侧点+选择Library:

  在弹出的小对话框中选择egret库:
  Add Selected确认,之后Dependencies标签页内容应该是如图所示:

  最后,还要确认一下语言等级正确,左侧选择Project,在Project language level中选择6开头的选项:

  按OK!至此,已经导入项目,并完成项目的基本配置过程。
调试运行Android封装项目
  项目本身就绪了,接下,我们再进行简单的配置,就可以打包项目并在真机上测试运行了。
  在工具栏选择模块的配置编辑:

  选中app模块,在右侧的General选项卡下部Target Device中选择USB device,OK确认:

  确保当前开发PC连接了Android手机,并在手机打开USB调试选项。如无真机,请在上述对话框选择Emulator,并确保Emulator正常运行。
  在工具栏选择调试app:

  如前边步骤都正确的话,在console中应该显示:

  至此,已经走完Android封装Egret项目的整个流程。
  但这只是开始,我们还需要根据项目开发需求进行各种开发,测试。
Android层面开发流程
  如console运行图所示,打包app的包名为默认的org.egret.java.app,这些都是标准Android项目的配置参数。很容易的,可以从AndroidManifest.xml中进行修改。
  这只是一个简单的举例。开发者可以根据需求进行特定的修改,比如接入某种Android SDK,就必须在这里进行。
  Android层面的开发流程比较容易,修改后,直接Rebuild项目即可更新。
Egret层面开发流程
  很显然,项目的核心逻辑还需要在Egret标准项目内进行。
  那么一个最重要的问题来了:Egret项目修改后是否能自动同步到Android封装项目呢?答案是NO!我们还需要手工同步。不必担心这个,我们下一节将会介绍如何自动化该步骤。
  Egret部分修改后,在主项目目录(runner)运行如下命令:
...\runner>egret build proj.egret --runtime native -e第三方库共计耗时:9.152秒native拷贝共计耗时:0.387秒  其中build后紧跟的是Egret标准项目名,接着后边跟的参数请不要做任何改动。参数的意思还是比较明显的,就是进行native引擎编译。
  从命令提示也能更多理解该命令的作用,那就是编译后复制到native项目,也就是Android封装项目内。
  在建立Android封装项目一节中,我们已经观察到Android封装项目内的assets/egret-game目录有与Egret标准项目相同的结构,我们称之为Egret同步目录。
  当执行同步命令前后,如对项目有版本控制跟踪,会发现Egret同步目录中的内容已经发生变化。
  这时,我们回到Android封装项目,运行/调试,即可运行项目的最新状态!
项目同步高级技巧
  基本流程建立起来之后,最让大家感到蛋疼的可能不是需要来回切换项目,而是每次切换到Android封装项目还需要先同步一下——很可能会忘记同步,而导致开发效率降低。
  还好,强大的IntelliJ已经为我们准备好了工具,来将该步骤完全省略,严格来说是捆绑到Run/Debug过程。以下来具体说明做法。
  在主项目目录runner内新建一个批处理文件sync.bat,编辑内容为前一节的同步命令行:

  在IntelliJ打开Settings(File-->Settings),在左栏的Tools下选择External Tools,在右栏顶部按+号,在打开的Create Tool对话框输入如图的内容:
  注意,其中的Name字段可以自己随意填,Program字段用了IntelliJ中的宏,这样使用模块相对路径的做法是为了使该工具可以在不同的Android封装Egret项目中均可用。
  工具创建好了,然后我们捆绑到Android封装项目中,使其可以自动运行。
  确保在IntelliJ打开了Android封装项目,打开app的运行/调试配置对话框。在右栏的General选项卡底部Before launch部分按+,选择Run External tool:
  在弹出的小对话框选择我们刚刚创建的工具Sync Egret:

  回到运行/调试配置对话框,将刚刚添加的Sync Egret工具移到最上边:

  按OK,到此已经配置捆绑同步成功。再次Run/Debug项目,首先会在底部的RunTab显示我们刚刚配置的Sync Egret工具运行:
  工具运行结束后会立即进入之前的Run/Debug流程。
  如此,我们再无须手工同步,同步Egret在Run/Debug时将完全自动完成!
自动同步并不总是需要
  自动同步命令的执行时间并非很短,有时可能会超过20秒,这有时候是一种负担。
  当某一阶段的开发工作主要集中在Android部分时,也就是Egret部分长期没有变化,那就建议将该自动工具从Before launch中删除,以避免不必要的时间浪费。
发布Release版本
  到目前为止,Android封装项目的assets/egret-game目录中,仍然是Egret项目开发状态的结构。其中还包含bin-debug这样明显是debug版才有的目录。
  大家都熟悉,Egret标准项目发布运行是分为debug版和release版的。同样在Android封装项目release阶段,Egret同步目录中的内容也需要提供为release版。
  同步release版也同样需要在主项目目录执行一条命令:
...\runner>egret publish proj.egret -compile --runtime native  注意同步Egret项目的命令只需要一条,即在debug阶段执行Egret层面开发流程一节所述的egret build ...命令,在release阶段执行本节所述的egret publish ...命令。
  执行该条命令后,再注意assets/egret-game目录内的结构,即发现bin-debug、luancher、libs已经消失,取而代之的是新增一个zip文件:

  我们不需要继续深究里边的内容结构。只需确保该命令正常运行,并更新assets/egret-game目录里的内容为这种结构。至于zip文件的文件名,包含一个随机数字,这个也无需关心。
  接下来确保Android封装项目中Android相关设定为Release,即可发布Release版本!
实例项目下载
  项目全部源码:下载地址
页: [1]
查看完整版本: 【Egret】Windows中Andorid APP打包