Android端接入NewRelic第三方性能监测框架

Posted 安卓小小鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android端接入NewRelic第三方性能监测框架相关的知识,希望对你有一定的参考价值。

newRelic简介

newRelic是一款国外产品,类似于国内的监控平台: OneAPM 和 听云 ,在android平台上提供crash监控,网络请求监控,app启动次数等,如果你对国内的监控平台了解的话,功能基本类似,所以接入方式也几乎一样。但是商业版很贵~~,所以我们后续又换了国内的听云,这里仅做一下记录。

AndroidStudio Gradle方式接入

账号注册申请就不多言了。

在账号申请完毕后,我们点击网站的Mobile选项卡,点击右下角的 Add a new app,可以创建我们自己app,如图
创建完我们的app后,我们会获得一个appToken,有了这个appToken后,就可以进行newRelic的接入了

在项目及的build.gradle中添加以下代码

buildscript 
  repositories 
    mavenCentral()
  

  dependencies 
    classpath "com.newrelic.agent.android:agent-gradle-plugin:5.+"
  


在app下的build.gradle中

repositories 
  mavenCentral()


apply plugin: 'android'
apply plugin: 'newrelic'

dependencies 
  implementation "com.newrelic.agent.android:android-agent:5.+"

在manifest中添加权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

在你的默认启动Activity中

NewRelic.withApplicationToken("你的appToken").start(this.getApplication());

注:官方推荐在defaultActivity中嵌入监测代码,官方说并不支持在其他class中嵌入监测代码,说可能会引起其他一些问题或者不稳定,

但是国内的很多都是在Application中,所以我就索性写在了application中,并没有遇到问题,所以目前先这样
到这里差不多就结束了,但是我们可能还需要防混淆,所以
在app目录下新建newrelic.properties文件,添加如下代码

com.newrelic.application_token=你的appToken

在proguard.cfg, proguard-android.txt, proguard-rules.pro 等文件下添加

-keep class com.newrelic.**  *; 
-dontwarn com.newrelic.**
-keepattributes Exceptions, Signature, InnerClasses, LineNumberTable

到这里,就基本结束了,gradle编译一下等几分钟就可以在后台看到监测数据了

配置多properties方案

我们的app版本可能有多个版本,比如debug版本,release版本或者preRelease版本,如果用同一个appToken的话会不容易区分,所以我们需要在生成properties的时候动态的更改其中token的值,并在绑定appToken时候根据版本来绑定,所以这时候就需要一些gradle知识,在app的build.gradle 目录下

File newRelicProperties = new File("$project.projectDir.absolutePath/newrelic.properties")
    newRelicProperties.createNewFile()

    //gradle build package name
    android.applicationVariants.all  variant ->
        def channelName
        variant.productFlavors.each  product ->
            channelName = product.name
        
        variant.productFlavors.each  flavor ->
            def variantSuffix = variant.name.capitalize()
            def generateResourcesTask = project.tasks.getByName("compile$variantSuffixSources")
            def generatePropertiesTask = task("newRelicGenerateProperties$variantSuffix") << 
                Properties properties = new Properties()
                properties.load(newRelicProperties.newDataInputStream())
                properties.setProperty("com.newrelic.application_token", flavor.manifestPlaceholders.newRelicAppToken)
                properties.store(newRelicProperties.newWriter(), null)
            
            generateResourcesTask.dependsOn generatePropertiesTask
        
    

在此之前我们要在 app 的build.gradle中的productFlavors下配置一下不同版本的的appToken,如下

 productFlavors 
        Debug 
            applicationId "xxx"
            manifestPlaceholders = [package_name : applicationId,
                                    JPUSH_PKGNAME: applicationId,
                                    JPUSH_APPKEY : "",
                                    JPUSH_CHANNEL: "staging",
                                    app_icon     : "@mipmap/icon_logo",
                                    extScheme    : "",
                                    app_icon     : "@mipmap/icon_logo",
                                    newRelicAppToken:"你的appToken"]
        
release 
            applicationId "xxx"
            manifestPlaceholders = [package_name : applicationId,
                                    JPUSH_PKGNAME: applicationId,
                                    JPUSH_APPKEY : "",
                                    JPUSH_CHANNEL: "staging",
                                    app_icon     : "@mipmap/icon_logo",
                                    extScheme    : "",
                                    app_icon     : "@mipmap/icon_logo",
                                    newRelicAppToken:"你的appToken"]
        
        

主要是newRelicAppToken:"你的appToken" 这段代码

然后在manifest文件中配置一下meta-data文件

 <meta-data
            android:name="newRelic_AppToken"
            android:value="$newRelicAppToken" />

然后在application的onCreate方法中根据app版本,取不同的token,

private void initNewRelic()
        //new Relic
        String appToken = "";//default release
        try 
            ApplicationInfo applicationInfo  = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
            if (applicationInfo != null) 
                appToken = applicationInfo.metaData.getString("newRelic_AppToken");
            
         catch (PackageManager.NameNotFoundException e) 
            e.printStackTrace();
        
        NewRelic.withApplicationToken(appToken).start(this);
    

至此,就接入完毕了。

以上是关于Android端接入NewRelic第三方性能监测框架的主要内容,如果未能解决你的问题,请参考以下文章

第三方性能监测工具列表

前方高能预警,主流移动端性能测试工具大PK?!想把它们全部打包带走!

onepill Android端

Android远程桌面助手之性能监测篇

Jmeter监测服务器端性能

Android应用性能测试之CPU和内存实时监测