CN106484490A - 一种应用程序的跟踪分析方法和装置 - Google Patents

一种应用程序的跟踪分析方法和装置 Download PDF

Info

Publication number
CN106484490A
CN106484490A CN201510552445.5A CN201510552445A CN106484490A CN 106484490 A CN106484490 A CN 106484490A CN 201510552445 A CN201510552445 A CN 201510552445A CN 106484490 A CN106484490 A CN 106484490A
Authority
CN
China
Prior art keywords
performance
file
analytic unit
app
source code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201510552445.5A
Other languages
English (en)
Inventor
舒玉强
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201510552445.5A priority Critical patent/CN106484490A/zh
Publication of CN106484490A publication Critical patent/CN106484490A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种应用程序的跟踪分析方法和装置,用于实现各种版本的Android平台下的性能跟踪分析,可以支持C++代码。本发明提供的方法包括:根据包含用C++语言编写的源代码的JNI文件夹建立支持本地开发设备NDK编译的第一性能分析组件,所述源代码用于记录日志以及写日志文件;将所述第一性能分析组件保存到Android系统平台下新增加的java文件中,得到第二性能分析组件;使用Android.mk脚本将所述第二性能分析组件编译为本地库文件形式的第三性能分析组件;在应用程序APP运行时将所述第三性能分析组件动态加载到所述APP中,由第三性能分析组件跟踪所述APP,得到所述APP的运行耗时。

Description

一种应用程序的跟踪分析方法和装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种应用程序的跟踪分析方法和装置。
背景技术
随着智能终端的快速发展,智能终端上安装的应用程序(APP,Application)也日益增多,对各类APP的性能需要进行跟踪分析。目前运行在安卓(英文名称:Android)平台下的智能终端中存在Log、TraceView、SysTrace等性能分析工具,可以实现Android平台上做性能优化。
但目前,现有的技术方案只能做到部分分析或者支持部分开发语言,无法两者兼得。例如现有的Log工具,只能用于少量数据的性能分析,在复杂情况或者数据比较多的情况下,分析非常困难,各参量读取只能逐行查找,任务量很大。又如现有的TraceView工具,只能适用于Android平台的部分高版本,而在Android 2.2以下无法支持,并且主要支持java层的性能分析,在C++代码中无相应接口。又如现有的SysTrace工具,虽然可以支持java层和C++层的性能分析,但同样也只能适用于Android平台的部分高版本,而不支持Android 4.0以下的系统版本。
综上所述,目前Android平台下的智能终端中已有的性能分析工具,要么分析困难,要么对Android全平台支持不够好,要么是对C++代码支持不足。因此,迫切需要提供一种新的性能分析工具,以解决上述问题。
发明内容
本发明实施例提供了一种应用程序的跟踪分析方法和装置,用于实现各种版本的Android平台下的性能跟踪分析,并且可以支持C++代码。
为解决上述技术问题,本发明实施例提供以下技术方案:
第一方面,本发明实施例提供一种应用程序的跟踪分析方法,包括:
根据包含用C++语言编写的源代码的JNI文件夹建立支持本地开发设备NDK编译的第一性能分析组件,所述源代码用于记录日志以及写日志文件;
将所述第一性能分析组件保存到Android系统平台下新增加的java文件中,得到第二性能分析组件;
使用Android.mk脚本将所述第二性能分析组件编译为本地库文件形式的第三性能分析组件;
在应用程序APP运行时将所述第三性能分析组件动态加载到所述APP中,由所述第三性能分析组件跟踪所述APP,得到所述APP的运行耗时。
第二方面,本发明实施例还提供一种应用程序的跟踪分析装置,包括:
第一生成模块,用于根据包含用C++语言编写的源代码的JNI文件夹建立支持本地开发设备NDK编译的第一性能分析组件,所述源代码用于记录日志以及写日志文件;
第二生成模块,用于将所述第一性能分析组件保存到Android系统平台下新增加的java文件中,得到第二性能分析组件;
编译模块,用于使用Android.mk脚本将所述第二性能分析组件编译为本地库文件形式的第三性能分析组件;
跟踪分析模块,用于在应用程序APP运行时将所述第三性能分析组件动态加载到所述APP中,由所述第三性能分析组件跟踪所述APP,得到所述APP的运行耗时。
从以上技术方案可以看出,本发明实施例具有以下优点:
在本发明实施例中,首先根据包含用C++语言编写的源代码的JNI文件夹建立支持本地开发设备NDK编译的第一性能分析组件,源代码用于记录日志以及写日志文件,然后将第一性能分析组件保存到Android系统平台下新增加的java文件中,得到第二性能分析组件,接下来使用Android.mk脚本将第二性能分析组件编译为本地库文件形式的第三性能分析组件,最后在应用程序APP运行时将第三性能分析组件动态加载到APP中,由第三性能分析组件跟踪APP,得到APP的运行耗时。由于本发明中源代码是用C++语言编写,第一性能分析组件包括有JNI文件夹,第二性能分析组件是以Android系统平台下编写的java文件存在的,通过第二性能分析组件的编译得到了本地库文件,即第三性能分析组件为.so文件,由于第三性能分析组件是动态库,可以在APP运行时动态加载,可以完成第三性能分析组件和APP的自动打包,APP的运行过程可以由第三性能分析组件实时跟踪,从而可以准确分析出APP的运行耗时,为下一步对耗时大的APP进行优化打下基础。另外本发明中使用了Android系统平台最基本的增加java文件和编写Android.mk脚本,这对于任何版本的Android系统平台都可以适用,实现各种版本的Android平台下的性能跟踪分析,并且通过对包含C++源代码的JNI文件夹的保存、编译,从而得到本地库文件,实现对C++代码的支持。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种应用程序的跟踪分析方法的流程方框示意图;
图2为本发明实施例提供的在chrome中对应用程序进行跟踪分析的示意图;
图3-a为本发明实施例提供的一种应用程序的跟踪分析装置的组成结构示意图;
图3-b为本发明实施例提供的一种应用程序的跟踪分析装置的组成结构示意图;
图3-c为本发明实施例提供的一种应用程序的跟踪分析装置的组成结构示意图;
图4为本发明实施例提供的应用程序的跟踪分析方法应用于终端的组成结构示意图。
具体实施方式
本发明实施例提供了一种应用程序的跟踪分析方法和装置,用于实现各种版本的Android平台下的性能跟踪分析,并且可以支持C++代码。
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域的技术人员所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。
以下分别进行详细说明。
本发明应用程序的跟踪分析方法的一个实施例,具体可以应用于对应用程序的耗时分析中,请参阅图1所示,本发明一个实施例提供的应用程序的跟踪分析方法,可以包括如下步骤:
101、根据包含用C++语言编写的源代码的JNI文件夹建立支持本地开发设备(NDK,Native Development Kit)编译的第一性能分析组件,源代码用于记录日志以及写日志文件。
在本发明实施例中,很多可以实现记录日志以及写日志文件的性能分析工具都是用C++编程语言开发实现的,但是Android系统平台作为一个真正意义上的开放式运行平台,却是以java语言作为应用程序开发语言,并提供了完善的开发环境和测试工具集。在运行Android系统平台的智能终端中安装有应用程序,这些应用程序需要在Android系统平台下进行性能优化,从而使应用程序可以运行在最佳状态下。以C++代码实现的性能分析工具并没有相应的接口可以直接支持Android系统平台,这就造成了无法使用这些性能分析工具对Android系统平台下的应用程序进行跟踪监测。为此本发明中提出对C++编程语言实现的性能分析工具在Android系统平台下的移植,从而可以实现对Android系统平台下的应用程序的跟踪监测。
在本发明实施例中,首先获取到以C++编程语言实现的可记录日志以及写日志文件的源代码,该源代码的编写方式是C++语言,并且该源代码的作用是自己实现记录日志,以及写日志文件。本发明中提供的源代码可以实现对日志的记录,从而可以在源代码执行后提取到其日志记录中记录的信息。在本发明的一些实施例中,前述的源代码可以为C++语言编写的跟踪(英名称tracing)代码,其中tracing就是实现日志记录和保存的性能分析工具。进一步的,本发明中使用的源代码可以是chrome浏览器下开发完成的tracing,不限定的是,这只是本发明的一种实现场景,其它场景下,也可以由C++开发者自行编写tracing代码。在本发明的一些实施例中,本发明所述的可记录日志和保存日志文件的源代码还可以有其它形式,例如trace log等,本发明不做限定。
在本发明实施例中,建立的JNI(英文全称Java Native Interface,中文名称java本地接口)文件夹具体可以是java编程环境下的本地文件夹,通过JNI文件夹可以允许java代码和其他语言的代码进行交互,在JNI文件中包含有前述的源代码,在该JNI文件夹的基础上,本发明中首先建立第一性能分析组件,第一性能分析组件中包括有前述的JNI文件夹,该JNI文件夹中包含有C++源代码,第一性能分析组件包括有JNI文件夹,该第一性能分析组件可支持NDK编译,NDK编译可以实现对C++源代码编译为本地库文件。
在本发明的一些实施例中,步骤101中根据包含用C++语言编写的源代码的JNI文件夹建立支持本地开发设备NDK编译的第一性能分析组件,具体可以包括如下步骤:
1011、将用C++语言编写的源代码拷贝到JNI文件夹中,得到包含源代码的JNI文件夹;
1012、将包含源代码的JNI文件夹保存到第一性能分析组件中。
具体的,可以首先获取到C++源代码,C++源代码首先保存到JNI文件夹下,建立Android工程实现的第一性能分析组件,上述JNI文件夹中的C++源代码可以保存到第一性能分析组件中,从而生成第一性能分析组件。例如,首先新建一个支持ndk编译(在工程中有JNI文件夹)的Android工程xxxxtrace,该xxxxtrace即可以表示为第一性能分析组件,然后将把chrometracing的C++源代码拷贝到JNI文件夹下。需要说明的是,在前述实施例中,chrome tracing的C++源代码主要实现把相应的日志按照一定的格式写到文件中,其中对C++源代码的拷贝过程是可以支持多线程和多进程的并发操作过程,另外将C++源代码拷贝到JNI文件夹中,是为了在NDK编译的时候,生成本地库文件,即.so文件,详细说明可参阅后续内容的描述。
102、将第一性能分析组件保存到Android系统平台下新增加的java文件中,得到第二性能分析组件。
在本发明实施例中,生成第一性能分析组件之后,由于第一性能分析组件中包括有C++源代码,因此仍可以认为第一性能分析组件是以C++编程语言实现的函数,Android系统平台以java语言作为应用程序开发语言,因此仍需要java开发工具的支持,在Android系统平台下新增加java文件,其中本发明中java文件的含义为在Android系统平台下以java语言的编程要求实现的文件,新生成的java文件除了文件头属性之外的必要信息之外,不包含函数内容,前述建立的第一性能分析组件保存到新增加的java文件中,为了便于引述,将保存在java文件中的第一性能分析组件进行重新定义,命名为第二性能分析组件,则在第二性能分析组件中仍需要继承在第一性能分析组件中的原有内容,例如在第二性能分析组件中也包括有C++源代码,以及JNI文件夹。需要说明的是,第二性能分析组件是以java文件形式输出的,可以供java程序侧的使用。
在本发明的一些实施例中,步骤102将第一性能分析组件保存到Android系统平台下新增加的java文件中,得到第二性能分析组件,具体可以包括如下步骤:
1021、在Android系统平台的src目录下增加java文件,java文件包括:供Android系统平台调用的多个应用程序编程接口(API,ApplicationProgramming Interface);
1022、将第一性能分析组件以native函数的方式定义在java文件中,得到第二性能分析组件。
具体的,在Android系统平台的src目录可用于保存源代码,但是目前的C++源代码无法直接保存在src目录下,在src目录下可先增加一个java文件,在java文件中通常定义有一种或多种的API以备调用,各个API是实现不同函数功能的目标。同时也需要定义原生(英文native)函数,其中native函数根据不同函数功能需要有多种表现形式,native函数可以实现C++代码有关的JNI接口。在得到第一性能分析组件之后,以native函数的方式保存第一性能分析组件,从而可以得到在java文件中定义得到的第二性能分析组件。
举例说明如下:在Android系统平台的src目录下,增加xxxxtrace.java文件,即第二性能分析组件,在xxxxtrace.java中可定义相关API,例如begin,end,setTraceEnable,startTrace,stopTrace等,供java侧使用。同时定义跟C++代码相关的jni接口,即native函数,如nativeJNIBegin,nativeJNIEnd,nativeJNITraceEnabled,nativeJNIStartTrace,nativeJNIStopTrace等。需要说明的是,在本发明中从第一性能分析组件得到第二性能分析组件,即需要在src目录下增加xxxxtrace.java文件,因为第一性能分析组件的核心功能都是c++代码实现,那java侧为了能够正常使用,就采用JNI,在java侧增加xxxxtrace.java,里面有相应的API供java侧调用,这些API最终会调用native,即可以通过JNI去调用C++函数。
需要说明的是,在本发明的一些实施例中,步骤102将第一性能分析组件保存到Android系统平台下新增加的java文件中,得到第二性能分析组件之后,本发明提供的应用程序的跟踪分析方法,还可以包括如下步骤:
将第二性能分析组件打包为jar形式。
其中,在java的实现场景下,第二性能分析组件为ant脚本,故需要ant脚本输出jar包,第二性能分析组件会提供出来供第三方使用,若直接输出源代码,会不便于管理,另外也可能需要将源代码保密,这就需要以jar的方式供第三方使用。源代码可以通过jar包提供给外部使用,因此通过ant脚本把java代码打包为jar包,得到xxxxtrace.jar。需要说明的是,在本发明的一些实施例中,使用自实现的Android库的Android工程中,若在java代码中使用,还需要xxxxtrace.jar参与编译,但源代码不参与打包。
103、使用Android.mk脚本将第二性能分析组件编译为本地库文件形式的第三性能分析组件。
在本发明实施例中,生成第二性能分析组件之后,先编写出Android.mk脚本,Android系统平台以java语言作为应用程序开发语言,第二性能分析组件中包括有可实现记录日志和写日志文件的源代码,第二性能分析组件可以使用Android.mk脚本在NDK编译工具的编译下来编译第二性能分析组件,为了便于引述,将第二性能分析组件进行重新定义,命名为第三性能分析组件,则在第三性能分析组件中仍需要继承在第一性能分析组件、第二性能分析组件中的原有内容,例如源代码。使用NDK编译工具的编译完成后输出本地库文件形式的第三性能分析组件,该第三性能分析组件为.so文件,可以被Android系统平台直接调用。需要说明的是,本发明中第三性能分析组件为动态数据库文件,动态数据库文件是在应用程序运行时需要的时候才动态加载到应用程序中,用以支持应用程序。动态数据库文件会保存在lib下,并且动态数据库文件不会一直在应用程序中,这会减少应用程序的大小,动态数据库文件只需要运行时匹配下就可以自动执行。
在本发明的一些实施例中,步骤103使用Android.mk脚本将第二性能分析组件编译为本地库文件形式的第三性能分析组件,具体可以包括如下步骤:
1031、在Android系统平台下编写Android.mk脚本;
1032、使用Android.mk脚本在Android系统平台的lib/armeabi下生成本地库文件;
1033、对第二性能分析组件进行编译,输出编译后的第二性能分析组件到本地库文件,得到第三性能分析组件。
其中,首先编写Android.mk脚本,在Android系统平台里面,要生成库文件,需要通过Android自己的脚本Android.mk的方式来生成,即按照Android系统平台自己的生成规则。生成lib/armeabi下的本地库文件之后,使用NDK编译工具对第二性能分析组件进行编译,执行Android.mk后,.so文件最终会生成在lib/armeabi下,这个是Android系统平台的规则。举例说明如下,在JNI文件夹下,通过动态JNI方式实现JNI相关的接口,编写Android.mk,最终在lib/armeabi下生成libxxxxtrace.so(即第三性能分析组件),通过JNI接口可以使用so中的函数。
104、在应用程序(APP,Application)运行时将第三性能分析组件动态加载到APP中,由第三性能分析组件跟踪APP,得到APP的运行耗时。
在本发明实施例中,第三性能分析组件是动态数据库文件,只需要在APP运行时动态加载到APP中,而无需保存在APP的原有程序中,APP运行时由第三性能分析组件来跟踪该APP,从而能够监测出该APP的运行耗时,根据监测得到的运行耗时确定是否进行性能优化,以及该怎样优化。
在本发明的一些实施例中,步骤104在应用程序APP运行时将第三性能分析组件动态加载到APP中之前,本发明提供的应用程序的跟踪分析方法还可以包括如下步骤:
若APP为C++代码,在第三性能分析组件的文件头上加入函数宏。
其中,函数宏代表了一个函数名字,加入函数宏其实就是一个函数调用,函数宏加在第三性能分析组件的文件头中,举例说明如下:基于JNI的Android工程中,若在native代码(主要指c++代码)中使用,需要按照下面的方式:
引入#include"xxxxTrace/base/debug/trace_controller.h"
即,需要在待性能优化的APP开始处加上TRACE_EVENT0("Tag","函数名")。需要说明的是,这个宏具体为一段C++代码,可以取得函数名字等参数,并且使用作用域特性来判断函数退出,在此基础上计算函数调用时间。
接下来以一个应用场景为例对本发明进行说明,普通的Android工程中,把xxxxtrace.jar放到lib目录下,把libxxxxtrace.so放到lib/armeabi下。在java代码中,核心代码结构如下:
xxxxtrace.setTraceEnable(true);
xxxxtrace.startTrace();
xxxxtrace.begin();
Your code;
xxxxtrace.end();
xxxxtrace.stopTrace();
如果要在其他代码处加性能跟踪代码,那么直接执行如下代码即可:
xxxxtrace.begin();
Your code;
xxxxtrace.end();
其中,Your code为原始的源代码,就是需要分析耗时的函数的地方。
接下来以chrome tracing的实现过程为例进行性能分析,首先导出.data文件,例如存储器中保存的tracing.data,在chrome://tracing打开,请参阅如图2所示,图2为本发明实施例提供的在chrome中对应用程序进行跟踪分析的示意图。在C层利用C++面向对象的作用域来跟踪函数耗时,在java层利用成对的函数调用来跟踪函数耗时,它把数据按照json格式保持起来,然后在chrome浏览器中展示出来,可以用来分析应用程序的功能耗时。例如,以进程11548为例,图2中用“twolibs.oncreate”、“myAdd”、“first”各自所在的阴影长度来表示各自的函数耗时。因为本发明在必要的地方加了traceing相关代码,它可以完成函数耗时计算,并记录在日志中。可以看到函数的耗时及其中央处理器(CPU,Central Processing Unit)调度,能够及时分析出函数耗时,对于耗时大的函数可以进行部分实现优化和CPU调度优化。
通过以上实施例对本发明实施例的描述可知,首先根据包含用C++语言编写的源代码的JNI文件夹建立支持本地开发设备NDK编译的第一性能分析组件,源代码用于记录日志以及写日志文件,然后将第一性能分析组件保存到Android系统平台下新增加的java文件中,得到第二性能分析组件,接下来使用Android.mk脚本将第二性能分析组件编译为本地库文件形式的第三性能分析组件,最后在应用程序APP运行时将第三性能分析组件动态加载到APP中,由第三性能分析组件跟踪APP,得到APP的运行耗时。由于本发明中源代码是用C++语言编写,第一性能分析组件包括有JNI文件夹,第二性能分析组件是以Android系统平台下编写的java文件存在的,通过第二性能分析组件的编译得到了本地库文件,即第三性能分析组件为.so文件,由于第三性能分析组件是动态库,可以在APP运行时动态加载,可以完成第三性能分析组件和APP的自动打包,APP的运行过程可以由第三性能分析组件实时跟踪,从而可以准确分析出APP的运行耗时,为下一步对耗时大的APP进行优化打下基础。另外本发明中使用了Android系统平台最基本的增加java文件和编写Android.mk脚本,这对于任何版本的Android系统平台都可以适用,实现各种版本的Android平台下的性能跟踪分析,并且通过对包含C++源代码的JNI文件夹的保存、编译,从而得到本地库文件,实现对C++代码的支持。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
为便于更好的实施本发明实施例的上述方案,下面还提供用于实施上述方案的相关装置。
请参阅图3-a所示,本发明实施例提供的一种应用程序的跟踪分析装置300,可以包括:第一生成模块301、第二生成模块302、编译模块303、跟踪分析模块304,其中,
第一生成模块301,用于根据包含用C++语言编写的源代码的JNI文件夹建立支持本地开发设备NDK编译的第一性能分析组件,所述源代码用于记录日志以及写日志文件;
第二生成模块302,用于将所述第一性能分析组件保存到Android系统平台下新增加的java文件中,得到第二性能分析组件;
编译模块303,用于使用Android.mk脚本将所述第二性能分析组件编译为本地库文件形式的第三性能分析组件;
跟踪分析模块304,用于在应用程序APP运行时将所述第三性能分析组件动态加载到所述APP中,由所述第三性能分析组件跟踪所述APP,得到所述APP的运行耗时。
在本发明的一些实施例中,所述源代码为C++语言编写的跟踪tracing代码。
在本发明的一些实施例中,所述第一生成模块301,具体用于将用C++语言编写的源代码拷贝到JNI文件夹中,得到包含所述源代码的JNI文件夹;将包含所述源代码的JNI文件夹保存到第一性能分析组件中。
在本发明的一些实施例中,所述第二生成模块302,具体用于在Android系统平台的src目录下增加java文件,所述java文件包括:供Android系统平台调用的多个应用程序编程接口API;将所述第一性能分析组件以native函数的方式定义在所述java文件中,得到第二性能分析组件。
在本发明的一些实施例中,请参阅如图3-b所示,所述应用程序的跟踪分析装置300,还包括:打包模块305,用于所述第二生成模块302将所述第一性能分析组件保存到Android系统平台下新增加的java文件中,得到第二性能分析组件之后,将所述第二性能分析组件打包为jar形式。
在本发明的一些实施例中,所述编译模块303,具体用于在Android系统平台下编写Android.mk脚本;使用所述Android.mk脚本在所述Android系统平台的lib/armeabi下生成本地库文件;对所述第二性能分析组件进行编译,输出编译后的第二性能分析组件到所述本地库文件,得到第三性能分析组件。
在本发明的一些实施例中,请参阅如图3-c所示,所述应用程序的跟踪分析装置300,还包括:增加模块306,用于所述跟踪分析模块304在应用程序APP运行时将所述第三性能分析组件动态加载到所述APP中之前,若所述APP为C++代码,在所述第三性能分析组件的文件头上加入函数宏。
通过以上实施例对本发明实施例的描述可知,首先根据包含用C++语言编写的源代码的JNI文件夹建立支持本地开发设备NDK编译的第一性能分析组件,源代码用于记录日志以及写日志文件,然后将第一性能分析组件保存到Android系统平台下新增加的java文件中,得到第二性能分析组件,接下来使用Android.mk脚本将第二性能分析组件编译为本地库文件形式的第三性能分析组件,最后在应用程序APP运行时将第三性能分析组件动态加载到APP中,由第三性能分析组件跟踪APP,得到APP的运行耗时。由于本发明中源代码是用C++语言编写,第一性能分析组件包括有JNI文件夹,第二性能分析组件是以Android系统平台下编写的java文件存在的,通过第二性能分析组件的编译得到了本地库文件,即第三性能分析组件为.so文件,由于第三性能分析组件是动态库,可以在APP运行时动态加载,可以完成第三性能分析组件和APP的自动打包,APP的运行过程可以由第三性能分析组件实时跟踪,从而可以准确分析出APP的运行耗时,为下一步对耗时大的APP进行优化打下基础。另外本发明中使用了Android系统平台最基本的增加java文件和编写Android.mk脚本,这对于任何版本的Android系统平台都可以适用,实现各种版本的Android平台下的性能跟踪分析,并且通过对包含C++源代码的JNI文件夹的保存、编译,从而得到本地库文件,实现对C++代码的支持。
本发明实施例还提供了另一种终端,如图4所示,为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。该终端可以为包括手机、平板电脑、PDA(Personal DigitalAssistant,个人数字助理)、POS(Point of Sales,销售终端)、车载电脑等任意终端设备,以终端为手机为例:
图4示出的是与本发明实施例提供的终端相关的手机的部分结构的框图。参考图4,手机包括:射频(Radio Frequency,RF)电路410、存储器420、输入单元430、显示单元440、传感器450、音频电路460、无线保真(wirelessfidelity,WiFi)模块470、处理器480、以及电源490等部件。本领域技术人员可以理解,图4中示出的手机结构并不构成对手机的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合图4对手机的各个构成部件进行具体的介绍:
RF电路410可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,给处理器480处理;另外,将设计上行的数据发送给基站。通常,RF电路410包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器(Low Noise Amplifier,LNA)、双工器等。此外,RF电路410还可以通过无线通信与网络和其他设备通信。上述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(Global Systemof Mobile communication,GSM)、通用分组无线服务(General Packet RadioService,GPRS)、码分多址(Code Division Multiple Access,CDMA)、宽带码分多址(Wideband Code Division Multiple Access,WCDMA)、长期演进(Long Term Evolution,LTE)、电子邮件、短消息服务(Short Messaging Service,SMS)等。
存储器420可用于存储软件程序以及模块,处理器480通过运行存储在存储器420的软件程序以及模块,从而执行手机的各种功能应用以及数据处理。存储器420可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器420可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
输入单元430可用于接收输入的数字或字符信息,以及产生与手机的用户设置以及功能控制有关的键信号输入。具体地,输入单元430可包括触控面板431以及其他输入设备432。触控面板431,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板431上或在触控面板431附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触控面板431可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器480,并能接收处理器480发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板431。除了触控面板431,输入单元430还可以包括其他输入设备432。具体地,其他输入设备432可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元440可用于显示由用户输入的信息或提供给用户的信息以及手机的各种菜单。显示单元440可包括显示面板441,可选的,可以采用液晶显示器(Liquid Crystal Display,LCD)、有机发光二极管(Organic Light-EmittingDiode,OLED)等形式来配置显示面板441。进一步的,触控面板431可覆盖显示面板441,当触控面板431检测到在其上或附近的触摸操作后,传送给处理器480以确定触摸事件的类型,随后处理器480根据触摸事件的类型在显示面板441上提供相应的视觉输出。虽然在图4中,触控面板431与显示面板441是作为两个独立的部件来实现手机的输入和输入功能,但是在某些实施例中,可以将触控面板431与显示面板441集成而实现手机的输入和输出功能。
手机还可包括至少一种传感器450,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板441的亮度,接近传感器可在手机移动到耳边时,关闭显示面板441和/或背光。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于手机还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路460、扬声器461,传声器462可提供用户与手机之间的音频接口。音频电路460可将接收到的音频数据转换后的电信号,传输到扬声器461,由扬声器461转换为声音信号输出;另一方面,传声器462将收集的声音信号转换为电信号,由音频电路460接收后转换为音频数据,再将音频数据输出处理器480处理后,经RF电路410以发送给比如另一手机,或者将音频数据输出至存储器420以便进一步处理。
WiFi属于短距离无线传输技术,手机通过WiFi模块470可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图4示出了WiFi模块470,但是可以理解的是,其并不属于手机的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器480是手机的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器420内的软件程序和/或模块,以及调用存储在存储器420内的数据,执行手机的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器480可包括一个或多个处理单元;优选的,处理器480可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器480中。
手机还包括给各个部件供电的电源490(比如电池),优选的,电源可以通过电源管理系统与处理器480逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
尽管未示出,手机还可以包括摄像头、蓝牙模块等,在此不再赘述。
在本发明实施例中,该终端所包括的处理器480还具有控制执行以上由终端执行的应用程序的跟踪分析方法流程。
另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
综上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照上述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对上述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (14)

1.一种应用程序的跟踪分析方法,其特征在于,包括:
根据包含用C++语言编写的源代码的JNI文件夹建立支持本地开发设备NDK编译的第一性能分析组件,所述源代码用于记录日志以及写日志文件;
将所述第一性能分析组件保存到Android系统平台下新增加的java文件中,得到第二性能分析组件;
使用Android.mk脚本将所述第二性能分析组件编译为本地库文件形式的第三性能分析组件;
在应用程序APP运行时将所述第三性能分析组件动态加载到所述APP中,由所述第三性能分析组件跟踪所述APP,得到所述APP的运行耗时。
2.根据权利要求1所述的方法,其特征在于,所述源代码为C++语言编写的跟踪tracing代码。
3.根据权利要求1所述的方法,其特征在于,所述根据包含用C++语言编写的源代码的JNI文件夹建立支持本地开发设备NDK编译的第一性能分析组件,包括:
将用C++语言编写的源代码拷贝到JNI文件夹中,得到包含所述源代码的JNI文件夹;
将包含所述源代码的JNI文件夹保存到第一性能分析组件中。
4.根据权利要求1所述的方法,其特征在于,所述将所述第一性能分析组件保存到Android系统平台下新增加的java文件中,得到第二性能分析组件,包括:
在Android系统平台的src目录下增加java文件,所述java文件包括:供Android系统平台调用的多个应用程序编程接口API;
将所述第一性能分析组件以native函数的方式定义在所述java文件中,得到第二性能分析组件。
5.根据权利要求1所述的方法,其特征在于,所述将所述第一性能分析组件保存到Android系统平台下新增加的java文件中,得到第二性能分析组件之后,所述方法还包括:
将所述第二性能分析组件打包为jar形式。
6.根据权利要求1所述的方法,其特征在于,所述使用Android.mk脚本将所述第二性能分析组件编译为本地库文件形式的第三性能分析组件,包括:
在Android系统平台下编写Android.mk脚本;
使用所述Android.mk脚本在所述Android系统平台的lib/armeabi下生成本地库文件;
对所述第二性能分析组件进行编译,输出编译后的第二性能分析组件到所述本地库文件,得到第三性能分析组件。
7.根据权利要求1所述的方法,其特征在于,所述在应用程序APP运行时将所述第三性能分析组件动态加载到所述APP中之前,所述方法还包括:
若所述APP为C++代码,在所述第三性能分析组件的文件头上加入函数宏。
8.一种应用程序的跟踪分析装置,其特征在于,包括:
第一生成模块,用于根据包含用C++语言编写的源代码的JNI文件夹建立支持本地开发设备NDK编译的第一性能分析组件,所述源代码用于记录日志以及写日志文件;
第二生成模块,用于将所述第一性能分析组件保存到Android系统平台下新增加的java文件中,得到第二性能分析组件;
编译模块,用于使用Android.mk脚本将所述第二性能分析组件编译为本地库文件形式的第三性能分析组件;
跟踪分析模块,用于在应用程序APP运行时将所述第三性能分析组件动态加载到所述APP中,由所述第三性能分析组件跟踪所述APP,得到所述APP的运行耗时。
9.根据权利要求8所述的装置,其特征在于,所述源代码为C++语言编写的跟踪tracing代码。
10.根据权利要求8所述的装置,其特征在于,所述第一生成模块,具体用于将用C++语言编写的源代码拷贝到JNI文件夹中,得到包含所述源代码的JNI文件夹;将包含所述源代码的JNI文件夹保存到第一性能分析组件中。
11.根据权利要求8所述的装置,其特征在于,所述第二生成模块,具体用于在Android系统平台的src目录下增加java文件,所述java文件包括:供Android系统平台调用的多个应用程序编程接口API;将所述第一性能分析组件以native函数的方式定义在所述java文件中,得到第二性能分析组件。
12.根据权利要求8所述的装置,其特征在于,所述应用程序的跟踪分析装置,还包括:打包模块,用于所述第二生成模块将所述第一性能分析组件保存到Android系统平台下新增加的java文件中,得到第二性能分析组件之后,将所述第二性能分析组件打包为jar形式。
13.根据权利要求8所述的装置,其特征在于,所述编译模块,具体用于在Android系统平台下编写Android.mk脚本;使用所述Android.mk脚本在所述Android系统平台的lib/armeabi下生成本地库文件;对所述第二性能分析组件进行编译,输出编译后的第二性能分析组件到所述本地库文件,得到第三性能分析组件。
14.根据权利要求8所述的装置,其特征在于,所述应用程序的跟踪分析装置,还包括:增加模块,用于所述跟踪分析模块在应用程序APP运行时将所述第三性能分析组件动态加载到所述APP中之前,若所述APP为C++代码,在所述第三性能分析组件的文件头上加入函数宏。
CN201510552445.5A 2015-09-02 2015-09-02 一种应用程序的跟踪分析方法和装置 Pending CN106484490A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510552445.5A CN106484490A (zh) 2015-09-02 2015-09-02 一种应用程序的跟踪分析方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510552445.5A CN106484490A (zh) 2015-09-02 2015-09-02 一种应用程序的跟踪分析方法和装置

Publications (1)

Publication Number Publication Date
CN106484490A true CN106484490A (zh) 2017-03-08

Family

ID=58237838

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510552445.5A Pending CN106484490A (zh) 2015-09-02 2015-09-02 一种应用程序的跟踪分析方法和装置

Country Status (1)

Country Link
CN (1) CN106484490A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117312117A (zh) * 2023-11-30 2023-12-29 沐曦集成电路(杭州)有限公司 一种打点数据的处理方法、装置、设备及介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102662665A (zh) * 2012-03-29 2012-09-12 福州瑞芯微电子有限公司 在安卓系统上实现支持各种传感器的输入子系统
CN102867142A (zh) * 2012-08-22 2013-01-09 四川长虹电器股份有限公司 一种基于Android系统的安全防护方法
CN102999418A (zh) * 2012-11-16 2013-03-27 广东欧珀移动通信有限公司 一种基于pc端的手机监测方法
CN103177210A (zh) * 2013-04-02 2013-06-26 中国人民大学 一种在Android中植入动态污点分析模块的方法
CN103455337A (zh) * 2013-09-12 2013-12-18 四川长虹电器股份有限公司 在安卓开发环境下使用动态库的方法
CN104102506A (zh) * 2014-04-25 2014-10-15 华南理工大学 一种基于ARM平台的Android启动加速方法
CN104281478A (zh) * 2014-10-28 2015-01-14 小米科技有限责任公司 更新应用程序的方法及装置
CN104866416A (zh) * 2014-02-25 2015-08-26 腾讯科技(深圳)有限公司 实现应用程序性能分析的方法和装置

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102662665A (zh) * 2012-03-29 2012-09-12 福州瑞芯微电子有限公司 在安卓系统上实现支持各种传感器的输入子系统
CN102867142A (zh) * 2012-08-22 2013-01-09 四川长虹电器股份有限公司 一种基于Android系统的安全防护方法
CN102999418A (zh) * 2012-11-16 2013-03-27 广东欧珀移动通信有限公司 一种基于pc端的手机监测方法
CN103177210A (zh) * 2013-04-02 2013-06-26 中国人民大学 一种在Android中植入动态污点分析模块的方法
CN103455337A (zh) * 2013-09-12 2013-12-18 四川长虹电器股份有限公司 在安卓开发环境下使用动态库的方法
CN104866416A (zh) * 2014-02-25 2015-08-26 腾讯科技(深圳)有限公司 实现应用程序性能分析的方法和装置
CN104102506A (zh) * 2014-04-25 2014-10-15 华南理工大学 一种基于ARM平台的Android启动加速方法
CN104281478A (zh) * 2014-10-28 2015-01-14 小米科技有限责任公司 更新应用程序的方法及装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117312117A (zh) * 2023-11-30 2023-12-29 沐曦集成电路(杭州)有限公司 一种打点数据的处理方法、装置、设备及介质
CN117312117B (zh) * 2023-11-30 2024-03-01 沐曦集成电路(杭州)有限公司 一种打点数据的处理方法、装置、设备及介质

Similar Documents

Publication Publication Date Title
CN108415739B (zh) 一种动态链接库函数的钩挂方法、装置和存储介质
CN105404585B (zh) 获取代码覆盖率的方法及装置
CN107943683B (zh) 一种测试脚本生成方法、装置、电子设备及存储介质
CN107908952B (zh) 识别真机和模拟器的方法、装置和终端
CN106254436A (zh) 一种远程调试的方法、相关设备及系统
CN106095456A (zh) 引导用户下载应用程序的方法、装置及移动终端
CN104216726B (zh) Android虚拟机加载方法及装置
CN104516812A (zh) 一种软件测试方法和装置
CN106227588A (zh) 一种多实例对象的创建方法、装置及移动终端
CN106295353B (zh) 一种引擎漏洞检测的方法以及检测装置
CN110196795A (zh) 检测移动终端应用运行状态的方法及相关装置
CN106055480A (zh) 一种调试网页的方法及终端
CN110378107B (zh) 一种安装包检测的方法及相关装置
CN106155717A (zh) 一种将sdk集成到第三方apk的方法和装置
CN110058850A (zh) 一种应用的开发方法、装置以及存储介质
CN105847325A (zh) 应用客户端的调试方法及装置
CN108572908A (zh) 信息反馈方法及装置
CN107908407A (zh) 编译方法、装置及终端设备
CN107276602A (zh) 射频干扰处理方法、装置、存储介质及终端
CN106201547A (zh) 一种基于移动终端的消息显示的方法、装置及移动终端
CN106294108A (zh) 应用程序测试方法及装置
CN103699577B (zh) 一种页面显示加速方法、装置及移动终端
CN109558732A (zh) 一种防止应用程序文件被篡改的方法及服务器
CN106155888A (zh) 一种移动应用中网页加载性能的检测方法和装置
CN106933636A (zh) 启动插件服务的方法、装置和终端设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20170308

RJ01 Rejection of invention patent application after publication