为方便EMAS各产品SDK快速、轻量接入,EMAS提供了统一的SDK依赖方式,供各产品SDK添加依赖使用。用户使用统一接入后,无需手动管理各产品SDK依赖,由插件自行接管完成读取和配置。
操作步骤
步骤一、下载配置文件
请参照快速入门下载配置文件,并将配置文件(JSON文件)放到应用根目录下的app文件夹中(/app/
)。Android端配置文件为:aliyun-emas-services.json
,其内容如下:
{
"config": {
"emas.appKey":"xxxxx",
"emas.appSecret":"xxxxxx",
"emas.packageName":"com.xxx.xxx.demo",
"hotfix.idSecret":"xxxxx",
"hotfix.rsaSecret":"xxxxx",
"httpdns.accountId":"xxxxx",
"httpdns.secretKey":"xxxxxxxxx"
"appmonitor.tlog.rsaSecret":"xxxxxxxxxx",
"appmonitor.rsaSecret":"xxxxxxxxxx"
},
"services": {
"hotfix_service":{
"status":1,
"version":"X.X.X" //X.X.X代表最新版本的SDK版本号
},
"ha-adapter_service":{
"status":1,
"version":"1.1.3.4-open"
},
"feedback_service":{
"status":1,
"version":"3.3.1"
},
"tlog_service":{
"status":1,
"version":"1.1.2.3-open"
},
"httpdns_service":{
"status":1,
"version":"1.3.2.3"
},
"apm_service":{
"status":1,
"version":"1.0.7.9-open"
},
"man_service":{
"status":1,
"version":"1.2.4"
},
"cps_service":{
"status":1,
"version":"3.1.12"
}
},
"use_maven":true,
"proguard_keeplist":"\n#httpdns\n-keep class com.taobao.** {*;}\n-keep class com.alibaba.** {*;}\n-keep class com.ta.**{*;}\n-keep class com.ut.**{*;}\n-dontwarn com.taobao.**\n-dontwarn com.alibaba.**\n-dontwarn com.ta.**\n-dontwarn com.ut.**\n\n#cps\n-keep class com.taobao.** {*;}\n-keep class com.alibaba.** {*;}\n-keep class com.ta.**{*;}\n-keep class com.ut.**{*;}\n-dontwarn com.taobao.**\n-dontwarn com.alibaba.**\n-dontwarn com.ta.**\n-dontwarn com.ut.**\n-keepclasseswithmembernames class ** {\nnative <methods>;\n}\n-keepattributes Signature\n-keep class sun.misc.Unsafe { *; }\n-keep class com.alipay.** {*;}\n-dontwarn com.alipay.**\n-keep class anet.**{*;}\n-keep class org.android.spdy.**{*;}\n-keep class org.android.agoo.**{*;}\n-dontwarn anet.**\n-dontwarn org.android.spdy.**\n-dontwarn org.android.agoo.**\n\n#hotfix\n#基线包使用,生成mapping.txt\n-printmapping mapping.txt\n#生成的mapping.txt在app/buidl/outputs/mapping/release路径下,移动到/app路径下\n#修复后的项目使用,保证混淆结果一致\n#-applymapping mapping.txt\n#hotfix\n-keep class com.taobao.sophix.**{*;}\n-keep class com.ta.utdid2.device.**{*;}\n#防止inline\n-dontoptimize\n\n#man\n-keep class com.taobao.** {*;}\n-keep class com.alibaba.** {*;}\n-keep class com.ta.**{*;}\n-keep class com.ut.**{*;}\n-dontwarn com.taobao.**\n-dontwarn com.alibaba.**\n-dontwarn com.ta.**\n-dontwarn com.ut.**\n\n#feedback\n-keep class com.taobao.** {*;}\n-keep class com.alibaba.** {*;}\n-keep class com.ta.**{*;}\n-keep class com.ut.**{*;}\n-dontwarn com.taobao.**\n-dontwarn com.alibaba.**\n-dontwarn com.ta.**\n-dontwarn com.ut.**\n"
}
步骤二、引用配置文件
添加Maven仓库和插件。
使用低于7.0版本的gradle插件。
在项目级目录
/build.gradle
中,添加阿里云Maven仓库地址和emas-services插件。buildscript { repositories { google() mavenCentral() maven { // 添加Maven仓库地址 url 'https://maven.aliyun.com/nexus/content/repositories/releases/' } } dependencies { classpath "com.android.tools.build:gradle:a.b.c" //a.b.c低于7.0版本 // 添加emas-services插件 classpath 'com.aliyun.ams:emas-services:1.0.4' } } allprojects { repositories { ... maven { url 'https://maven.aliyun.com/nexus/content/repositories/releases/' } } }
使用高于7.0版本的gradle插件。
在项目级目录
/build.gradle
中,添加emas-services插件。buildscript { repositories { google() mavenCentral() maven { // 添加Maven仓库地址 url 'https://maven.aliyun.com/nexus/content/repositories/releases/' } } dependencies { classpath "com.android.tools.build:gradle:a.b.c" //a.b.c高于7.0版本 // 添加emas-services插件 classpath 'com.aliyun.ams:emas-services:1.0.4' } } task clean(type: Delete) { delete rootProject.buildDir }
在项目级目录
/setting.gradle
中去添加阿里云Maven仓库地址。dependencyResolutionManagement { repositories { google() mavenCentral() maven { // 添加Maven仓库地址 url 'https://maven.aliyun.com/nexus/content/repositories/releases/' } } }
应用插件
在应用级
build.gradle
(<project>/<app-module>/build.gradle
)文件中添加代码段,应用插件。apply plugin: 'com.android.application' apply plugin: 'com.aliyun.ams.emas-services' // 引用emas-services插件
步骤三、添加依赖
修改应用根目录下的JSON配置文件,将不需要使用的产品service对应的status状态置为0。
status=0表示不使用对应产品,status=1表示使用对应产品 。
{ "config": { "emas.appKey":"xxxxx", "emas.appSecret":"xxxxxx", "emas.packageName":"com.xxx.xxx.demo", "hotfix.idSecret":"xxxxx", "hotfix.rsaSecret":"xxxxx", }, "services": { "hotfix_service":{ "status":1, "version":"X.X.X" //X.X.X代表最新版本的SDK版本号 }, "httpdns_service":{ "status":0, "version":"1.3.2.3" }, }, "use_maven":true, "proguard_keeplist":"\n#httpdns\n-keep class com.taobao.** {*;}\n-keep class com.alibaba.** {*;}\n-keep class com.ta.**{*;}\n-keep class com.ut.**{*;}\n-dontwarn com.taobao.**\n-dontwarn com.alibaba.**\n-dontwarn com.ta.**\n-dontwarn com.ut.**\n\n#cps\n-keep class com.taobao.** {*;}\n-keep class com.alibaba.** {*;}\n-keep class com.ta.**{*;}\n-keep class com.ut.**{*;}\n-dontwarn com.taobao.**\n-dontwarn com.alibaba.**\n-dontwarn com.ta.**\n-dontwarn com.ut.**\n-keepclasseswithmembernames class ** {\nnative <methods>;\n}\n-keepattributes Signature\n-keep class sun.misc.Unsafe { *; }\n-keep class com.alipay.** {*;}\n-dontwarn com.alipay.**\n-keep class anet.**{*;}\n-keep class org.android.spdy.**{*;}\n-keep class org.android.agoo.**{*;}\n-dontwarn anet.**\n-dontwarn org.android.spdy.**\n-dontwarn org.android.agoo.**\n\n#hotfix\n#基线包使用,生成mapping.txt\n-printmapping mapping.txt\n#生成的mapping.txt在app/buidl/outputs/mapping/release路径下,移动到/app路径下\n#修复后的项目使用,保证混淆结果一致\n#-applymapping mapping.txt\n#hotfix\n-keep class com.taobao.sophix.**{*;}\n-keep class com.ta.utdid2.device.**{*;}\n#防止inline\n-dontoptimize\n\n#man\n-keep class com.taobao.** {*;}\n-keep class com.alibaba.** {*;}\n-keep class com.ta.**{*;}\n-keep class com.ut.**{*;}\n-dontwarn com.taobao.**\n-dontwarn com.alibaba.**\n-dontwarn com.ta.**\n-dontwarn com.ut.**\n\n#feedback\n-keep class com.taobao.** {*;}\n-keep class com.alibaba.** {*;}\n-keep class com.ta.**{*;}\n-keep class com.ut.**{*;}\n-dontwarn com.taobao.**\n-dontwarn com.alibaba.**\n-dontwarn com.ta.**\n-dontwarn com.ut.**\n" }
说明“use_maven”字段表示是否采用Maven远程依赖的方式添加依赖,true表示使用远程依赖,false表示使用本地libs下aar及jar的方式进行依赖( use_maven=false时,您需要在控制台下载对应使用的产品sdk,并将对应jar&aar放置到应用工程libs目录下,且与JSON中service对应开关对应 )。
部分产品支持读取JSON文件中的AppKey等信息,以二级产品具体的接入文档为准。
EMAS支持基于Gradle的emas-services插件,同时添加多个二级产品的SDK依赖。
单击Android Studio工具栏中的Sync Project with Gradle Files,同步配置文件的依赖。
重要每次修改JSON文件后,需要清理Android Studio缓存,并再次执行此步骤,保证插件读取最新的JSON配置。
单击工具栏中的gradle build,运行成功后,会在"
app/build/generated/source/emas-services/${variant.dirName}/ams_values/ams_proguard_rules.pro
"生成对应的产品忽略规则,如果您使用了混淆,需要同步该规则文件到自身的项目中。重要采用EMAS统一接入时,请勿开启资源混淆(非代码混淆),若必须采用资源混淆,请按原来传参方式接入。
支持使用配置文件统一添加依赖的产品包括:
产品 | 配置文件中对应的字段 | 初始化参考 |
移动推送 | cps_service | |
移动热修复 | hotfix_service | |
性能分析/远程日志的基础库 | ha-adapter_service | 无需单独初始化 |
性能分析 | apm_service | |
远程日志 | tlog_service | |
移动用户反馈 | feedback_service | |
HTTPDNS | httpdns_service |
ha-adapter_service属于远程日志、性能分析的基础库,所以不需要初始化。
为避免在日志中泄露appkey/appsecret或App运行过程中产生的数据,建议线上版本关闭SDK调试日志。
由于所有用户使用统一的SDK接入,在接入过程中需要在代码中设置
appkey/appsecret/rsaSecret/IDSECRET/APPSECRET/RSASECRET/accountId/secretKey
参数,而此类参数与计量计费密切相关,为防止恶意反编译获取参数造成信息泄露,建议您开启代码混淆,并进行App加固后再发布上线。
常见问题
新建项目接入后若有AndroidX兼容问题导致无法正常编译。
解决办法:可尝试在
gradle.properties
中新增android.useAndroidX=true
和android.enableJetifier=true
配置解决。运行插件后提示:
File aliyun-emas-services.json is missing. The Emas Services Plugin cannot function without it.
解决方法:确保您将控制台下载的
aliyun-emas-services.json
文件已经正确放置到应用根目录下(/app/
)。接入全部产品后,如果遇到以下问题:
Error:Execution failed for task ‘:app:processDebugManifest’. Manifest merger failed with multiple errors, see logs.
解决方法:由于不同SDK设置的
allowBackup
属性不同,建议在app/src/main/AndroidManifest.xml
中添加如下代码。运行插件后提示:
WARNING: Configuration ‘compile’ is obsolete and has been replaced with ‘implementation’ and ‘api’.
解决方法:忽略此警告即可。为了兼容低版本Android studio,EMAS统一插件中使用的是compile,不影响使用。
<Application
....
android:allowBackup="false"
tools:replace="android:allowBackup"/>