Android SDK接入(Maven集成)
本文介紹如何通過(guò)Maven集成方式添加依賴接入性能分析服務(wù)的Android SDK。
性能分析服務(wù)的Android SDK接入可采用Maven集成和本地集成兩種方式添加依賴。推薦使用Maven集成方式添加依賴,可大幅簡(jiǎn)化接入操作。
如需使用本地集成方式添加依賴,操作方法請(qǐng)參見Android SDK接入(本地集成)。
前提條件
已創(chuàng)建項(xiàng)目和應(yīng)用,具體操作請(qǐng)參見創(chuàng)建項(xiàng)目和應(yīng)用。
已設(shè)置上報(bào)網(wǎng)絡(luò)數(shù)據(jù)的URL過(guò)濾,具體操作請(qǐng)參見設(shè)置URL過(guò)濾。
已下載應(yīng)用的配置文件,具體操作請(qǐng)參見下載配置文件。
Android配置文件:
aliyun-emas-services.json
。
使用限制
僅支持Android 4.2及以上版本。
僅支持arm64-v8a/armeabi-v7a/x86/x86_64架構(gòu)。
僅支持gradle 3.0.0及以上版本。
僅支持以下網(wǎng)絡(luò)庫(kù)版本:
okhttp2:2.0.0-2.7.5
okhttp3: 3.0.0-3.14.7
okhttp4: 4.0.0-4.8.1
接入概述
準(zhǔn)備:獲取應(yīng)用信息AppKey/AppSecret/PackageName;獲取公鑰。
應(yīng)用插件:添加插件依賴;應(yīng)用插件。
添加依賴:采用Maven方式集成SDK。SDK功能變更歷史參見:Android SDK發(fā)布說(shuō)明。
接入服務(wù):添加自定義Application,以及SDK初始化代碼。
混淆配置:如App對(duì)代碼進(jìn)行亂序混淆,則修改混淆配置文件。
編譯:常見編譯問(wèn)題排查。
準(zhǔn)備
獲取應(yīng)用信息AppKey/AppSecret/PackageName
1:登錄移動(dòng)研發(fā)平臺(tái) EMAS控制臺(tái),打開工作空間概覽頁(yè)面。
2:在我的應(yīng)用區(qū)域,單擊Android應(yīng)用圖標(biāo),打開指定Android應(yīng)用的編輯配置頁(yè)面。
3:在編輯配置頁(yè)面,查詢指定應(yīng)用的AppKey/AppSecret/PackageName。
各參數(shù)說(shuō)明如下:
參數(shù) | 說(shuō)明 |
AppKey | 用于唯一標(biāo)識(shí)App。由系統(tǒng)生成,8位數(shù)字。 |
AppSecret | 用于認(rèn)證App。由系統(tǒng)生成,32位字符串。 |
PackageName | 用于標(biāo)識(shí)App的名稱。由用戶自定義。 |
獲取公鑰
4:在編輯配置頁(yè)面,單擊下載Android配置按鈕,下載指定應(yīng)用的配置文件:aliyun-emas-services.json
。
5:打開Android配置文件,查詢appmonitor.rsaSecret
字段內(nèi)容,即為性能分析公鑰。
為避免在日志中泄漏參數(shù)
appkey
/appsecret
/rsaSecret
或App運(yùn)行過(guò)程中產(chǎn)生的數(shù)據(jù),建議線上版本關(guān)閉SDK調(diào)試日志。由于所有用戶使用統(tǒng)一的SDK接入,在接入過(guò)程中需要在代碼中設(shè)置
appkey
/appsecret
/rsaSecret
參數(shù),而此類參數(shù)與計(jì)量計(jì)費(fèi)密切相關(guān),為防止惡意反編譯獲取參數(shù)造成信息泄漏,建議您開啟混淆,并進(jìn)行App加固后再發(fā)布上線。
應(yīng)用插件
1:在build.gradle
項(xiàng)目文件的buildscript{}
代碼段添加插件依賴。
此處僅添加插件依賴,應(yīng)用依賴須添加至build.gradle
項(xiàng)目文件的dependencies{}
代碼段。具體說(shuō)明請(qǐng)參見添加依賴。
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:${gradle-version}'//配置項(xiàng)
classpath 'com.aliyun.ams:alicloud-android-networkmonitor-plugin:1.3.0-open'
}
配置說(shuō)明如下:
配置項(xiàng) | 說(shuō)明 |
gradle-version | 用于指定實(shí)際開發(fā)環(huán)境的gradle版本。 【示例】 |
2:在build.gradle
項(xiàng)目文件中添加代碼段應(yīng)用插件。
apply plugin: 'com.aliyun.emas.networkmonitor'
添加依賴
在build.gradle
項(xiàng)目文件中:
1:在repositories{}
代碼段添加阿里云Maven倉(cāng)庫(kù)地址。
repositories {
maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" }
}
2:在android{}
代碼段設(shè)置應(yīng)用包名和.so庫(kù)。
android {
......
defaultConfig {
applicationId "com.xxx.xxx" //配置項(xiàng)
......
ndk {
//選擇要添加的對(duì)應(yīng)cpu類型的.so庫(kù),當(dāng)前支持四種
abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64' //配置項(xiàng)
}
......
}
......
}
配置說(shuō)明如下:
參數(shù) | 說(shuō)明 |
applicationId | 用于指定App的PackageName。 【數(shù)據(jù)類型】字符串 【是否必選】是 【是否可為空】否 【默認(rèn)值】無(wú) |
ndk | 用于指定App的架構(gòu),添加對(duì)應(yīng)CPU類型的.so庫(kù)。 【數(shù)據(jù)類型】枚舉型 【取值范圍】
【是否必選】是 【是否可為空】否 【默認(rèn)值】無(wú) 【大小寫敏感】否 |
3:在dependencies{}
代碼段添加SDK依賴。
dependencies {
......
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "com.squareup.okhttp3:okhttp:${okhttp3version}"http://配置項(xiàng)
//線上測(cè)試
implementation 'com.aliyun.ams:alicloud-android-ha-adapter:1.2.3.0-open'
implementation 'com.aliyun.ams:alicloud-android-apm:1.1.3.0-open'
......
}
配置說(shuō)明如下:
參數(shù) | 說(shuō)明 |
okhttp3version | 用于設(shè)置本地開發(fā)環(huán)境可支持的網(wǎng)絡(luò)庫(kù)版本。 【示例】 |
接入服務(wù)
1、預(yù)初始化SDK
預(yù)初始化SDK可以在Appcalition.onCreate函數(shù)中完成。
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
AliHaAdapter.getInstance().preStart(this);
}
}
2、開啟性能分析
在同意隱私協(xié)議之后,可以開啟崩潰分析。
private void startHa() {
AliHaConfig config = new AliHaConfig();
config.appKey = "xxxxxxxx"; //配置項(xiàng)
config.appVersion = "x.xx"; //配置項(xiàng)
config.appSecret = "xxxxxxxxxxxx"; //配置項(xiàng)
config.channel = "mqc_test"; //配置項(xiàng)
config.userNick = null; //配置項(xiàng)
config.application = this; //配置項(xiàng)
config.context = getApplicationContext(); //配置項(xiàng)
config.isAliyunos = false; //配置項(xiàng)
config.rsaPublicKey = "xxxxxxx"; //配置項(xiàng)
AliHaAdapter.getInstance().addPlugin(Plugin.apm);
AliHaAdapter.getInstance().start(config);
}
配置說(shuō)明如下:
參數(shù) | 說(shuō)明 |
appKey | 用于指定App的AppKey。 【數(shù)據(jù)類型】字符串 【是否必選】是 【是否可為空】否 【默認(rèn)值】無(wú) |
appVersion | 用于設(shè)置App的版本號(hào)。 【數(shù)據(jù)類型】字符串 【格式要求】自定義 【取值范圍】任意長(zhǎng)度 說(shuō)明 該參數(shù)值將在控制臺(tái)顯示為下拉列表選項(xiàng),建議短小凝練。 【是否必選】是 【是否可為空】否 【默認(rèn)值】無(wú) 【大小寫敏感】是。例如,vx.x和Vx.x不是一個(gè)版本。 【字符類型】英文大小寫、數(shù)字 說(shuō)明 該參數(shù)不支持中文字符、特殊字符。 |
appSecret | 用于指定App的AppSecret。 【數(shù)據(jù)類型】字符串 【是否必選】是 【是否可為空】否 【默認(rèn)值】無(wú) |
channel | 用于設(shè)置渠道標(biāo)識(shí),上報(bào)至服務(wù)端,進(jìn)行渠道區(qū)分。 【數(shù)據(jù)類型】字符串 【取值范圍】任意長(zhǎng)度 【是否必選】否 【是否可為空】是 【默認(rèn)值】無(wú) 【字符類型】英文大小寫、數(shù)字 說(shuō)明 該參數(shù)不支持中文字符、特殊字符。 |
userNick | 用于設(shè)置用戶昵稱,上報(bào)至服務(wù)端,進(jìn)行用戶區(qū)分。后續(xù)可能依據(jù)該參數(shù),進(jìn)行數(shù)據(jù)檢索。 【數(shù)據(jù)類型】字符串 【取值范圍】任意長(zhǎng)度 【是否必選】否 【是否可為空】是 【默認(rèn)值】無(wú) 【字符類型】英文大小寫、數(shù)字。 說(shuō)明 該參數(shù)不支持中文字符、特殊字符。 【命名規(guī)范】自定義 |
application | 用于指定本應(yīng)用。 重要 該參數(shù)不能指向其他應(yīng)用。 【數(shù)據(jù)類型】對(duì)象 【是否必選】是 【是否可為空】否 【默認(rèn)值】無(wú) |
context | 用于指定App的上下文對(duì)象,設(shè)置 【數(shù)據(jù)類型】對(duì)象 【是否必選】是 【是否可為空】否 【默認(rèn)值】無(wú) |
isAliyunos | 用于判斷App所在平臺(tái)是否為YunOS。 【數(shù)據(jù)類型】布爾型 【取值范圍】false/true 【是否必選】否 【是否可為空】是 【默認(rèn)值】false |
rsaPublicKey | 用于指定性能分析公鑰。 【數(shù)據(jù)類型】字符串 【是否必選】是 【是否可為空】否 【默認(rèn)值】無(wú) |
3、在AndroidManifest.xml
中添加代碼段注冊(cè)Application。
<application
android:name=".MyApplication"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
</application>
混淆配置
如App對(duì)代碼進(jìn)行亂序混淆,則在混淆配置文件中添加代碼段:
-keep class com.taobao.monitor.impl.**{*;}
-keep class com.taobao.monitor.adapter.**{*;}
-keep class com.taobao.application.common.**{*;}
-keep class com.facebook.drawee.generic.RootDrawable{*;}
-keep class com.facebook.drawee.drawable.FadeDrawable{*;}
-keep class androidx.fragment.app.Fragment{*;}
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
編譯
如同時(shí)使用其他阿里云產(chǎn)品,可能會(huì)因?yàn)橐蕾囍写嬖赨TDID沖突,造成編譯失敗。解決辦法參見:SDK UTDID沖突解決方案。
樣例代碼
性能分析服務(wù)Android SDK接入工程樣例請(qǐng)參見Demo工程。
功能驗(yàn)證
Android SDK接入操作完成后,可操作App,查看性能分析服務(wù)控制臺(tái)顯示數(shù)據(jù),進(jìn)行功能驗(yàn)證。
1:手機(jī)端:?jiǎn)?dòng)App。(2分鐘后)控制臺(tái):查看概覽頁(yè)簽的啟動(dòng)速度是否顯示數(shù)據(jù)。
2:手機(jī)端:在App中跳轉(zhuǎn)幾個(gè)頁(yè)面。(2分鐘后)控制臺(tái):查看概覽頁(yè)簽的加載時(shí)間是否顯示數(shù)據(jù)。
數(shù)據(jù)從App采集到控制臺(tái)顯示,存在大約2分鐘延遲。
如數(shù)據(jù)顯示正常,則Android SDK接入成功;否則,可能的原因是:SDK接入失敗、SDK未獲取數(shù)據(jù)、數(shù)據(jù)發(fā)送失敗、后端問(wèn)題,請(qǐng)聯(lián)系我們解決。