Android NDK 使用指南
创建APP,获得AppKey
在你注册登录Crasheye之后,便可创建自己的APP,每个APP都有全局唯一的AppKey,用来唯一标识你的APP。AppKey在初始化SDK时需要使用。(使用示例 下载 )
如何创建APP:1. 登录Crasheye进入后台管理页面 2. 点击网页右上角个人头像按钮,在弹出的菜单中点击选择[我的应用],进入应用列表页面 3. 在应用列表页面,点击[创建新的应用],会弹出创建新应用的提示框 4. 输入应用名称,选择所属的平台类型,点击[确定]按钮,就完成了一个新应用的创建
AppKey用来唯一标识你的移动应用,为防止别人滥用,请勿泄露。
![](http://testplus.ks3-cn-beijing.ksyun.com/cn/images/docs/crasheye/create_android_app.jpg)
下载NDK
在SDK下载页面点击下载 NDK动态库。
导入依赖文件
先将已下载的Android SDK依赖文件[Crasheye.jar]添加到你工程的[libs]中,步骤请参考:添加"Crasheye.jar"。
在你工程的[jni]目录下创建[prebuild]文件夹,将已下载的[libCrasheyeNDK.so]文件拷贝到该文件夹下。
配置AndroidManifest.xml文件
在AndroidManifest.xml文件中添加SDK所需的权限配置(必需)、渠道信息(可选)。代码示例如下:
<!--权限配置,必需>
<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" />
<application ……>
<activity ……/>
<!--渠道信息,可选>
<meta-data android:name="CRASHEYE_CHANNEL" android:value="Your_Channel"/>
</application>
初始化
1、在[Android.mk]文件中加入以下代码:
########################## 加载So文件 ##########################
include $(CLEAR_VARS)Android.mk
LOCAL_SRC_FILES := prebuild/libCrasheyeNDK.so
include $(PREBUILT_SHARED_LIBRARY)
########################## 加载So文件 ##########################
2、在入口函数Application.onCreate()
或MainActivity.onCreate()
中添加如下代码:
(需要引入头文件 import com.xsj.crasheye.Crasheye
)
@override
public void onCreate(Bundle savedInstanceState) {
Crasheye.initWithNativeHandle(this, "Your_AppKey");
super.onCreate(savedInstanceState);
}
至此,Android NDK 异常捕获的接入工作就完成了。在你的Android设备上启动APP,在Crasheye后台便能实时看到监控数据。
测试
请在真机上调试验证,在Crasheye后台便能实时看到监控数据。
启动您的app程序可以在LogCat中看到输出"init success!"和"ndk creah handler init success"等字样,如下图:
![](http://testplus.ks3-cn-beijing.ksyun.com/cn/images/docs/crasheye/android_ndk_test.jpg)
常用API
设置渠道号
你可以将渠道号信息配置在AndroidManifest.xml文件中,Crasheye会自动读取你配置的信息并上报,参见配置AndroidManifest.xml文件。
如果你不希望在AndroidManifest.xml中写入渠道信息,你也可以通过直接调用API的方式进行设置,代码示例如下:
@override
public void onCreate(Bundle savedInstanceState) {
Crasheye.setChannelID("Your_Channel");
Crasheye.init(this, "Your_AppKey");
super.onCreate(savedInstanceState);
}
设置App版本号
Crasheye默认会读取AndroidManifest.xml中配置的 android:versionName 版本号信息,当然你也可以通过调用API自行设置:
@override
public void onCreate(Bundle savedInstanceState) {
Crasheye.setAppVersion("Your_APP_Version");
Crasheye.init(this, "Your_AppKey");
super.onCreate(savedInstanceState);
}
设置仅在Wifi环境下上报
为了节省用户在非wifi环境下的网络流量,Crasheye提供接口可使崩溃后的堆栈信息仅在手机链接Wifi的情况下才上报:
@override
public void onCreate(Bundle savedInstanceState) {
// true:仅在wifi下上报;false:所有网络均上报。 默认值为false
Crasheye.setFlushOnlyOverWiFi(true);
Crasheye.init(this, "Your_AppKey");
super.onCreate(savedInstanceState);
}
设置用户标识
为每一条上报记录设置用户标识,可以方便后期筛选和定位问题,比如开发人员想看到自己手机上报的崩溃信息,就可以采用这种方式:
Crasheye.setUserIdentifier(String userIdentifier);
设置收集log日志
此接口主要是收集运行中的logcat日志,当发现异常时会把收集到的log信息保存起来,并一同上传至服务器;(接口最大支持收集1000行最新的log日志)
/**
* 设置获取log日志 获取行数和获取的关键字
* @param lines 获取的行数(最大收集1000行)
* @param filter 获取的关键字(可不传) 。例如:filter 是"Crasheye"就相当于LogCat过滤栏中输入“logcat -d Crasheye”
*/Crasheye.setLogging(int lines, String filter);
添加面包屑(打点信息)
您可以在您的代码中添加多个面包屑(打点信息)然后在Crasheye平台上查看面包屑(打点信息)的时间和顺序,这样您就可以监视到您的项目是否按照您的预设跑了!只需要在每个您想监视的地方调用如下API即可:
Crasheye.leaveBreadcrumb(String breadcrumb);
添加自定义数据
如果您觉得Crasheye默认捕获的数据还不足以满足您的要求的话,您可以添加自定义数据,只需要调用如下API即可:
Crasheye.addExtraData(String key, String value);
主动上报脚本信息接口
此接口主要是给开发者主动调用,在捕获到的异常堆栈信息时,如:lua、js等脚本异常,可以通过调用接口上报至服务端。(为了减少重复上报,相同的异常信息在10分钟内只能上报一次)
/**
* 脚本上报接口
* @param errorTile 错误脚本的标题
* @param stacktrace 堆栈信息
* @param language 脚本语言
*/
Crasheye.sendScriptException(String errorTitle, String stacktrace, String language);
NDK异常回调函数
当发生ndk异常时,Crasheye会回调执行用户指定的函数,收集一些需要的信息。
/**
* 设置NDK异常回调函数
* @param ndkExceiptn 需要实现 NDKExceptionCallback 接口
*/
Crasheye.setNDKExceptionCallback(NDKExceptionCallback ndkExceiptn);
获取设备ID信息
此接口是用户获取当前手机的设备ID信息,通过此设备ID信息可以通过页面搜索,找到对应的机器异常信息。
Crasheye.getCrasheyeUUID();
设置测试版本
/**
* 设置该版本是否为测试版本
* @param isBeta 是否为测试版本
*/
Crasheye.setIsBetaVersion(boolean isBeta)
符号文件上传
1、环境要求
Java SE Runtime Environment 7 或以上
2、准备
a. 符号文件上传工具
b. Debug SO文件(具有调试信息的SO文件),其位置如下:
如果IDE为Eclipse + NDK,默认情况下,Debug SO文件位于:
<项目文件夹>/obj/local/<架构>/
如果IDE为Android + NDK,默认情况下,Debug编译的Debug SO文件位于:
<项目文件夹>/build/intermediates/ndk/debug/obj/local/<架构>/
Release编译的Debug SO文件位于:
<项目文件夹>/build/intermediates/ndk/release/obj/local/<架构>/
3、上传符号文件
参数 | 说明 |
---|---|
-appkey | 项目的appkey |
[-veresion] | 应用版本(可选),默认从项目AndroidManifest.xml 中读取 |
[-AndroidManifestPath] | AndroidManifest.xml 路径(用于读取应用版本号,与-version参数互斥)(可选) |
[-disableUpload] | 不上传符号文件 |
[-dumpsyms] | dsym分析程序dump_syms位置,默认指向当前工作目录 |
网页上传:
1、运行符号文件工具,具体参数如下:
java -jar CrasheyeAndroidSymbol.jar -disableUpload 符号文件路径
2、把生成的.zip包通过网页上传(设置 - 符号文件 - 符号文件上传),并选择对应的应用版本号
工具上传:
1、运行符号文件工具,具体参数如下:
java -jar CrasheyeAndroidSymbol.jar -appkey=项目的AppKey [-version=应用版本号] [-AndroidManifestPath=AndroidManifest.xml路径] 符号文件路径