首页 安全防御正文

contextapp(contextapplicationlistener)

hacker 安全防御 2022-08-26 96 4 contextapp

android getContext,getApplicationContext和this有什么区别

使用this, 说明当前类是context的子类,一般是activity application等

使用getApplicationContext 取得的是当前app所使用的application,这在AndroidManifest中唯一指定。意味着,在当前app的任意位置使用这个函数得到的是同一个Context

使用getContext获取的是当前对象所在的Context

Context通常翻译成上下文,我通常当成场景来理解。

比如 我在火车上。

This 指当前类就是当前的场景。我.this不是context,

我.getContext 是火车, 火车.this是一个context

AppContext 就可以理解成这个社会。发生的一切都在这个社会中.有且只有一个社会

Android中Context传输问题

context你可以传一个activity进来,activity里面可以获取到context上下文的内容.

Tomcat中Context是什么用的

Context元素代表一个web应用,运行在某个特定的虚拟主机上。如Servletnbsp;Specificationnbsp;2.2或以后版本中描述的那样,每个web应用基于一个Webnbsp;Applicationnbsp;Archive(WAR)文件,或者是一个目录,包含WAR文件解压后的内容。有关Webnbsp;Applicationnbsp;Archive的更多信息,可以参考Servletnbsp;Specification和Tomcatnbsp;应用程序开发者指南。nbsp;通过将请求URI的最长可能前缀与每个Context的context路径进行匹配,Catalina选择相应的webnbsp;应用处理HTTP请求。一旦选定,根据webnbsp;applicationnbsp;deploymentnbsp;descriptornbsp;文件中定义的servlet映射,Context会选择一个正确的servlet来处理进来的请求。servlet映射必须定义在该web应用目录层次结构中的/WEB-INF/web.xml中。你可以在一个Host元素中嵌套任意多的Context元素。每个Context的路径必须是惟一的,由path属性定义。另外,你必须定义一个context路径长度为0的Context,这个Context称为该虚拟主机的缺省web应用,用来处理那些不能匹配任何Context的Context路径的请求。除了在Host元素中嵌套Context元素以外,你也可以将它们存储在单个文件中(以.xml为后缀),放在$CATALINA_HOME/conf/[enginename]/[hostname]/目录下面。有关这方面的更多信息,参考应用的自动发布。这种 *** 允许动态重新配置web应用,因为如果修改了conf/server.xml,就必须重新启动Tomcat。除了明确指定Context元素以外,还有其他几种技术可以自动生成Context元素。参考Automaticnbsp;Applicationnbsp;Deploymentnbsp;和nbsp;Usernbsp;Webnbsp;Applications以下的描述使用变量$CATALINA_HOME来指Tomcatnbsp;5安装的目录。大多数的相对路径都是以该目录为基准。但是,通过设置CATALINA_BASE目录,可以运行多个Tomcatnbsp;5实例,这时你应该使用$CATALINA_BASE来作为目录基准,而不是使用$CATALINA_HOME。属性nbsp;通用属性nbsp;所有Context的实现支持如下属性:nbsp;backgroundProcessorDelaynbsp;这个值代表在context及其子容器(包括所有的wrappers)上调用backgroundProcess *** 的延时,以秒为单位。如果延时值非负,子容器不会被调用,也就是说子容器使用自己的处理线程。如果该值为正,会创建一个新的线程。在等待指定的时间以后,该线程在主机及其nbsp;子容器上调用backgroundProcess *** 。context利用后台处理session过期,监测类的变化用于重新载入。如果没有指定,该属性的缺省值是-1,说明context依赖其所属的Host的后台处理。nbsp;classNamenbsp;实现的Java类名。该类必须实现org.apache.catalina.Context接口。如果没有指定,使用标准实现(在下面定义)。nbsp;cookiesnbsp;如果想利用cookies来传递sessionnbsp;identifier(需要客户端支持cookies),设为ture。否则为false,这种情况下只能依靠URLnbsp;Rewriting传递sessionnbsp;identifier。crossContextnbsp;如果想在应用内调用ServletContext.getContext()来返回在该虚拟主机上运行的其他webnbsp;application的requestnbsp;dispatcher,设为true。在安全性很重要的环境中,设为false,使得getContext()总是返回null。缺省值为false。docBasenbsp;该web应用的文档基准目录(Documentnbsp;Base,也称为Contextnbsp;Root),或者是WAR文件的路径。可以使用绝对路径,也可以使用相对于context所属的Host的appBase路径。overridenbsp;如果想利用该Context元素中的设置覆盖D

网易云捕怎么用 网易云捕APP质量跟踪使用教程 ***

能收集以下崩溃异常日志:

1、java层代码

2、native层(NDK层,对应为so文件中的C/C++代码)

3、unity3d引擎下的C#脚本

4、cocos2dx(Lua,C++, *** 代码异常均能捕获)

*** /案例

库文件导入

方式一:自动导入(推荐)

在Module的buid.gradle文件中添加依赖和属性配置:

(另有手动导入办法,详见网易云捕官网集成说明)

集成说明列表

1、参数配置2、简单的初始化调用3、Java集成案例4、NDK集成案例5、配置mapping文件

参数配置

1)权限信息配置需要在在AndroidManifest.xml中添加以下权限:(见图一)

备注:在Android M系统以后,android.permission.READ_PHONE_STATE被设定为敏感权限,如果

AndroidManifest.xml文件中targetSdkVersion被设置为23以上,且代码中没有请求过该权限,可能导致获取的imei、deviceID等设备信息为空,但是对程序的稳定性并没有影响。

2)AppID配置还需在AndroidManifest.xml的application中添加meta-data标签,其中android:value填写您APP的AppID值,可以在”用户中心“-”设置“-”产品信息“中获取。(注意:将meta-data子标签加到application父标签下,配置不正确可能导致后台看不到数据。)(见图二)

3)Proguard混淆配置避免混淆Bugrpt SDK,请在Proguard混淆文件中配置:(见图三)

简单的初始化调用

在项目Application类或者主Activity类的onCreate() *** 中添加以下代码:

如果Java层或NDK代码发生异常时,bugrpt便会捕获到该异常并发送给服务器。

Java集成案例

SDK集成后可以测试一下bugrpt的异常捕获能力,以下为一个典型的Java集成案例:编写一个测试使用的demo示例,新建工程名 为"crashtest",导入bugrpt.jar,并在AndroidManifest.xml中添加相应权限并进行初始化调用。为了便于观测,我们 在“crashTest”按钮里添加一个模拟的异常,对应的java层代码:(见图一)

可以尝试生成APK之后,点击按钮触发模拟异常,后台便能查询到如下崩溃日志:(见图二)

NDK集成案例

以下为一个典型的NDK集成案例:编写一个测试使用的NDK崩溃demo示例,新建工程名为"crash",导入相应的 libbugrpt.so,在AndroidManifest.xml中添加相应权限,之后对云捕sdk进行初始化调用。为了便于观测,同样构建一个按钮,在其中添加一个模拟的异常,对应的java层代码:(见图一)

而msg函数则是打印一个字符串最后触发了一个异常,C++实现代码如下:(见图二)

可以尝试生成APK之后,点击按钮触发模拟异常,后台便能查询到如下崩溃日志:可以很清晰地看出崩溃发生在msg函数的某个偏移,pc为00000df2,可以通过addr2line很方便地转换为出错的代码行号。(见图三)

可以看出demo.cpp第51行代码处的代码确实是出错位置。(见图四)

配置mapping

生成APK的时候一般都需要进行混淆处理,此时崩溃发生时产生的崩溃堆栈信息都是混淆后的符号,不便于排查BUG。为了能正确地还原回源码时的堆栈,需要配置一下mapping.txt文件,让“云捕”自动化进行反混淆处理。

混淆处理时,利用proguard在混淆后会生成一个mapping.txt文件,该文件地址Eclipse下默认生成在工程目录的proguard文件夹下,而Android Studio则是根据配置生成在指定目录下。EclipseAndroid Studio:(见图一)

只需要把这个mapping.txt文件上传到后台即可。登录云捕系统,选择您的APP后点击“上传mapping“:(见图二)

上传成功后会显示:(见图三)

高级设置

我们提供UserStrategy类作为Bugrpt的初始化扩展,开发者可以传入一些自定义信息。通过以下方式传入:

Context appCtx = this.getApplicationContext();

UserStrategy strategy = new UserStrategy(appCtx);//...在这里设置strategy的属性,在bugrpt初始化时传入

CrashHandler.init(appCtx, strategy);

UserStrategy主要API:1、设置渠道:Bugrpt默认读取AndroidManifest.xml文件中渠道信息,可通过该接口修改渠道信息。

strategy.setChannel("myChannel");

2、设置场景:Bugrpt可以设置崩溃场景。

strategy.setScene("myScene");

3、设置用户账户Bugrpt可以设置用户的账户信息,方便开发者针对性排错。

strategy.setUserId("myUserID")

4、设置自定义Map参数对

Bugrpt支持用户自定义Map参数可以保存发生Crash时的一些自定义的环境信息。在发生Crash时会随着异常信息一起上报并在页面展示。

strategy.addUserDefinedParam("key", "value");

注意:最多可以有9对自定义的key-value(超过则添加失败),key限长50字节、value限长200字节,过长截断。

更多的用户功能

1 主动上报开发者catched的异常

2 开发者主动上传信息接口

3 开发者记录面包屑接口

4 ReLinker.loadLibrary接口

一个androidapp最多会创建多少个context对象

总context对象 = activity(app总共创建的activity数量)+service(app总共创建service数量)+1(application只有一个)

原因:activity和service ,application都是继承context的。

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。