腾讯云移动应用安全Android-SDK接口配置说明
使用须知:
Android SDK优先支持Android 2.*以上8.*以下的Android系统,此次版本为Gradle(2.*)构建方式。
即项目根目录下的build.gradle中使用的classpath 'com.android.tools.build:gradle:2.*.*'
IDE:Android Studio
PartA:性能数据监测
一、预置SDK环境
解压bonree_sdk_android_gradle.zip得到bonree_sdk_android_gradle文件夹,暂存本地(如E:\);
1.1拷贝license.dat或者BonreeSDKLicense.dat文件到App项目的app\src\main\assets目录下(如果项目中没有assets目录,请创建assets目录);
1.2拷贝jniLib覆盖App项目主模块的jniLibs目录(如果项目中没有jniLibs目录,请创建jniLibs目录);
1.3 拷贝repo文件夹到App项目根目录;
1.4 拷贝com.bonree.agent.jar到App项目主模块的libs目录;
注意:Mac下,bonree_sdk_android_gradle文件夹的路径最好放在/Users/xxxx/目录下,放在系统目录下,由于权限可能导致一些难以预计的问题
二、配置Gradle
1.打开工程根目录下的build.gradle文件
2.在build.gradle文件中加入代码
在repositories模块中加入脚本
maven {
url uri('./repo')
}
在dependencies模块中加入脚本(2.1.6.6为bonree插件版本号,请每次使用最新版本号,本次插件最新2.2.1.8)
classpath 'com.bonree.agent.android:bonree:2.2.1.8'
如下图1-1:
其中./repo请替换为您本地repo所在路径
三、引入SDK
1.打开主模块目录下的build.gradle文件
2.在dependencies模块中加入代码
compile fileTree(dir: 'libs', include: ['*.jar'])
注意:E:\\bonree_sdk_android_gradle请替换为您本地bonree_sdk_android_gradle所在路径
3.在文件头部引入Bonree插件
apply plugin: 'bonree'
四、Rebuid & Clean项目
Rebuild & Clean项目,确保SDK配置生效。
五、配置授权信息
检查应用程序AndroidManifest.xml配置文件,确保已引入如下授权:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
若您的应用使用proguard混淆,请配置如下:
# ProGuard configurations for Bonree-Agent
-keep public class com.bonree.**{*;}
-keep public class bonree.**{*;}
-dontwarn com.bonree.**
-dontwarn bonree.**
# End Bonree-Agent
六、启动Agent
在待监测App的主Activity(MainActivity)源文件中导入博睿App的Android探针类:
import com.bonree.agent.android.Bonree;
初始化Agent:
情况1:请在入口Activity的onCreate()方法的第一行增加如下代码: Bonree.withApplicationToken("b26b0566-cdda-4bb6-8e09-45fa33ffeac1").start(this);
情况2:若不需要采集崩溃信息,请在入口Activity的onCreate()方法的第一行增加如下代码:
Bonree.withApplicationToken("b26b0566-cdda-4bb6-8e09-45fa33ffeac1").withCrashReportingEnabled(false).start(this);
情况3:设置启动概率:withRateOfLaunch(float rate),参数:0-1.0,默认1.0;如设置启动概率为50%,则传入0.5F,示例:
//设置启动概率50%,不采集地理位置,采集崩溃信息
Bonree.withApplicationToken("b26b0566-cdda-4bb6-8e09-45fa33ffeac1").withRateOfLaunch(0.5F).start(this);
情况4:设置JS行为数据监测:withJsBridgeEnable(boolean enabled),默认false;如设置开启js行为数据监测,参数设为true,示例:
Bonree.withApplicationToken("b26b0566-cdda-4bb6-8e09-45fa33ffeac1").withJsBridgeEnable(true).start(this);
注意:b26b0566-cdda-4bb6-8e09-45fa33ffeac1为临时字符串,请用应用名称生成的授权编号替换(本次不用替换)
七、启动应用程序
Clean Project,并重新在模拟器或设备中启动应用程序,开始应用性能管理
八、嵌码验证
启动已嵌码的apk,查看logcat日志,搜索BRAgent关键字(或者过滤BRSDK-Agent标签),出现如下log则表示嵌码成功
BRAgent enable (注:BRAgent 启动成功)
BRAgent running(注:BRAgent 集成成功)
BRAgent connect server success (注:BRAgent 数据设置成功)
PartB:JAVA接口配置
1.会员id设置
字段说明:
id:用户app会员用户的id,主要用于区分不同会员用户的行为。
例如:在需要设置会员用户id时,例如id为1,添加如下代码即可:
Statistics.onMemberId("1");
2.自定义视图的统计
字段说明:
pageId:自定义视图的ID(只包含英文、数字、下划线和.)。
pageName:自定义视图的名称(只包含英文、数字、下划线和.)。
在待监测视图类(Activity、Fragment)的
onResume方法中调用Statistics.onPageStart(String pageId, String pageName);
onPause方法中调用Statistics.onPageEnd(String pageId, String pageName);
注:onPageStart和onPageEnd须成对调用。
例如:某apk将监测“关于”界面,其对应视图类About.java
3.用户自定义信息的统计
字段说明:
Kv:自定义信息的Map<String,Object>集合
在需要添加自定义信息的模块调用
Statistics.setUserInfo(Map<String,Object> kv);
例如:某apk在进入某一个页面时设置自定义信息
PartC:JS接口配置
1.会员id设置
字段说明:
id:用户app会员用户的id,主要用于区分不同会员用户的行为。
例如:在需要设置会员用户id时,例如id为1,添加如下代码即可:
<script>
function myclick() {
document.getElementById("demo").innerHTML=Date();
bonreeJsBridge.onMemberId('1');
}
</script>
2.自定义视图的统计
字段说明:
pageId:自定义视图的ID(只包含英文、数字、下划线和.)。
pageName:自定义视图的名称(只包含英文、数字、下划线和.)。
在待监测html页面中的调用
bonreeJsBridge.onPageStart(String pageId, String pageName);
bonreeJsBridge.onPageEnd(String pageId, String pageName); 方法
注:onPageStart和onPageEnd须成对调用。
例如:某apk将监测“关于”html界面,其对应html名称为About.html
代码片段示例如下:
<script>
function myclick() {
document.getElementById("demo").innerHTML=Date();
bonreeJsBridge.onPageStart("1","About");
bonreeJsBridge.onPageEnd("1","About");
}
</script>
3.js代码中用户自定义信息的统计
字段说明:
Kv:自定义信息的Map<String,Object>集合
在需要添加自定义信息的模块调用
bonreeJsBridge.setUserInfo(String kv);
例如:某html页面在进入某一个页面时设置自定义信息
代码片段示例如下:
<script>
function myclick() {
document.getElementById("demo").innerHTML=Date();
var json = '{ "js1": "jsvalue1", "js2": "jsvalue1", "js3":"jsvalue3" }';
bonreeJsBridge.setUserInfo(json);
}
</script>
4.用户自定义JS崩溃轨迹的统计
字段说明:
arrTrace:自定义信息的String[] ,字符串数组,长度为2,第⼀个元素为视图名称(或者标题),第二个元素为事件名(或者详情)
在需要添加自定义信息的js代码模块中调用
bonreeJsBridge.addCrashTrace(String[] arrTrace)
例如:html页面点击按钮时设置自定义信息
代码片段示例如下:
<script>
function myclick() {
document.getElementById("demo").innerHTML=Date();
bonreeJsBridge.addCrashTrace(['homePage','just run a test']);
}
</script>
5.AngularJS崩溃统计(适用于AngularJs框架)
字段说明:
arrAngularError:崩溃信息的String[] ,字符串数组(按调⽤用示例传入参数即可)
js代码模块中调用
bonreeJsBridge.angularError(String[] arrAngularError);
例如:配置AngularJs崩溃收集功能
代码片段示例如下:
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.count = 0;
$scope.myFun=function(){
console.log(aaa);
$scope.count+=1;
}
});
app.config(function($provide) {
$provide.decorator("$exceptionHandler", function($delegate) {
return function(exception, cause) {
bonreeJsBridge.angularError([exception.name,exception.message,window.location.href,na vigator.userAgent,exception.stack]);
$delegate(exception, cause);
};
});
});
</script>
PartD:Native数据监测
1.用户自定义Native崩溃轨迹的统计
字段说明:
traceName:String 字符串类型,视图名称(或者标题)
traceValue: String字符串类型,事件名(或者详情)
需要添加自定义信息的Native代码模块中调用
代码片段示例如下:
jclass clazz = env->FindClass("com/bonree/net/format/NativeCrashJniUtil");
if (clazz != NULL) {
jmethodID methods = env->GetMethodID(clazz, "addCrashTrace", "(Ljava/lang/String;Ljava/lang/String;)V");
jobject jobj = env -> AllocObject(clazz);
env->CallVoidMethod(jobj,methods,env->NewStringUTF("traceName"),env->NewStringUTF("traceValue"));
}