本文档为EMAS Android SDK快速集成手册。
一、 APP 工程准备
新建或者使用已有的Android工程。
在接入前,确保工程能编译通过,顺利运行后,再开始接入, 避免增加不必要的麻烦。
二、 集成准备
EMAS包括以下SDK能力,可选择性接入:
应用更新SDK:提供应用的完整APK更新能力、动态部署更新/DexPatch补丁更新能力(如接入了)
高可用SDK:提供客户端整个性能、稳定性监控分析,包括crash、性能、日志、埋点等等
WEEX-SDK:一套构建高性能、可扩展的原生应用跨平台开发方案
Atlas组件化框架:提供组件化架构、动态部署、DexPatch热修复能力
2.1 应用信息和SDK配置信息
集成前需获取应用的信息和SDK相关配置信息,SDK初始化需要这些信息才能正常的工作。
以下局部变量名均来自脚手架工程中的EmasInit.java文件,此处仅仅作为说明示例,本文后面会用到。可以将这些数据配置到一个json文件中放置到assets目录,初始化的时候通过读取该文件获取数据(参考脚手架工程里的DemoApplication.java),可以参考脚手架工程中assets目录中的aliyun-emas-services.json文件。
应用基本信息:AppKey和SecretKey,在控制台注册应用后获取。
mAppkey = 10000039
mAppSecret = c7795717b2306055f21fb33418c1d011
SDK配置信息:域名需接入方申请(POC环境的域名配置信息可参考POC Demo)。
统一网关域名: 示例:mMTOPDoman = “aserver.emas-ha.cn”
APP渠道号:开发者自定义。渠道号组成规则(渠道ID@应用英文名_应用os_版本号),示例:mChannelID = “1001@DemoApp_Android_1.0.0”。
高可用SDK长连通道域名:示例:mACCSDoman = “acs.emas-ha.cn”
高可用SDK数据上报域名:示例:mHAUniversalHost = “adash.emas-ha.cn”
高可用SDKOssBucket:示例:mHAOSSBucketName = “emas-ha-remote-log-poc”
高可用SDK公钥:示例:mHARSAPublicKey = “xxxx”
高可用SDK启动Activity:APP的启动Activity。示例:mStartActivity = “com.taobao.demo.WelcomActivity”
2.2 配置依赖下载MAVEN地址
修改文件位置:项目根目录的build.gradle(Demo位置:Android-EMAS-Demo/build.gradle)
修改文件内容:allprojects.repositories中配置maven仓库地址用于拉取EMAS相关SDK
示例:
allprojects{
repositories{
maven{url"http://nexus-ce.emas-poc.com/repository/maven-public/"//SDK中心仓库地址
credentials{
username="xxx"//SDK中心仓库账号密码
password="xxx"
}
}
maven{url"xxx"}//业务模块aar/awb snapshot仓库地址(体验时可填POC产物仓库snapshot地址)
maven{url"xxx"}//业务模块aar/awb release仓库地址(体验时可填POC产物仓库release地址)
}
}
2.3 接入EMAS插件
1、引入插件库
修改文件位置:工程根目录的build.gradle(Demo位置:Android-EMAS-Demo/build.gradle)
修改文件内容:在buildscript中
(1)配置maven仓库地址[maven {url “xxx”}]用于拉取EMAS插件
(2)加入classpath “com.taobao.android.gradle:emas-plugin:2.1.3”(注:如仍使用gradle4.0以下环境,emas插件请使用1.7.2-SNAPSHOT)示例:
buildscript{
repositories{
maven{
url"http://nexus-ce.emas-poc.com/repository/maven-public/"//EMAS SDK中心仓库地址
credentials{
username="xxx"//SDK中心仓库账号密码
password="xxx"
}}//SDK中心仓库地址
maven{url"http://maven.aliyun.com/nexus/content/repositories/google/"}
}
dependencies{
classpath"com.taobao.android.gradle:emas-plugin:2.1.3"
}
}
2、创建common.gradle
新建文件位置: 在app项目根目录新建common.gradle(Demo位置:Android-EMAS-Demo/app/common.gradle)
配置作用:用于从EMAS控制台获取环境信息
文件内容:
defemas_version_name=getEnvValue('EMAS_VERSION_NAME',"1.0")
defemas_version_code=getEnvValue('EMAS_VERSION_CODE',"1")
defemas_base_version=getEnvValue('EMAS_BASE_VERSION',"1")
//设置渠道包
defemas_channel_list=getEnvValue("EMAS_CHANNEL_LIST","")
if(emas_version_code){
android.defaultConfig.versionCode=emas_version_code.toInteger()
println("emas_version_code="+emas_version_code)
}
if(emas_base_version){
println("emas_base_version="+emas_base_version)
}
if(emas_version_name){
android.defaultConfig.versionName=emas_version_name
println("emas_version_name="+emas_version_name)
}
if(emas_channel_list){
println("emas_channel_list="+emas_channel_list)
}
StringgetEnvValue(key,defValue){
defval=System.getProperty(key);
if(null!=val){
returnval;
}
val=System.getenv(key);
if(null!=val){
returnval;
}
returndefValue;
}
3、应用common.gradle及EMAS插件
修改文件位置:app项目根目录的build.gradle(Demo位置:Android-EMAS-Demo/app/build.gradle)
(1)拷贝下文脚本到build.gradle
(2)拷贝完后,去掉工程中所有原有的 apply plugin: ‘com.android.application’
apply plugin:'com.taobao.android.emas'
applyfrom:'common.gradle'
configurations{
providedCompile
all*.excludegroup:'com.taobao.android',module:'tnet-jni'
all*.excludegroup:'com.taobao.android',module:'tlog_adapter'
all*.excludegroup:'com.aliyun.ams',module:'alicloud-android-utdid'
}
configurations.all{
resolutionStrategy{
cacheChangingModulesFor(0,'SECONDS')
cacheChangingModulesFor(0,'SECONDS')
}
}
task wrapper(type:Wrapper){
gradleVersion='3.3'
distributionUrl='http://emas-deploy.oss-cn-hangzhou.aliyuncs.com/gradle-3.3-all.zip'
}
4、在android标签中去掉系统生成的versionCode、versionName配置,加入dexOptions配置
配置作用:防止默认的version覆盖控制台传入的version(EMAS平台在做每次发布时会托管这两个参数达到自动更新的效果)
android{
...
//versionCode 1
//versionName "1.0"
dexOptions{
javaMaxHeapSize='2048m'
additionalParameters=["--no-strict"]
}
...
}
5、 按需配置lib目前平台类型,语言类型支持
android{
...
defaultConfig{
...
ndk{
abiFilters"x86","armeabi"//默认只启用x86,armeabi
}
resConfigs"en","fr"
...
}
...
}
6、 加入插件配置
新建文件位置: 在app项目根目录新建emasConfig.properties(Demo位置:Android-EMAS-Demo/app/emasConfig.properties)
配置作用:插件功能开关
文件内容:
atlas.tBuildConfig.classInject=false
atlas.enhanceConfigs.debug.enabled=false
atlas.enhanceConfigs.release.enabled=false
#构建配置
atlas.tBuildConfig.fastProguard=true
atlas.tBuildConfig.atlasMultiDex=true
atlas.tBuildConfig.mergeOverride=false
atlas.multiDexConfigs.debug.fastMultiDex=true
atlas.multiDexConfigs.release.fastMultiDex=true
#构建渠道包开关
atlas.atlasChannelConfigs.debug.enabled=false
atlas.atlasChannelConfigs.release.enabled=false
7、 加入Gradle官方配置
新建文件位置: 在app项目根目录新建gradle.properties(Demo位置:Android-EMAS-Demo/app/gradle.properties)
配置作用:gradle官方配置,优化构建效率及处理兼容性等
文件内容:
android.enableBuildCache=true
org.gradle.daemon=false
android.enableAapt2=false
2.4 添加SDK依赖
依赖说明
以下步骤会集成以下三个SDK:
1、应用更新SDK(UPDATE SDK)
2、高可用SDK(HA SDK)
3、跨平台SDK(WEEX SDK)
如只需部分能力,可在build.gradle脚本、EmasInit.java、AndroidMenifest.xml中删除掉对应gradle依赖/代码/配置即可。
集成方式
Gradle依赖:标准gradle方式依赖各SDK版本(首次接入推荐采用该方式)
通过EMAS研发平台管理依赖:在EMAS研发平台配置各SDK模块后,可通过平台来发布,更新各SDK模块到APP中。(首次接入不建议采用,对平台模块管理有足够理解后再陆续迁移到平台上)
Gradle依赖
``` dependencies {
/************基础库 START**********/
compile('com.alibaba:fastjson:1.1.54.android@jar'){transitivetrue}
compile('com.taobao.android:mtopsdk_allinone:3.0.8.2-open@jar'){transitivetrue}
compile('com.taobao.android:networksdk:3.3.7-open@jar'){transitivetrue}
compile('com.taobao.android:tnet4android:3.1.14.6@aar'){transitivetrue}
compile('com.taobao.android:utdid4all:1.1.5.3_proguard@jar'){transitivetrue}
/************基础库 END**********/
/************UPDATE START**********/
compile('com.taobao.android:update-datasource:1.0.1-open@jar'){transitivefalse}
compile('com.taobao.android:update-common:1.0.1-open@aar'){transitivefalse}
compile('com.taobao.android:update-manager:1.0.1-open@aar'){transitivefalse}
compile('com.taobao.android:update-adapter:1.0.1-open@jar'){transitivefalse}
compile('com.taobao.android:update-main:1.0.1-open@aar'){transitivefalse}
compile('com.taobao.android:downloader:2.0.2.12@jar'){transitivetrue}
/************UPDATE END**********/
/************高可用 SDK START**********/
compile('com.taobao.android:ut-analytics:1.1.0.1-open@aar'){transitivetrue}
compile('com.alibaba.ha:alihatbadapter:1.1.0.7-open@aar'){
transitivetrue
//exclude group:'com.taobao.android', module:'tlog_uploader_oss'
}
//compile ('com.taobao.android:tlog_uploader_ceph:1.1.0.7-open@aar')
//默认oss通道需要依赖oss的三方库
compile'com.squareup.okhttp3:okhttp:3.4.1@jar'
compile'com.squareup.okio:okio:1.9.0@jar'
compile'com.aliyun.dpa:oss-android-sdk:2.4.2@aar'
/************高可用 SDK END**********/
/************WEEX SDK START**********/
compile("com.taobao.android:weex_sdk:0.18.16.28"){transitivetrue}
compile('com.taobao.android:zcache:0.1.2-open'){transitivetrue}
compile('com.alibaba.mtl:dynamicConfig:0.1.0.10'){transitivetrue}
compile('com.alibaba.mtl:dynamicconfigadapter:0.1.0.10'){transitivetrue}
compile('com.android.support:recyclerview-v7:26.+'){transi