Android SDK 使用指南
SDK向导

Android SDK

本主题介绍如何使用Testin与Android 应用程序(包括Android SDK和Android NDK的应用程序)。

安装SDK

Testin APM  SDK支持Android2.2以上系统。 安装前先 下载SDK 下载NDK

Demo请参考https://github.com/testinlab/TestinAndriodDemo


手动安装


SDK

将下载包中的jar文件放到本地工程libs子目录下;

在Eclipse中右键工程根目录,选择Properties -> Java Build Path -> Libraries,然后点击Add External JARs...选择指向jar的路径,点击OK,即导入成功。(ADT17及以上不需要手动导入)。

NDK

如果需要崩溃分析NDK捕获C/C++的错误,除了 将下载包中的jar文件放到本地工程libs子目录下, 还需要添加.so文件(libNativeCrash.so),即添加armeabi或者armeabi-v7a或者x86架构。

new_jar.jpg

如果使用Eclipse导入NDK jar报错:contains native libraries that will not run on the device。

     解决方法: Windows环境   window->preference->Android->build->“Force error when external jars contain native libraries”,去掉勾选即可;

     Mac环境  Eclipse->preference->Android->build->“Force error when external jars contain native libraries”,去掉勾选即可。

配置Manifest

在Manifest中添加以下权限

INTERNET:允许应用使用网络上报数据

ACCESS_NETWORK_STATE:允许获取网络状态

ACCESS_WIFI_STATE:获取网卡信息

READ_PHONE_STATE:读取设备ID作为设备标识

READ_LOGS:获取系统日志

GET_TASKS:获取任务堆栈

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<? xml  version = "1.0"  encoding = "UTF-8" ?>
< manifest  android:versionCode = "3"
     android:versionName = "1.0"
     package = "com.testin.demo"
     xmlns:android = "http://schemas.android.com/apk/res/android" >
< uses-permission  android:name = "android.permission.INTERNET" />
< uses-permission  android:name = "android.permission.ACCESS_NETWORK_STATE" />
< uses-permission  android:name = "android.permission.ACCESS_WIFI_STATE" />
< uses-permission  android:name = "android.permission.READ_PHONE_STATE" />
< uses-permission  android:name = "android.permission.READ_LOGS" />
< uses-permission  android:name = "android.permission.GET_TASKS" />
  
< application  android:icon = "@drawable/icon"
         android:label = "@string/app_name"  android:name = ".DemoApp" >
         < activity  android:label = "@string/app_name"  android:name = ".MainActivity" >
             < intent-filter >
                 < action  android:name = "android.intent.action.MAIN" />
                 < category  android:name = "android.intent.category.LAUNCHER" />
             </ intent-filter >
         </ activity >
        <!-- 设置AppKey -->
         < meta-data  android:name = "TESTIN_APPKEY"  android:value = "Your_AppKey" />
         <!-- 设置渠道信息 -->
         < meta-data  android:name = "TESTIN_CHANNEL"  android:value = "Channel_ID" />
     </ application >
</ manifest >

如果想获得更丰富的位置相关服务,请在manifest文件中添加权限

1
<uses-permission android:name= "android.permission.ACCESS_FINE_LOCATION"  />

如您想了解更多关于权限信息,请查看官方文档 Android Manifest documentation

初始化SDK

在Application的Activity中,添加
Import com.testin.agent.TestinAgent;
在Application的Activity中的onCreate()方法中,添加
TestinAgent.init(this,"279c8c7a996a03f452e6804a1f23a5e5","your channel ID");
chanel id:应用所发布的渠道名称,自定义字符穿,如应用宝可以写yingyongbao, 也可以为空
如果需要使用manifest.xml中的配置appkey和渠道号或需要自定义配置的 初始方法,请查看:
http://crash.testin.cn/support/2#初始化SDK


更多用户配置的初始化方法


1
2
3
4
5
6
7
8
9
10
11
12
TestinAgentConfig config =  new  TestinAgentConfig.Builder(context)
         .withAppKey(key)             // Appkey of your appliation, required
         .withAppChannel(cnl)         // Channel of your application
         .withUserInfo(userInfo)      // User infomation like login account of user
         .withDebugModel( true )        // Output the crash log in local if you open debug mode
         .withErrorActivity( true )     // Output the activity info in crash or error log
         .withCollectNDKCrash( true )   // Collect NDK crash or not if you use our NDK
         .withOpenCrash( true )         // Monitor crash if true
         .withReportOnlyWifi( true )    // Report data only on wifi mode
         .withReportOnBack( true )      // allow to report data when application in background
         .build();
TestinAgent.init(config);



自定义异常

自定义异常是捕获一个try / catch中出现的异常,这些异常会在网站的“异常报告”区域显示查看。您 可以调用以下方法实现。

1
2
3
TestinAgent.uploadException (Context context, String message, Throwable throwable)
//如
TestinAgent.uploadException(getApplicationContext(), String message, Throwable throwable);


面包屑

面包屑是开发人员定义的文本字符串(最多199 个字符),允许开发人员记录应用程序运行时的信息。 面包屑可能包括变量值、代码进展、用户操作、或内存不足警告等等。有关介绍,请参见 面包屑 请按如下方法添加面包屑:

1
TestinAgent.leaveBreadcrumb( "User tapped a button" );

设置用户名

您可以通过以下方法,将App的用户信息(如:登录账号或用户名)上传到网站,网站将把崩溃对应到具体用户信息;如不设置,平台将默认显示为“匿名”用户。

1
TestinAgent.setUserInfo(String user)

为保证方法中上传的user信息不为空,请尽量在登录后的业务代码后加载这行代码。如涉及敏感信息请自行做好加密处理。

设置回调函数

SDK提供回调函数供开发者使用,通过重设自己的 UncaughtExceptionHandler来实现,例:

构建自己的 UncaughtExceptionHandler类

1
2
3
4
5
public  class  MyUncaughtExceptionHandler  implements  TestinUncaughtExceptionHandler {     
         public  void  testinUncaughtException() {         
             // Do anything you want    
          }
  }

在init方法之后,添加

1
TestinAgent.setTestinUncaughtExceptionHandler( new  MyUncaughtExceptionHandler());


Android Proguard符号化配置

符号化是通过映射符号翻译堆栈信息,方便开发者理解错误堆栈。开发者提供您的应用程序的符号文件,Testin的服务器可以自动进行符号化。有关介绍,请参见 符号化

设置混淆

1、对于Android应用程序,开发人员必须使用混淆的ProGuard的工具,它们的功能名称,以减少应用程序的大小,并防止他人逆向工程的应用程序源的选项。为了与人类可读的名称替换混淆的名称,开发者使用Proguard的映射文件。

2、在混淆打包时,请在混淆文件proguard.cfg或proguard-project.txt中添加:

1
2
3
-libraryjars /libs/tncrash.jar
-dontwarn com.testin.agent.**
-keep  class  com.testin.agent.** {*;}


3、为了得到行号信息,请确保您保留的文件名和行号在您的ProGuard.CFG设置文件。

1
-keepattributes SourceFile, LineNumberTable

(如果使用Android Studio,请在在gradle配置文件中proguardFiles getDefaultProguardFile这一项指明的所有文件中添加以上两项)

上传mapping.txt文件

1、编译成功后,找到项目中proguard目录下的mapping.txt文件(Android Studio下目录为\app\build\outputs\mapping\release);

2、在网站的应用设置页面的符号化文件上传页,选择对于的版本上传文件。

Android NDK符号化配置

如果您的应用包含Native代码,通常编译后会生成.so文件。对于上报的NDK错误,通常是一些地址码。开发者需要上传包含debug信息的.so文件到网站,从而把堆栈信息转化为可读的信息。有关介绍,请参见符号化

上传.so符号化文件

1、编译成功后,找到项目中obj目录,并将so文件压缩成zip格式;

2、在网站的应用设置页面的符号化文件上传页,上传zip文件。

设置本地调试

为方便开发者本地调试,Android SDK可以设置在log中输出崩溃堆栈。

1
  TestinAgent.setLocalDebug( true ); //设置为true,则在log中打印崩溃堆栈