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第三方性能监测框架的主要内容,如果未能解决你的问题,请参考以下文章