為方便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"/>