本發(fā)明涉及計算機技術(shù)領(lǐng)域,尤其涉及一種應(yīng)用程序的跟蹤分析方法和裝置。
背景技術(shù):
隨著智能終端的快速發(fā)展,智能終端上安裝的應(yīng)用程序(APP,Application)也日益增多,對各類APP的性能需要進行跟蹤分析。目前運行在安卓(英文名稱:Android)平臺下的智能終端中存在Log、TraceView、SysTrace等性能分析工具,可以實現(xiàn)Android平臺上做性能優(yōu)化。
但目前,現(xiàn)有的技術(shù)方案只能做到部分分析或者支持部分開發(fā)語言,無法兩者兼得。例如現(xiàn)有的Log工具,只能用于少量數(shù)據(jù)的性能分析,在復(fù)雜情況或者數(shù)據(jù)比較多的情況下,分析非常困難,各參量讀取只能逐行查找,任務(wù)量很大。又如現(xiàn)有的TraceView工具,只能適用于Android平臺的部分高版本,而在Android 2.2以下無法支持,并且主要支持java層的性能分析,在C++代碼中無相應(yīng)接口。又如現(xiàn)有的SysTrace工具,雖然可以支持java層和C++層的性能分析,但同樣也只能適用于Android平臺的部分高版本,而不支持Android 4.0以下的系統(tǒng)版本。
綜上所述,目前Android平臺下的智能終端中已有的性能分析工具,要么分析困難,要么對Android全平臺支持不夠好,要么是對C++代碼支持不足。因此,迫切需要提供一種新的性能分析工具,以解決上述問題。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供了一種應(yīng)用程序的跟蹤分析方法和裝置,用于實現(xiàn)各種版本的Android平臺下的性能跟蹤分析,并且可以支持C++代碼。
為解決上述技術(shù)問題,本發(fā)明實施例提供以下技術(shù)方案:
第一方面,本發(fā)明實施例提供一種應(yīng)用程序的跟蹤分析方法,包括:
根據(jù)包含用C++語言編寫的源代碼的JNI文件夾建立支持本地開發(fā)設(shè)備NDK編譯的第一性能分析組件,所述源代碼用于記錄日志以及寫日志文件;
將所述第一性能分析組件保存到Android系統(tǒng)平臺下新增加的java文件中,得到第二性能分析組件;
使用Android.mk腳本將所述第二性能分析組件編譯為本地庫文件形式的第三性能分析組件;
在應(yīng)用程序APP運行時將所述第三性能分析組件動態(tài)加載到所述APP中,由所述第三性能分析組件跟蹤所述APP,得到所述APP的運行耗時。
第二方面,本發(fā)明實施例還提供一種應(yīng)用程序的跟蹤分析裝置,包括:
第一生成模塊,用于根據(jù)包含用C++語言編寫的源代碼的JNI文件夾建立支持本地開發(fā)設(shè)備NDK編譯的第一性能分析組件,所述源代碼用于記錄日志以及寫日志文件;
第二生成模塊,用于將所述第一性能分析組件保存到Android系統(tǒng)平臺下新增加的java文件中,得到第二性能分析組件;
編譯模塊,用于使用Android.mk腳本將所述第二性能分析組件編譯為本地庫文件形式的第三性能分析組件;
跟蹤分析模塊,用于在應(yīng)用程序APP運行時將所述第三性能分析組件動態(tài)加載到所述APP中,由所述第三性能分析組件跟蹤所述APP,得到所述APP的運行耗時。
從以上技術(shù)方案可以看出,本發(fā)明實施例具有以下優(yōu)點:
在本發(fā)明實施例中,首先根據(jù)包含用C++語言編寫的源代碼的JNI文件夾建立支持本地開發(fā)設(shè)備NDK編譯的第一性能分析組件,源代碼用于記錄日志以及寫日志文件,然后將第一性能分析組件保存到Android系統(tǒng)平臺下新增加的java文件中,得到第二性能分析組件,接下來使用Android.mk腳本將第二性能分析組件編譯為本地庫文件形式的第三性能分析組件,最后在應(yīng)用程序APP運行時將第三性能分析組件動態(tài)加載到APP中,由第三性能分析組件跟蹤APP,得到APP的運行耗時。由于本發(fā)明中源代碼是用C++語言編寫,第一性能分析組件包括有JNI文件夾,第二性能分析組件是以Android系統(tǒng)平 臺下編寫的java文件存在的,通過第二性能分析組件的編譯得到了本地庫文件,即第三性能分析組件為.so文件,由于第三性能分析組件是動態(tài)庫,可以在APP運行時動態(tài)加載,可以完成第三性能分析組件和APP的自動打包,APP的運行過程可以由第三性能分析組件實時跟蹤,從而可以準確分析出APP的運行耗時,為下一步對耗時大的APP進行優(yōu)化打下基礎(chǔ)。另外本發(fā)明中使用了Android系統(tǒng)平臺最基本的增加java文件和編寫Android.mk腳本,這對于任何版本的Android系統(tǒng)平臺都可以適用,實現(xiàn)各種版本的Android平臺下的性能跟蹤分析,并且通過對包含C++源代碼的JNI文件夾的保存、編譯,從而得到本地庫文件,實現(xiàn)對C++代碼的支持。
附圖說明
為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域的技術(shù)人員來講,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例提供的一種應(yīng)用程序的跟蹤分析方法的流程方框示意圖;
圖2為本發(fā)明實施例提供的在chrome中對應(yīng)用程序進行跟蹤分析的示意圖;
圖3-a為本發(fā)明實施例提供的一種應(yīng)用程序的跟蹤分析裝置的組成結(jié)構(gòu)示意圖;
圖3-b為本發(fā)明實施例提供的一種應(yīng)用程序的跟蹤分析裝置的組成結(jié)構(gòu)示意圖;
圖3-c為本發(fā)明實施例提供的一種應(yīng)用程序的跟蹤分析裝置的組成結(jié)構(gòu)示意圖;
圖4為本發(fā)明實施例提供的應(yīng)用程序的跟蹤分析方法應(yīng)用于終端的組成結(jié)構(gòu)示意圖。
具體實施方式
本發(fā)明實施例提供了一種應(yīng)用程序的跟蹤分析方法和裝置,用于實現(xiàn)各種版本的Android平臺下的性能跟蹤分析,并且可以支持C++代碼。
為使得本發(fā)明的發(fā)明目的、特征、優(yōu)點能夠更加的明顯和易懂,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,下面所描述的實施例僅僅是本發(fā)明一部分實施例,而非全部實施例?;诒景l(fā)明中的實施例,本領(lǐng)域的技術(shù)人員所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,以便包含一系列單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于那些單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設(shè)備固有的其它單元。
以下分別進行詳細說明。
本發(fā)明應(yīng)用程序的跟蹤分析方法的一個實施例,具體可以應(yīng)用于對應(yīng)用程序的耗時分析中,請參閱圖1所示,本發(fā)明一個實施例提供的應(yīng)用程序的跟蹤分析方法,可以包括如下步驟:
101、根據(jù)包含用C++語言編寫的源代碼的JNI文件夾建立支持本地開發(fā)設(shè)備(NDK,Native Development Kit)編譯的第一性能分析組件,源代碼用于記錄日志以及寫日志文件。
在本發(fā)明實施例中,很多可以實現(xiàn)記錄日志以及寫日志文件的性能分析工具都是用C++編程語言開發(fā)實現(xiàn)的,但是Android系統(tǒng)平臺作為一個真正意義上的開放式運行平臺,卻是以java語言作為應(yīng)用程序開發(fā)語言,并提供了完善的開發(fā)環(huán)境和測試工具集。在運行Android系統(tǒng)平臺的智能終端中安裝有應(yīng)用程序,這些應(yīng)用程序需要在Android系統(tǒng)平臺下進行性能優(yōu)化,從而使應(yīng)用程序可以運行在最佳狀態(tài)下。以C++代碼實現(xiàn)的性能分析工具并沒有相應(yīng)的接口可以直接支持Android系統(tǒng)平臺,這就造成了無法使用這些性能分析工具對Android系統(tǒng)平臺下的應(yīng)用程序進行跟蹤監(jiān)測。為此本發(fā)明中提出對C++編程語言實現(xiàn)的性能分析工具在Android系統(tǒng)平臺下的移植,從而可以實現(xiàn)對Android系統(tǒng)平臺下的應(yīng)用程序的跟蹤監(jiān)測。
在本發(fā)明實施例中,首先獲取到以C++編程語言實現(xiàn)的可記錄日志以及寫日志文件的源代碼,該源代碼的編寫方式是C++語言,并且該源代碼的作用是自己實現(xiàn)記錄日志,以及寫日志文件。本發(fā)明中提供的源代碼可以實現(xiàn)對日志的記錄,從而可以在源代碼執(zhí)行后提取到其日志記錄中記錄的信息。在本發(fā)明的一些實施例中,前述的源代碼可以為C++語言編寫的跟蹤(英名稱tracing)代碼,其中tracing就是實現(xiàn)日志記錄和保存的性能分析工具。進一步的,本發(fā)明中使用的源代碼可以是chrome瀏覽器下開發(fā)完成的tracing,不限定的是,這只是本發(fā)明的一種實現(xiàn)場景,其它場景下,也可以由C++開發(fā)者自行編寫tracing代碼。在本發(fā)明的一些實施例中,本發(fā)明所述的可記錄日志和保存日志文件的源代碼還可以有其它形式,例如trace log等,本發(fā)明不做限定。
在本發(fā)明實施例中,建立的JNI(英文全稱Java Native Interface,中文名稱java本地接口)文件夾具體可以是java編程環(huán)境下的本地文件夾,通過JNI文件夾可以允許java代碼和其他語言的代碼進行交互,在JNI文件中包含有前述的源代碼,在該JNI文件夾的基礎(chǔ)上,本發(fā)明中首先建立第一性能分析組件,第一性能分析組件中包括有前述的JNI文件夾,該JNI文件夾中包含有C++源代碼,第一性能分析組件包括有JNI文件夾,該第一性能分析組件可支持NDK編譯,NDK編譯可以實現(xiàn)對C++源代碼編譯為本地庫文件。
在本發(fā)明的一些實施例中,步驟101中根據(jù)包含用C++語言編寫的源代碼的JNI文件夾建立支持本地開發(fā)設(shè)備NDK編譯的第一性能分析組件,具體可以包括如下步驟:
1011、將用C++語言編寫的源代碼拷貝到JNI文件夾中,得到包含源代碼的JNI文件夾;
1012、將包含源代碼的JNI文件夾保存到第一性能分析組件中。
具體的,可以首先獲取到C++源代碼,C++源代碼首先保存到JNI文件夾下,建立Android工程實現(xiàn)的第一性能分析組件,上述JNI文件夾中的C++源代碼可以保存到第一性能分析組件中,從而生成第一性能分析組件。例如,首先新建一個支持ndk編譯(在工程中有JNI文件夾)的Android工程xxxxtrace,該xxxxtrace即可以表示為第一性能分析組件,然后將把chrome tracing的C++源代碼拷貝到JNI文件夾下。需要說明的是,在前述實施例中,chrome tracing的C++源代碼主要實現(xiàn)把相應(yīng)的日志按照一定的格式寫到文件中,其中對C++源代碼的拷貝過程是可以支持多線程和多進程的并發(fā)操作過程,另外將C++源代碼拷貝到JNI文件夾中,是為了在NDK編譯的時候,生成本地庫文件,即.so文件,詳細說明可參閱后續(xù)內(nèi)容的描述。
102、將第一性能分析組件保存到Android系統(tǒng)平臺下新增加的java文件中,得到第二性能分析組件。
在本發(fā)明實施例中,生成第一性能分析組件之后,由于第一性能分析組件中包括有C++源代碼,因此仍可以認為第一性能分析組件是以C++編程語言實現(xiàn)的函數(shù),Android系統(tǒng)平臺以java語言作為應(yīng)用程序開發(fā)語言,因此仍需要java開發(fā)工具的支持,在Android系統(tǒng)平臺下新增加java文件,其中本發(fā)明中java文件的含義為在Android系統(tǒng)平臺下以java語言的編程要求實現(xiàn)的文件,新生成的java文件除了文件頭屬性之外的必要信息之外,不包含函數(shù)內(nèi)容,前述建立的第一性能分析組件保存到新增加的java文件中,為了便于引述,將保存在java文件中的第一性能分析組件進行重新定義,命名為第二性能分析組件,則在第二性能分析組件中仍需要繼承在第一性能分析組件中的原有內(nèi)容,例如在第二性能分析組件中也包括有C++源代碼,以及JNI文件夾。需要說明的是,第二性能分析組件是以java文件形式輸出的,可以供java程序側(cè)的使用。
在本發(fā)明的一些實施例中,步驟102將第一性能分析組件保存到Android系統(tǒng)平臺下新增加的java文件中,得到第二性能分析組件,具體可以包括如下步驟:
1021、在Android系統(tǒng)平臺的src目錄下增加java文件,java文件包括:供Android系統(tǒng)平臺調(diào)用的多個應(yīng)用程序編程接口(API,Application Programming Interface);
1022、將第一性能分析組件以native函數(shù)的方式定義在java文件中,得到第二性能分析組件。
具體的,在Android系統(tǒng)平臺的src目錄可用于保存源代碼,但是目前的C++源代碼無法直接保存在src目錄下,在src目錄下可先增加一個java文件, 在java文件中通常定義有一種或多種的API以備調(diào)用,各個API是實現(xiàn)不同函數(shù)功能的目標。同時也需要定義原生(英文native)函數(shù),其中native函數(shù)根據(jù)不同函數(shù)功能需要有多種表現(xiàn)形式,native函數(shù)可以實現(xiàn)C++代碼有關(guān)的JNI接口。在得到第一性能分析組件之后,以native函數(shù)的方式保存第一性能分析組件,從而可以得到在java文件中定義得到的第二性能分析組件。
舉例說明如下:在Android系統(tǒng)平臺的src目錄下,增加xxxxtrace.java文件,即第二性能分析組件,在xxxxtrace.java中可定義相關(guān)API,例如begin,end,setTraceEnable,startTrace,stopTrace等,供java側(cè)使用。同時定義跟C++代碼相關(guān)的jni接口,即native函數(shù),如nativeJNIBegin,nativeJNIEnd,nativeJNITraceEnabled,nativeJNIStartTrace,nativeJNIStopTrace等。需要說明的是,在本發(fā)明中從第一性能分析組件得到第二性能分析組件,即需要在src目錄下增加xxxxtrace.java文件,因為第一性能分析組件的核心功能都是c++代碼實現(xiàn),那java側(cè)為了能夠正常使用,就采用JNI,在java側(cè)增加xxxxtrace.java,里面有相應(yīng)的API供java側(cè)調(diào)用,這些API最終會調(diào)用native,即可以通過JNI去調(diào)用C++函數(shù)。
需要說明的是,在本發(fā)明的一些實施例中,步驟102將第一性能分析組件保存到Android系統(tǒng)平臺下新增加的java文件中,得到第二性能分析組件之后,本發(fā)明提供的應(yīng)用程序的跟蹤分析方法,還可以包括如下步驟:
將第二性能分析組件打包為jar形式。
其中,在java的實現(xiàn)場景下,第二性能分析組件為ant腳本,故需要ant腳本輸出jar包,第二性能分析組件會提供出來供第三方使用,若直接輸出源代碼,會不便于管理,另外也可能需要將源代碼保密,這就需要以jar的方式供第三方使用。源代碼可以通過jar包提供給外部使用,因此通過ant腳本把java代碼打包為jar包,得到xxxxtrace.jar。需要說明的是,在本發(fā)明的一些實施例中,使用自實現(xiàn)的Android庫的Android工程中,若在java代碼中使用,還需要xxxxtrace.jar參與編譯,但源代碼不參與打包。
103、使用Android.mk腳本將第二性能分析組件編譯為本地庫文件形式的第三性能分析組件。
在本發(fā)明實施例中,生成第二性能分析組件之后,先編寫出Android.mk 腳本,Android系統(tǒng)平臺以java語言作為應(yīng)用程序開發(fā)語言,第二性能分析組件中包括有可實現(xiàn)記錄日志和寫日志文件的源代碼,第二性能分析組件可以使用Android.mk腳本在NDK編譯工具的編譯下來編譯第二性能分析組件,為了便于引述,將第二性能分析組件進行重新定義,命名為第三性能分析組件,則在第三性能分析組件中仍需要繼承在第一性能分析組件、第二性能分析組件中的原有內(nèi)容,例如源代碼。使用NDK編譯工具的編譯完成后輸出本地庫文件形式的第三性能分析組件,該第三性能分析組件為.so文件,可以被Android系統(tǒng)平臺直接調(diào)用。需要說明的是,本發(fā)明中第三性能分析組件為動態(tài)數(shù)據(jù)庫文件,動態(tài)數(shù)據(jù)庫文件是在應(yīng)用程序運行時需要的時候才動態(tài)加載到應(yīng)用程序中,用以支持應(yīng)用程序。動態(tài)數(shù)據(jù)庫文件會保存在lib下,并且動態(tài)數(shù)據(jù)庫文件不會一直在應(yīng)用程序中,這會減少應(yīng)用程序的大小,動態(tài)數(shù)據(jù)庫文件只需要運行時匹配下就可以自動執(zhí)行。
在本發(fā)明的一些實施例中,步驟103使用Android.mk腳本將第二性能分析組件編譯為本地庫文件形式的第三性能分析組件,具體可以包括如下步驟:
1031、在Android系統(tǒng)平臺下編寫Android.mk腳本;
1032、使用Android.mk腳本在Android系統(tǒng)平臺的lib/armeabi下生成本地庫文件;
1033、對第二性能分析組件進行編譯,輸出編譯后的第二性能分析組件到本地庫文件,得到第三性能分析組件。
其中,首先編寫Android.mk腳本,在Android系統(tǒng)平臺里面,要生成庫文件,需要通過Android自己的腳本Android.mk的方式來生成,即按照Android系統(tǒng)平臺自己的生成規(guī)則。生成lib/armeabi下的本地庫文件之后,使用NDK編譯工具對第二性能分析組件進行編譯,執(zhí)行Android.mk后,.so文件最終會生成在lib/armeabi下,這個是Android系統(tǒng)平臺的規(guī)則。舉例說明如下,在JNI文件夾下,通過動態(tài)JNI方式實現(xiàn)JNI相關(guān)的接口,編寫Android.mk,最終在lib/armeabi下生成libxxxxtrace.so(即第三性能分析組件),通過JNI接口可以使用so中的函數(shù)。
104、在應(yīng)用程序(APP,Application)運行時將第三性能分析組件動態(tài)加載到APP中,由第三性能分析組件跟蹤APP,得到APP的運行耗時。
在本發(fā)明實施例中,第三性能分析組件是動態(tài)數(shù)據(jù)庫文件,只需要在APP運行時動態(tài)加載到APP中,而無需保存在APP的原有程序中,APP運行時由第三性能分析組件來跟蹤該APP,從而能夠監(jiān)測出該APP的運行耗時,根據(jù)監(jiān)測得到的運行耗時確定是否進行性能優(yōu)化,以及該怎樣優(yōu)化。
在本發(fā)明的一些實施例中,步驟104在應(yīng)用程序APP運行時將第三性能分析組件動態(tài)加載到APP中之前,本發(fā)明提供的應(yīng)用程序的跟蹤分析方法還可以包括如下步驟:
若APP為C++代碼,在第三性能分析組件的文件頭上加入函數(shù)宏。
其中,函數(shù)宏代表了一個函數(shù)名字,加入函數(shù)宏其實就是一個函數(shù)調(diào)用,函數(shù)宏加在第三性能分析組件的文件頭中,舉例說明如下:基于JNI的Android工程中,若在native代碼(主要指c++代碼)中使用,需要按照下面的方式:
引入#include"xxxxTrace/base/debug/trace_controller.h"
即,需要在待性能優(yōu)化的APP開始處加上TRACE_EVENT0("Tag","函數(shù)名")。需要說明的是,這個宏具體為一段C++代碼,可以取得函數(shù)名字等參數(shù),并且使用作用域特性來判斷函數(shù)退出,在此基礎(chǔ)上計算函數(shù)調(diào)用時間。
接下來以一個應(yīng)用場景為例對本發(fā)明進行說明,普通的Android工程中,把xxxxtrace.jar放到lib目錄下,把libxxxxtrace.so放到lib/armeabi下。在java代碼中,核心代碼結(jié)構(gòu)如下:
xxxxtrace.setTraceEnable(true);
xxxxtrace.startTrace();
xxxxtrace.begin();
Your code;
xxxxtrace.end();
xxxxtrace.stopTrace();
如果要在其他代碼處加性能跟蹤代碼,那么直接執(zhí)行如下代碼即可:
xxxxtrace.begin();
Your code;
xxxxtrace.end();
其中,Your code為原始的源代碼,就是需要分析耗時的函數(shù)的地方。
接下來以chrome tracing的實現(xiàn)過程為例進行性能分析,首先導(dǎo)出.data文件,例如存儲器中保存的tracing.data,在chrome://tracing打開,請參閱如圖2所示,圖2為本發(fā)明實施例提供的在chrome中對應(yīng)用程序進行跟蹤分析的示意圖。在C層利用C++面向?qū)ο蟮淖饔糜騺砀櫤瘮?shù)耗時,在java層利用成對的函數(shù)調(diào)用來跟蹤函數(shù)耗時,它把數(shù)據(jù)按照json格式保持起來,然后在chrome瀏覽器中展示出來,可以用來分析應(yīng)用程序的功能耗時。例如,以進程11548為例,圖2中用“twolibs.oncreate”、“myAdd”、“first”各自所在的陰影長度來表示各自的函數(shù)耗時。因為本發(fā)明在必要的地方加了traceing相關(guān)代碼,它可以完成函數(shù)耗時計算,并記錄在日志中??梢钥吹胶瘮?shù)的耗時及其中央處理器(CPU,Central Processing Unit)調(diào)度,能夠及時分析出函數(shù)耗時,對于耗時大的函數(shù)可以進行部分實現(xiàn)優(yōu)化和CPU調(diào)度優(yōu)化。
通過以上實施例對本發(fā)明實施例的描述可知,首先根據(jù)包含用C++語言編寫的源代碼的JNI文件夾建立支持本地開發(fā)設(shè)備NDK編譯的第一性能分析組件,源代碼用于記錄日志以及寫日志文件,然后將第一性能分析組件保存到Android系統(tǒng)平臺下新增加的java文件中,得到第二性能分析組件,接下來使用Android.mk腳本將第二性能分析組件編譯為本地庫文件形式的第三性能分析組件,最后在應(yīng)用程序APP運行時將第三性能分析組件動態(tài)加載到APP中,由第三性能分析組件跟蹤APP,得到APP的運行耗時。由于本發(fā)明中源代碼是用C++語言編寫,第一性能分析組件包括有JNI文件夾,第二性能分析組件是以Android系統(tǒng)平臺下編寫的java文件存在的,通過第二性能分析組件的編譯得到了本地庫文件,即第三性能分析組件為.so文件,由于第三性能分析組件是動態(tài)庫,可以在APP運行時動態(tài)加載,可以完成第三性能分析組件和APP的自動打包,APP的運行過程可以由第三性能分析組件實時跟蹤,從而可以準確分析出APP的運行耗時,為下一步對耗時大的APP進行優(yōu)化打下基礎(chǔ)。另外本發(fā)明中使用了Android系統(tǒng)平臺最基本的增加java文件和編寫Android.mk腳本,這對于任何版本的Android系統(tǒng)平臺都可以適用,實現(xiàn)各種版本的Android平臺下的性能跟蹤分析,并且通過對包含C++源代碼的JNI文件夾的保存、編譯,從而得到本地庫文件,實現(xiàn)對C++代碼的支持。
需要說明的是,對于前述的各方法實施例,為了簡單描述,故將其都表 述為一系列的動作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動作順序的限制,因為依據(jù)本發(fā)明,某些步驟可以采用其他順序或者同時進行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定是本發(fā)明所必須的。
為便于更好的實施本發(fā)明實施例的上述方案,下面還提供用于實施上述方案的相關(guān)裝置。
請參閱圖3-a所示,本發(fā)明實施例提供的一種應(yīng)用程序的跟蹤分析裝置300,可以包括:第一生成模塊301、第二生成模塊302、編譯模塊303、跟蹤分析模塊304,其中,
第一生成模塊301,用于根據(jù)包含用C++語言編寫的源代碼的JNI文件夾建立支持本地開發(fā)設(shè)備NDK編譯的第一性能分析組件,所述源代碼用于記錄日志以及寫日志文件;
第二生成模塊302,用于將所述第一性能分析組件保存到Android系統(tǒng)平臺下新增加的java文件中,得到第二性能分析組件;
編譯模塊303,用于使用Android.mk腳本將所述第二性能分析組件編譯為本地庫文件形式的第三性能分析組件;
跟蹤分析模塊304,用于在應(yīng)用程序APP運行時將所述第三性能分析組件動態(tài)加載到所述APP中,由所述第三性能分析組件跟蹤所述APP,得到所述APP的運行耗時。
在本發(fā)明的一些實施例中,所述源代碼為C++語言編寫的跟蹤tracing代碼。
在本發(fā)明的一些實施例中,所述第一生成模塊301,具體用于將用C++語言編寫的源代碼拷貝到JNI文件夾中,得到包含所述源代碼的JNI文件夾;將包含所述源代碼的JNI文件夾保存到第一性能分析組件中。
在本發(fā)明的一些實施例中,所述第二生成模塊302,具體用于在Android系統(tǒng)平臺的src目錄下增加java文件,所述java文件包括:供Android系統(tǒng)平臺調(diào)用的多個應(yīng)用程序編程接口API;將所述第一性能分析組件以native函數(shù)的方式定義在所述java文件中,得到第二性能分析組件。
在本發(fā)明的一些實施例中,請參閱如圖3-b所示,所述應(yīng)用程序的跟蹤分 析裝置300,還包括:打包模塊305,用于所述第二生成模塊302將所述第一性能分析組件保存到Android系統(tǒng)平臺下新增加的java文件中,得到第二性能分析組件之后,將所述第二性能分析組件打包為jar形式。
在本發(fā)明的一些實施例中,所述編譯模塊303,具體用于在Android系統(tǒng)平臺下編寫Android.mk腳本;使用所述Android.mk腳本在所述Android系統(tǒng)平臺的lib/armeabi下生成本地庫文件;對所述第二性能分析組件進行編譯,輸出編譯后的第二性能分析組件到所述本地庫文件,得到第三性能分析組件。
在本發(fā)明的一些實施例中,請參閱如圖3-c所示,所述應(yīng)用程序的跟蹤分析裝置300,還包括:增加模塊306,用于所述跟蹤分析模塊304在應(yīng)用程序APP運行時將所述第三性能分析組件動態(tài)加載到所述APP中之前,若所述APP為C++代碼,在所述第三性能分析組件的文件頭上加入函數(shù)宏。
通過以上實施例對本發(fā)明實施例的描述可知,首先根據(jù)包含用C++語言編寫的源代碼的JNI文件夾建立支持本地開發(fā)設(shè)備NDK編譯的第一性能分析組件,源代碼用于記錄日志以及寫日志文件,然后將第一性能分析組件保存到Android系統(tǒng)平臺下新增加的java文件中,得到第二性能分析組件,接下來使用Android.mk腳本將第二性能分析組件編譯為本地庫文件形式的第三性能分析組件,最后在應(yīng)用程序APP運行時將第三性能分析組件動態(tài)加載到APP中,由第三性能分析組件跟蹤APP,得到APP的運行耗時。由于本發(fā)明中源代碼是用C++語言編寫,第一性能分析組件包括有JNI文件夾,第二性能分析組件是以Android系統(tǒng)平臺下編寫的java文件存在的,通過第二性能分析組件的編譯得到了本地庫文件,即第三性能分析組件為.so文件,由于第三性能分析組件是動態(tài)庫,可以在APP運行時動態(tài)加載,可以完成第三性能分析組件和APP的自動打包,APP的運行過程可以由第三性能分析組件實時跟蹤,從而可以準確分析出APP的運行耗時,為下一步對耗時大的APP進行優(yōu)化打下基礎(chǔ)。另外本發(fā)明中使用了Android系統(tǒng)平臺最基本的增加java文件和編寫Android.mk腳本,這對于任何版本的Android系統(tǒng)平臺都可以適用,實現(xiàn)各種版本的Android平臺下的性能跟蹤分析,并且通過對包含C++源代碼的JNI文件夾的保存、編譯,從而得到本地庫文件,實現(xiàn)對C++代碼的支持。
本發(fā)明實施例還提供了另一種終端,如圖4所示,為了便于說明,僅示 出了與本發(fā)明實施例相關(guān)的部分,具體技術(shù)細節(jié)未揭示的,請參照本發(fā)明實施例方法部分。該終端可以為包括手機、平板電腦、PDA(Personal Digital Assistant,個人數(shù)字助理)、POS(Point of Sales,銷售終端)、車載電腦等任意終端設(shè)備,以終端為手機為例:
圖4示出的是與本發(fā)明實施例提供的終端相關(guān)的手機的部分結(jié)構(gòu)的框圖。參考圖4,手機包括:射頻(Radio Frequency,RF)電路410、存儲器420、輸入單元430、顯示單元440、傳感器450、音頻電路460、無線保真(wireless fidelity,WiFi)模塊470、處理器480、以及電源490等部件。本領(lǐng)域技術(shù)人員可以理解,圖4中示出的手機結(jié)構(gòu)并不構(gòu)成對手機的限定,可以包括比圖示更多或更少的部件,或者組合某些部件,或者不同的部件布置。
下面結(jié)合圖4對手機的各個構(gòu)成部件進行具體的介紹:
RF電路410可用于收發(fā)信息或通話過程中,信號的接收和發(fā)送,特別地,將基站的下行信息接收后,給處理器480處理;另外,將設(shè)計上行的數(shù)據(jù)發(fā)送給基站。通常,RF電路410包括但不限于天線、至少一個放大器、收發(fā)信機、耦合器、低噪聲放大器(Low Noise Amplifier,LNA)、雙工器等。此外,RF電路410還可以通過無線通信與網(wǎng)絡(luò)和其他設(shè)備通信。上述無線通信可以使用任一通信標準或協(xié)議,包括但不限于全球移動通訊系統(tǒng)(Global System of Mobile communication,GSM)、通用分組無線服務(wù)(General Packet Radio Service,GPRS)、碼分多址(Code Division Multiple Access,CDMA)、寬帶碼分多址(Wideband Code Division Multiple Access,WCDMA)、長期演進(Long Term Evolution,LTE)、電子郵件、短消息服務(wù)(Short Messaging Service,SMS)等。
存儲器420可用于存儲軟件程序以及模塊,處理器480通過運行存儲在存儲器420的軟件程序以及模塊,從而執(zhí)行手機的各種功能應(yīng)用以及數(shù)據(jù)處理。存儲器420可主要包括存儲程序區(qū)和存儲數(shù)據(jù)區(qū),其中,存儲程序區(qū)可存儲操作系統(tǒng)、至少一個功能所需的應(yīng)用程序(比如聲音播放功能、圖像播放功能等)等;存儲數(shù)據(jù)區(qū)可存儲根據(jù)手機的使用所創(chuàng)建的數(shù)據(jù)(比如音頻數(shù)據(jù)、電話本等)等。此外,存儲器420可以包括高速隨機存取存儲器,還可以包括非易失性存儲器,例如至少一個磁盤存儲器件、閃存器件、或其他 易失性固態(tài)存儲器件。
輸入單元430可用于接收輸入的數(shù)字或字符信息,以及產(chǎn)生與手機的用戶設(shè)置以及功能控制有關(guān)的鍵信號輸入。具體地,輸入單元430可包括觸控面板431以及其他輸入設(shè)備432。觸控面板431,也稱為觸摸屏,可收集用戶在其上或附近的觸摸操作(比如用戶使用手指、觸筆等任何適合的物體或附件在觸控面板431上或在觸控面板431附近的操作),并根據(jù)預(yù)先設(shè)定的程式驅(qū)動相應(yīng)的連接裝置。可選的,觸控面板431可包括觸摸檢測裝置和觸摸控制器兩個部分。其中,觸摸檢測裝置檢測用戶的觸摸方位,并檢測觸摸操作帶來的信號,將信號傳送給觸摸控制器;觸摸控制器從觸摸檢測裝置上接收觸摸信息,并將它轉(zhuǎn)換成觸點坐標,再送給處理器480,并能接收處理器480發(fā)來的命令并加以執(zhí)行。此外,可以采用電阻式、電容式、紅外線以及表面聲波等多種類型實現(xiàn)觸控面板431。除了觸控面板431,輸入單元430還可以包括其他輸入設(shè)備432。具體地,其他輸入設(shè)備432可以包括但不限于物理鍵盤、功能鍵(比如音量控制按鍵、開關(guān)按鍵等)、軌跡球、鼠標、操作桿等中的一種或多種。
顯示單元440可用于顯示由用戶輸入的信息或提供給用戶的信息以及手機的各種菜單。顯示單元440可包括顯示面板441,可選的,可以采用液晶顯示器(Liquid Crystal Display,LCD)、有機發(fā)光二極管(Organic Light-Emitting Diode,OLED)等形式來配置顯示面板441。進一步的,觸控面板431可覆蓋顯示面板441,當觸控面板431檢測到在其上或附近的觸摸操作后,傳送給處理器480以確定觸摸事件的類型,隨后處理器480根據(jù)觸摸事件的類型在顯示面板441上提供相應(yīng)的視覺輸出。雖然在圖4中,觸控面板431與顯示面板441是作為兩個獨立的部件來實現(xiàn)手機的輸入和輸入功能,但是在某些實施例中,可以將觸控面板431與顯示面板441集成而實現(xiàn)手機的輸入和輸出功能。
手機還可包括至少一種傳感器450,比如光傳感器、運動傳感器以及其他傳感器。具體地,光傳感器可包括環(huán)境光傳感器及接近傳感器,其中,環(huán)境光傳感器可根據(jù)環(huán)境光線的明暗來調(diào)節(jié)顯示面板441的亮度,接近傳感器可在手機移動到耳邊時,關(guān)閉顯示面板441和/或背光。作為運動傳感器的一種, 加速計傳感器可檢測各個方向上(一般為三軸)加速度的大小,靜止時可檢測出重力的大小及方向,可用于識別手機姿態(tài)的應(yīng)用(比如橫豎屏切換、相關(guān)游戲、磁力計姿態(tài)校準)、振動識別相關(guān)功能(比如計步器、敲擊)等;至于手機還可配置的陀螺儀、氣壓計、濕度計、溫度計、紅外線傳感器等其他傳感器,在此不再贅述。
音頻電路460、揚聲器461,傳聲器462可提供用戶與手機之間的音頻接口。音頻電路460可將接收到的音頻數(shù)據(jù)轉(zhuǎn)換后的電信號,傳輸?shù)綋P聲器461,由揚聲器461轉(zhuǎn)換為聲音信號輸出;另一方面,傳聲器462將收集的聲音信號轉(zhuǎn)換為電信號,由音頻電路460接收后轉(zhuǎn)換為音頻數(shù)據(jù),再將音頻數(shù)據(jù)輸出處理器480處理后,經(jīng)RF電路410以發(fā)送給比如另一手機,或者將音頻數(shù)據(jù)輸出至存儲器420以便進一步處理。
WiFi屬于短距離無線傳輸技術(shù),手機通過WiFi模塊470可以幫助用戶收發(fā)電子郵件、瀏覽網(wǎng)頁和訪問流式媒體等,它為用戶提供了無線的寬帶互聯(lián)網(wǎng)訪問。雖然圖4示出了WiFi模塊470,但是可以理解的是,其并不屬于手機的必須構(gòu)成,完全可以根據(jù)需要在不改變發(fā)明的本質(zhì)的范圍內(nèi)而省略。
處理器480是手機的控制中心,利用各種接口和線路連接整個手機的各個部分,通過運行或執(zhí)行存儲在存儲器420內(nèi)的軟件程序和/或模塊,以及調(diào)用存儲在存儲器420內(nèi)的數(shù)據(jù),執(zhí)行手機的各種功能和處理數(shù)據(jù),從而對手機進行整體監(jiān)控。可選的,處理器480可包括一個或多個處理單元;優(yōu)選的,處理器480可集成應(yīng)用處理器和調(diào)制解調(diào)處理器,其中,應(yīng)用處理器主要處理操作系統(tǒng)、用戶界面和應(yīng)用程序等,調(diào)制解調(diào)處理器主要處理無線通信。可以理解的是,上述調(diào)制解調(diào)處理器也可以不集成到處理器480中。
手機還包括給各個部件供電的電源490(比如電池),優(yōu)選的,電源可以通過電源管理系統(tǒng)與處理器480邏輯相連,從而通過電源管理系統(tǒng)實現(xiàn)管理充電、放電、以及功耗管理等功能。
盡管未示出,手機還可以包括攝像頭、藍牙模塊等,在此不再贅述。
在本發(fā)明實施例中,該終端所包括的處理器480還具有控制執(zhí)行以上由終端執(zhí)行的應(yīng)用程序的跟蹤分析方法流程。
另外需說明的是,以上所描述的裝置實施例僅僅是示意性的,其中所述 作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。另外,本發(fā)明提供的裝置實施例附圖中,模塊之間的連接關(guān)系表示它們之間具有通信連接,具體可以實現(xiàn)為一條或多條通信總線或信號線。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
通過以上的實施方式的描述,所屬領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件的方式來實現(xiàn),當然也可以通過專用硬件包括專用集成電路、專用CPU、專用存儲器、專用元器件等來實現(xiàn)。一般情況下,凡由計算機程序完成的功能都可以很容易地用相應(yīng)的硬件來實現(xiàn),而且,用來實現(xiàn)同一功能的具體硬件結(jié)構(gòu)也可以是多種多樣的,例如模擬電路、數(shù)字電路或?qū)S秒娐返?。但是,對本發(fā)明而言更多情況下軟件程序?qū)崿F(xiàn)是更佳的實施方式。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在可讀取的存儲介質(zhì)中,如計算機的軟盤,U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述的方法。
綜上所述,以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照上述實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當理解:其依然可以對上述各實施例所記載的技術(shù)方案進行修改,或者對其中部分技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的精神和范圍。