分享

Egret打包Android

 郭恩 2018-09-04

转自:https://blog.csdn.net/Niteip/article/details/69937335


用Egret开发的过程比较轻松,当我开始打包 & 热更时,遇到了巨量的问题

本文是Android打包教程,旨在讲解Egret打包Android的过程中,各种配置该怎么改,还有一些坑的解释

1 综述

Wing插件里的发布Android是有问题的,最好用命令行

打包Android就是把原生的HTML5游戏,转为Android项目,再用Android Studio(简称AS)生成APK

官方现在偏向使用Android Studio,原因很多,在此不赘述

配置环境

安装Android Studio,我选择2.2.3版本

安装好后,增加系统环境变量:ANDROID_HOME

路径是你的Android Sdk路径

这里写图片描述

接着在系统变量Path里增加:

%ANDROID_HOME%\platform-tools

配置好后你就可以在cmd里使用adb命令了,如果不行,请检查配置(下同)。

接着配置gradle,AS 2.2.3自带gradle 2.14.1,该版本是二。十四,比2.8要高,回想最开始我在这个版本这里被坑了几个小时

新建系统环境变量:GRADLE_HOME

路径是 你的Android Studio目录\gradle\gradle-2.14.1

这里写图片描述

接着在系统变量Path里增加:

%GRADLE_HOME%\bin

最好重启计算机,然后就可以在cmd里使用gradle命令了

然后配置java的环境变量:

参考http://jingyan.baidu.com/article/f96699bb8b38e0894e3c1bef.html

配置好后就可以在cmd里使用javac命令了


接着配置AS,因为AS默认用户的网络环境很好,随时都想联网下东西,还想连外国的服务器,国内有墙,所以几乎不行

先干掉Android first run:

参考:http:///2015/05/06/android-studio/

然后告诉AS我想要进入离线模式:

这里写图片描述

这里写图片描述

开始打包

现在回到Wing,在终端输入

egret create_app wonder -f . -t %你的Support路径%\egret-android-support-as-4.0.3

其中,wonder是你的项目的名字,-f是项目路径(我就是当前),-t是你的support模版路径

看下官方给的support里包含什么

__MACOSX、egret-android-support-4.0.3 和 egret-android-support-as-4.0.3

带“as”的就是Android Studio项目模版,不带的是其他工程(比如eclipse)的模版

生成好后,打开AS,点击导入工程:

这里写图片描述

选择proj.android

这里写图片描述

你极有可能会卡在这里

这里写图片描述

这是因为AS尝试去下载gradle,下载的版本是由项目配置而定的,这个是基本下不动的,所以我们要指定项目配置用gradle 2.14.1:

找到 你的Android项目\proj.android\gradle\wrapper\gradle-wrapper.properties

内容大概如下:

distributionBase=GRADLE_USER_HOME

distributionPath=wrapper/dists

zipStoreBase=GRADLE_USER_HOME

zipStorePath=wrapper/dists

distributionUrl=https://services./distributions/gradle-2.8-all.zip

最后一行就是项目使用的gradle,Support 4.0.3默认使用的2.8,我们改为

distributionUrl=https://services./distributions/gradle-2.14.1-all.zip

重新进,现在就能进去了

修改工程属性

开始修改配置,注意,所有的项目配置最终都是改的代码,这些代码在配置文件里,本文只介绍可视化的修改方法

这里写图片描述

这里写图片描述

这里写图片描述

Android Plugin用2.2.3,因为2.2.3可以使用Instant Run

这里写图片描述

选择Sdk Version和Build Tool

我们为了兼容更多的用户(玩家)的机型,肯定选择稍微低一点的版本比较好,所以

这篇文章

教你怎么离线安装Sdk和build Tool。

你极有可能遇到这个错:

这里写图片描述

这是因为AS把你的top-level build.gradle 改错了,我觉得这是AS的bug

来看下工程结构

这里写图片描述

一个工程只有一个Top-level,有多少个项目就有多少个Module-Level

Module-Level gradle里,大概像这样:

  1. apply plugin: 'com.android.application'
  2. android {
  3. compileSdkVersion 25
  4. buildToolsVersion "25.0.1"
  5. defaultConfig {
  6. applicationId "org.egret.java.wonder"
  7. minSdkVersion 14
  8. targetSdkVersion 25
  9. versionCode 1
  10. versionName "1.0"
  11. }
  12. buildTypes {
  13. release {
  14. minifyEnabled false
  15. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  16. }
  17. }
  18. sourceSets{
  19. main{
  20. assets.srcDirs = ['../assets']
  21. jniLibs.srcDirs=['libs']
  22. }
  23. }
  24. useLibrary 'org.apache.http.legacy'
  25. }
  26. dependencies {
  27. compile fileTree(dir: 'libs', include: ['*.jar'])
  28. testCompile 'junit:junit:4.12'
  29. compile 'com.android.support:appcompat-v7:19.+'
  30. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

而Top-level gradle里,不能有Android{}标签,检查下,你的Top-Level里应该是写错了,将之删除

好了,现在在终端输入:

gradle build

开始编译,如果是第一次编,有可能需要去下jcenter,这时等下吧。

我的公司环境是内网完全不能联网,怎么办?

1.用mavenLocal

先解释下:

世界上有两个标准仓库,jcenter和Maven Central,它们都是Maven仓库

但是它们维护在完全不同的服务器上,由不同的人提供内容,两者之间毫无关系。

事实上两个仓库都具有相同的使命:提供Java或者Android library服务。上传到哪个(或者都上传)取决于开发者。

起初,Android Studio 选择Maven Central作为默认仓库。但是Maven Central的最大问题是对开发者不够友好。上传library异常困难。上传上去的开发者都是某种程度的极客。同时还因为诸如安全方面的其他原因,Android Studio团队决定把默认的仓库替换成jcenter。

在完全不能联网的环境,我可以使用AS自带的maven仓库,步骤如下:

先找到 C:\Users\你的名字\

新建文件夹,名字叫 .m2,在改名的时候你要输入 .m2.,即前后都有点,共两个点

然后进去,把 你的Android Studio目录\gradle\ 里的m2repository全部拷过去,拷到 C:\Users\你的名字\.m2

然后将其改名为repository

然后在Project里,把Plugin和Library改为 mavenLocal,完成。

这里写图片描述

2.另一种办法,就是把下载好的jcenter传送进去

回到编译上,你有可能会遇到lintOptions问题,照AS的提示,在app\build.gradle里加上

  1. lintOptions {
  2. abortOnError false
  3. }
  • 1
  • 2
  • 3
  • 4

完成。

如果你是使用mavenLocal,你可能还会遇到 could not found junit 4.12

如果你没有跑测试用例的需求,那可以选择把dependencies {}里

testCompile 'junit:junit:4.12'
  • 1
  • 2

删掉,同时还要删掉这两个文件夹,它们是用于编写测试用例的

这里写图片描述

终于,编译成功了,可以看到AS在 wonder\proj.android\app\build\outputs\apk\ 下生成了两个apk

这里写图片描述

一个debug,一个没签名的release

先解释下:

Egret的debug和release概念和Android是有些不同的

 debugrelease
Egretcreate_app生成的,没有runtime,编译参数DEBUG为恒真publish生成的,可以用runtime,编译参数DEBUG为恒假
Android特殊处理,自带debug签名没有签名,没有签名的APK是不能安装的

至于怎么签名,请看http:///questions/18328730/how-to-create-a-release-signed-apk-file-using-gradle

到这里,Android的打包就算完了

Egret的发布,请看这篇文章。(暂时没写)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多