blog
blog copied to clipboard
React native 安卓 App 接入友盟 APM(应用性能监控平台)
相关链接:
写在前面
这几天被友盟给搞的头都晕了,首先它的文档真的不敢恭维,而且各种新旧文档交织在一起,很多细节也没有描述的很到位。所以这次踩过的坑,要记录下来。
我们的项目是 React Native
写的,但是看文档是不知道该怎么接入的,其实只接个性能监控(APM)的话,直接走原生的 android
方式接入即可。
接入需要做的事
看上面文档一步一步来,会遇到各种问题,这里就把要改的代码列出来。
步骤1:在工程的 build.gradle
配置脚本中 buildscript
和 allprojects
段中添加【友盟+】SDK新maven仓库地址。
文件 android/build.gradle
:
buildscript {
repositories {
google()
jcenter()
// 添加这行
maven { url 'https://repo1.maven.org/maven2/' }
}
dependencies {
...
}
}
allprojects {
repositories {
google()
jcenter()
// 添加这行
maven { url 'https://repo1.maven.org/maven2/' }
}
}
步骤2:App 对应build.gradle配置脚本dependencies段中添加SDK库依赖
文件 android/app/build.gradle
(注意,跟上面的 build.gradle 不是同一个):
dependencies {
...
// 友盟基础组件库(所有友盟业务SDK都依赖基础组件库)
// https://databank.umeng.com/sdc/datasources/create?type=app&productSource=u_apm&appkey=xxx
implementation 'com.umeng.umsdk:common:9.5.6' // 统计SDK(必选)
implementation 'com.umeng.umsdk:asms:1.6.3' // asms包依赖(必选) 重要组件,如不集成会在初始化时输出e级别的LOG提示和Toast提示
implementation 'com.umeng.umsdk:apm:1.9.1' // U-APM包依赖(必选) 性能监控
}
具体各个版本号,需要自己去 SDK下载中心 ,选择 “移动统计SDK” 和 “应用性能监控SDK” 后点击左下角的【Maven集成】,会弹出来具体的代码的,里面就有差不多最新版的代码。
步骤3:权限授予以及 intent 添加
文件 android/app/src/main/AndroidManifest.xml
:
<manifest ……>
<uses-sdkandroid:minSdkVersion="8"></uses-sdk>
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>
<uses-permissionandroid:name="android.permission.INTERNET"/>
<application ……>
intent 添加也是在这个文件,主要是为了 集成测试,但据我测试结果来看,这个没什么用,接入后直接打包个正式版 apk 安装到真机运行,后面才会有数据的。
<application
...
<activity
...
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="um.你的友盟appID" />
</intent-filter>
</activity>
</application>
步骤4:混淆设置
如果您的应用使用了代码混淆,请添加如下配置,以避免【友盟+】SDK被错误混淆导致SDK不可用。
文件 android/app/proguard-rules.pro
:
# 友盟
# https://developer.umeng.com/docs/193624/detail/194590
-keep class com.umeng.** { *; }
-keep class com.uc.** { *; }
-keep class com.efs.** { *; }
-keep interface com.efs.** { *; }
-keepclassmembers class *{
public<init>(org.json.JSONObject);
}
-keepclassmembers enum *{
publicstatic**[] values();
publicstatic** valueOf(java.lang.String);
}
# 下面一行的 com.xxx.yyy 改成你自己的包名才行
-keep publicclass com.xxx.yyy.R$*{
publicstaticfinalint*;
}
-keep class com.uc.crashsdk.** { *; }
-keep interface com.uc.crashsdk.** { *; }
步骤5:代码接入
文件 android/app/src/main/java/com/项目名称/MainApplication.java
:
首先在顶部引入要包(这个在文档是没有的):
// 友盟
import com.umeng.commonsdk.UMConfigure;
import com.umeng.analytics.MobclickAgent;
然后在 onCreate
添加初始化代码
@Override
public void onCreate() {
super.onCreate();
...
/**
*设置组件化的Log开关
*参数: boolean 默认为false,如需查看LOG设置为true
*/
UMConfigure.setLogEnabled(true);
// 友盟 https://databank.umeng.com/sdc/datasources/create?type=app&productSource=u_apm&appkey=xxx
UMConfigure.init(this, "xxx这是你的友盟APPID", "Umeng", UMConfigure.DEVICE_TYPE_PHONE, "");
MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO);
}
做到这里,你已经完成整个的接入了,可以进行打包和测试了。
崩溃测试代码
要测试崩溃,需要写出一段让 App 崩溃的代码,还有绕过编译器,也是有考究的,但是友盟也是有提供例子,比如:
react-native
崩溃代码:
//TEST: 友盟崩溃测试(会导致页面崩溃)
var nullStr = "1";
if (nullStr == "1") {
nullStr = null;
}
nullStr.concat("");
java
崩溃代码:
// 崩溃测试代码(会导致崩溃)
String nullStr = "1";
if (nullStr.equals("1")) {
nullStr = null;
}
nullStr.equals("");
更多可以看 友盟文档。