Egret打包Android"/>
Egret打包Android
用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的环境变量:
参考.html
配置好后就可以在cmd里使用javac命令了
接着配置AS,因为AS默认用户的网络环境很好,随时都想联网下东西,还想连外国的服务器,国内有墙,所以几乎不行
先干掉Android first run:
参考:/
然后告诉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=.8-all.zip
最后一行就是项目使用的gradle,Support 4.0.3默认使用的2.8,我们改为
distributionUrl=.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里,大概像这样:
apply plugin: 'com.android.application'android {compileSdkVersion 25buildToolsVersion "25.0.1"defaultConfig {applicationId "org.egret.java.wonder"minSdkVersion 14targetSdkVersion 25versionCode 1versionName "1.0"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}sourceSets{main{assets.srcDirs = ['../assets']jniLibs.srcDirs=['libs']}}useLibrary 'org.apache.http.legacy'
}dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])testCompile 'junit:junit:4.12'compile 'com.android.support:appcompat-v7:19.+'
}
- 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里加上
lintOptions {abortOnError false
}
- 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是有些不同的
debug | release | |
---|---|---|
Egret | create_app生成的,没有runtime,编译参数DEBUG为恒真 | publish生成的,可以用runtime,编译参数DEBUG为恒假 |
Android | 特殊处理,自带debug签名 | 没有签名,没有签名的APK是不能安装的 |
至于怎么签名,请看
到这里,Android的打包就算完了
Egret的发布,请看这篇文章。(暂时没写)
更多推荐
Egret打包Android
发布评论