用Egret开发的过程比较轻松,当我开始打包 & 热更时,遇到了巨量的问题
本文是Android打包教程,旨在讲解Egret打包Android的过程中,各种配置该怎么改,还有一些坑的解释
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://mazhuang.org/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.gradle.org/distributions/gradle-2.8-all.zip
最后一行就是项目使用的gradle,Support 4.0.3默认使用的2.8,我们改为
distributionUrl=https://services.gradle.org/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里,大概像这样:
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.1"
defaultConfig {
applicationId "org.egret.java.wonder"
minSdkVersion 14
targetSdkVersion 25
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles 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.+'
}
而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
}
完成。
如果你是使用mavenLocal,你可能还会遇到 could not found junit 4.12
如果你没有跑测试用例的需求,那可以选择把dependencies {}里
testCompile 'junit:junit:4.12'
删掉,同时还要删掉这两个文件夹,它们是用于编写测试用例的
终于,编译成功了,可以看到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是不能安装的 |
至于怎么签名,请看http://stackoverflow.com/questions/18328730/how-to-create-a-release-signed-apk-file-using-gradle
到这里,Android的打包就算完了
Egret的发布,请看这篇文章。(暂时没写)