blog icon indicating copy to clipboard operation
blog copied to clipboard

React native 安卓 App 接入友盟 APM(应用性能监控平台)

Open diamont1001 opened this issue 1 year ago • 0 comments

相关链接:

写在前面

这几天被友盟给搞的头都晕了,首先它的文档真的不敢恭维,而且各种新旧文档交织在一起,很多细节也没有描述的很到位。所以这次踩过的坑,要记录下来。

我们的项目是 React Native 写的,但是看文档是不知道该怎么接入的,其实只接个性能监控(APM)的话,直接走原生的 android 方式接入即可。

接入需要做的事

看上面文档一步一步来,会遇到各种问题,这里就把要改的代码列出来。

步骤1:在工程的 build.gradle 配置脚本中 buildscriptallprojects 段中添加【友盟+】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("");

更多可以看 友盟文档

diamont1001 avatar Apr 11 '23 09:04 diamont1001