androidAPK應(yīng)用安裝過(guò)程以及默認(rèn)安裝路徑_第1頁(yè)
androidAPK應(yīng)用安裝過(guò)程以及默認(rèn)安裝路徑_第2頁(yè)
androidAPK應(yīng)用安裝過(guò)程以及默認(rèn)安裝路徑_第3頁(yè)
androidAPK應(yīng)用安裝過(guò)程以及默認(rèn)安裝路徑_第4頁(yè)
androidAPK應(yīng)用安裝過(guò)程以及默認(rèn)安裝路徑_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

/""應(yīng)用安裝過(guò)程以及默認(rèn)安裝路徑

分類:

一:安裝過(guò)程是類似或的文件格式。通過(guò)將文件直接傳到模擬器或手機(jī)中執(zhí)行即可安裝。應(yīng)用安裝有如下四種方式

1.

系統(tǒng)應(yīng)用安裝――開(kāi)機(jī)時(shí)完成,沒(méi)有安裝界面

2.

網(wǎng)絡(luò)下載應(yīng)用安裝――通過(guò)應(yīng)用完成,沒(méi)有安裝界面

3.

工具安裝――沒(méi)有安裝界面。

4.

第三方應(yīng)用安裝――通過(guò)卡里的文件安裝,有安裝界面,由應(yīng)用處理安裝及卸載過(guò)程的界面。

應(yīng)用安裝的流程及路徑

應(yīng)用安裝涉及到如下幾個(gè)目錄:

系統(tǒng)自帶的應(yīng)用程序,無(wú)法刪除

用戶程序安裝的目錄,有刪除權(quán)限。

安裝時(shí)把文件復(fù)制到此目錄

存放應(yīng)用程序的數(shù)據(jù)

將中的文件安裝到目錄下(文件是虛擬機(jī)的可執(zhí)行文件,其大小約為原始文件大小的四分之一)

安裝過(guò)程:復(fù)制安裝包到目錄下,解壓并掃描安裝包,把文件(字節(jié)碼)保存到目錄,并目錄下創(chuàng)建對(duì)應(yīng)的應(yīng)用數(shù)據(jù)目錄。

卸載過(guò)程:刪除安裝過(guò)程中在上述三個(gè)目錄下創(chuàng)建的文件及目錄。

一、系統(tǒng)應(yīng)用安裝:

處理各種應(yīng)用的安裝,卸載,管理等工作,開(kāi)機(jī)時(shí)由啟動(dòng)此服務(wù)

(源文件路徑:\\\\\\\\)

服務(wù)啟動(dòng)的流程:

1.首先掃描安裝“\”目錄下的包

1.(,

|);

2.第二步掃描安裝“\”目錄下的各個(gè)系統(tǒng)應(yīng)用

(,);

3.第三步掃描“\”目錄,即用戶安裝的第三方應(yīng)用

(,0,);

4.第四步掃描"\"目錄,即安裝保護(hù)的文件(目前沒(méi)有遇到過(guò)此類的應(yīng)用)。

(,0,|);

安裝應(yīng)用的過(guò)程

1(,,)遍歷安裝指定目錄下的文件

2(,

,,,

)

安裝文件

3(

,,,

,,)

通過(guò)解析安裝包獲取到安裝包的信息結(jié)構(gòu)

4(,

);

實(shí)現(xiàn)文件復(fù)制的安裝過(guò)程

(源文件路徑:\\\\)

二、從上下載應(yīng)用:

應(yīng)用需要使用賬戶登錄才可以使用,選擇某一應(yīng)用后,開(kāi)始下載安裝包,此過(guò)程中,在手機(jī)的信號(hào)區(qū)有進(jìn)度條提示,下載完成后,會(huì)自動(dòng)調(diào)用的接口安裝,調(diào)用接口如下:

(,)

:文件下載完成后保存的路徑

:處理返回的安裝結(jié)果

:安裝的參數(shù),從上下載的應(yīng)用,安裝參數(shù)為()

接口函數(shù)的安裝過(guò)程:

1(

,,,

)

:安裝完成后此名稱保存在里,一般為,不是關(guān)鍵參數(shù)

2=(,);

把文件復(fù)制到臨時(shí)目錄下的臨時(shí)文件

3(,

,,

,)

解析臨時(shí)文件,獲取應(yīng)用包名=(

(),0);

4.判斷如果帶有參數(shù),則調(diào)用(,

,

,,

,,,

)

5.如果沒(méi)有,則調(diào)用(,

,

,,

,,,

);

6(

,,,

,,)

以后的流程,與開(kāi)機(jī)時(shí)的應(yīng)用安裝流程相同。

三、從工具安裝

()是自帶的管理設(shè)備的工具,通過(guò)命令行的方式也可以為手機(jī)或模擬器安裝應(yīng)用,其入口函數(shù)源文件為

(源文件路徑:\\\\\\\\\\)

命令行的形式為<>,還可以帶安裝參數(shù)如:""""""""

函數(shù)()中判斷參數(shù)

""――

""——

""——

""——

我們常用的參數(shù)為,表示覆蓋安裝手機(jī)上已安裝的同名應(yīng)用。從上下載的應(yīng)用,也是直接傳入這個(gè)參數(shù)安裝的。

與調(diào)用同樣的接口完成應(yīng)用安裝。

(,)

四、第三方應(yīng)用安裝――通過(guò)卡里的文件安裝

把安裝包保存在卡中,從手機(jī)里訪問(wèn)卡中的安裝包,點(diǎn)擊就可以啟動(dòng)安裝界面,系統(tǒng)應(yīng)用處理這種方式下的安裝及卸載界面流程,如下圖:

負(fù)責(zé)解析包,判斷是否是可用的文件

創(chuàng)建臨時(shí)安裝文件

并啟動(dòng)安裝確認(rèn)界面,列出解析得到的該應(yīng)用基本信息。如果手機(jī)上已安裝有同名應(yīng)用,則需要用戶確認(rèn)是否要替換安裝。

確認(rèn)安裝后,啟動(dòng),調(diào)用安裝接口完成安裝。

(,);

其它:

1.的內(nèi)部類實(shí)現(xiàn)了監(jiān)聽(tīng)目錄的功能:當(dāng)把某個(gè)拖到目錄下時(shí),可以直接調(diào)用完成安裝。

2.手機(jī)數(shù)據(jù)區(qū)目錄“”文件中,包含了手機(jī)上所有已安裝應(yīng)用的基本信息,如安裝路徑,申請(qǐng)的等信息。二:更改默認(rèn)安裝路徑

如果你是一個(gè)應(yīng)用開(kāi)發(fā)者,沒(méi)用系統(tǒng)全套代碼,你只想更改你的的默認(rèn)安裝路徑的話,可以按下面方法來(lái)更改:在文件標(biāo)簽中添加屬性這個(gè)屬性設(shè)置的是默認(rèn)安裝位置,共有三個(gè)有效值,、、對(duì)應(yīng)表表示自動(dòng),由系統(tǒng)決定安裝位置,如果系統(tǒng)手機(jī)內(nèi)存足夠,默認(rèn)安裝在手機(jī)內(nèi)存里,如果手機(jī)內(nèi)在不夠,則會(huì)安裝在T卡內(nèi)安裝在手機(jī)內(nèi)存安裝在外部存儲(chǔ)中012,.

<"""""""1""1.0">如果你是一個(gè)手機(jī)方案開(kāi)發(fā)者,能改層的代碼,你希望下載到手機(jī)里的都默認(rèn)優(yōu)先安裝到T卡的話,可以按下面方法更改:在文件里,將

這個(gè)值,改為,就可以了.默認(rèn)下載就會(huì)下到T卡里卡不存在或者滿了時(shí),才會(huì)下到手機(jī)內(nèi)部.或者如果在應(yīng)用的里,指定了屬性為手機(jī)內(nèi)部存儲(chǔ)的話,是會(huì)存在手機(jī)內(nèi)部的.沒(méi)指這定的話這個(gè)值指定什么,就下到哪里安裝在T卡里的應(yīng)用,有幾個(gè)缺點(diǎn):

1:因?yàn)檠b載T卡是在系統(tǒng)啟動(dòng)完成后,才開(kāi)始裝載的.所以如果應(yīng)用裝在T卡里的話,那么它是收不到開(kāi)機(jī)啟動(dòng)完成的這個(gè)廣播的

2:如果T卡損壞或者T卡撥出來(lái)了,那么裝在T卡里的應(yīng)用是啟動(dòng)不了的.系統(tǒng)應(yīng)用安裝的詳細(xì)過(guò)程,老羅有篇文章寫(xiě)得很透徹,這里引用下:系統(tǒng)在啟動(dòng)的過(guò)程中,會(huì)啟動(dòng)一個(gè)應(yīng)用程序管理服務(wù),這個(gè)服務(wù)負(fù)責(zé)掃描系統(tǒng)中特定的目錄,找到里面的應(yīng)用程序文件,即以為后綴的文件,然后對(duì)這些文件進(jìn)解析,得到應(yīng)用程序的相關(guān)信息,完成應(yīng)用程序的安裝過(guò)程,本文將詳細(xì)分析這個(gè)過(guò)程。

應(yīng)用程序管理服務(wù)安裝應(yīng)用程序的過(guò)程,其實(shí)就是解析析應(yīng)用程序配置文件的過(guò)程,并從里面得到得到應(yīng)用程序的相關(guān)信息,例如得到應(yīng)用程序的組件、、和等信息,有了這些信息后,通過(guò)這個(gè)服務(wù),我們就可以在系統(tǒng)中正常地使用這些應(yīng)用程序了。

應(yīng)用程序管理服務(wù)是系統(tǒng)啟動(dòng)的時(shí)候由組件啟動(dòng)的,啟后它就會(huì)執(zhí)行應(yīng)用程序安裝的過(guò)程,因此,本文將從啟動(dòng)服務(wù)的過(guò)程開(kāi)始分析系統(tǒng)中的應(yīng)用程序安裝的過(guò)程。

應(yīng)用程序管理服務(wù)從啟動(dòng)到安裝應(yīng)用程序的過(guò)程如下圖所示:

下面我們具體分析每一個(gè)步驟。

1.

這個(gè)函數(shù)定義在文件中:[]

""\o""""\o""

{

1([]

);

([]

)

{

1();

}

}

組件是由進(jìn)程負(fù)責(zé)啟動(dòng)的,啟動(dòng)的時(shí)候就會(huì)調(diào)用它的函數(shù),這個(gè)函數(shù)主要調(diào)用了方法1來(lái)做一些系統(tǒng)初始化的工作。

2.1

這個(gè)函數(shù)是一個(gè)方法,實(shí)現(xiàn)在

文件中:[]

""\o""""\o""

{

"C"

();

1(*

,

)

{

();

}

/*

*

.

*/

[]

=

{

/*

,

,

*/

{

"1",

"([;)V",

(*)

1

},

};

(*

)

{

(,

"",

,

());

}

};

這個(gè)函數(shù)很簡(jiǎn)單,只是調(diào)用了函數(shù)來(lái)進(jìn)一步執(zhí)行操作。

3.

函數(shù)實(shí)現(xiàn)在庫(kù)中,源代碼位于文件中:[]

""\o""""\o""

"C"

()

{

("

()");

<>

(());

<>

=

();

(":

\n",

());

<>

=

();

>()->(,

(),

0);

[];

("",

,

"1");

((,

"1")

0)

{

();

}

();

,

't

,

(>())

{

();

();

();

();

}

.

.

's

(),

.

("

:

.\n");

*

=

();

("

:

.\n");

>("",

"2");

,

.

,

.

(>())

{

("

:

.\n");

()->();

()->();

("

:

.\n");

}

;

}

這個(gè)函數(shù)首先會(huì)初始化、、、、和這幾個(gè)服務(wù),然后就通過(guò)系統(tǒng)全局唯一的實(shí)例變量的來(lái)調(diào)用的2函數(shù)了。關(guān)于這個(gè)實(shí)例變量的相關(guān)資料,可能參考前面一篇文章""應(yīng)用程序進(jìn)程啟動(dòng)過(guò)程的源代碼分析一文。

4.

這個(gè)函數(shù)定義在文件中:[]

""\o""""\o""/*

*

a

.

*/

(

*

,

*

)

{

*

;

;

;

=

();

(

)

;

=

(,

);

(

)

{

(":

''\n",

);

;

}

=

>(,

,

"()V");

(

)

{

(":

\n",

,

);

;

}

>(,

);

;

}

這個(gè)函數(shù)調(diào)用由參數(shù)指定的類的靜態(tài)成員函數(shù),這個(gè)靜態(tài)成員函數(shù)是由參數(shù)指定的。上面?zhèn)鬟M(jìn)來(lái)的參數(shù)的值為"",而參數(shù)的值為"2",因此,接下來(lái)就會(huì)調(diào)用類的2函數(shù)了。

5.

2

這個(gè)函數(shù)定義在文件中:[]

""\o""""\o""

{

2()

{

(,

"

!");

=

();

("");

();

}

}

這個(gè)函數(shù)創(chuàng)建了一個(gè)線程,服務(wù)就是這個(gè)線程中啟動(dòng)的了。這里調(diào)用了實(shí)例的函數(shù)之后,下面就會(huì)執(zhí)行這個(gè)實(shí)例的函數(shù)了。

6.

這個(gè)函數(shù)定義在文件中:[]

""\o""""\o""

{

()

{

=

;

...

{

(,

"

");

=

(,

);

}

(

e)

{

("",

"

",

e);

}

}

}

這個(gè)函數(shù)除了啟動(dòng)服務(wù)之外,還啟動(dòng)了其它很多的服務(wù),例如在前面學(xué)習(xí)和的幾篇文章中經(jīng)??吹降姆?wù),有興趣的讀者可以自己研究一下。

7.

這個(gè)函數(shù)定義在文件中:[]

""\o""""\o""

{

(

,

)

{

m

=

(,

);

("",

m);

m;

}

}

這個(gè)函數(shù)創(chuàng)建了一個(gè)服務(wù)實(shí)例,然后把這個(gè)服務(wù)添加到中去,是系統(tǒng)進(jìn)程間通信機(jī)制的守護(hù)進(jìn)程,負(fù)責(zé)管理系統(tǒng)中的對(duì)象,具體可以參考""淺談成為進(jìn)程間通信()機(jī)制守護(hù)進(jìn)程之路一文。

在創(chuàng)建這個(gè)服務(wù)實(shí)例時(shí),會(huì)在類的構(gòu)造函數(shù)中開(kāi)始執(zhí)行安裝應(yīng)用程序的過(guò)程:[]

""\o""""\o""

{

(

,

)

{

()

{

()

{

=

();

=

(,

"");

=

(,

"");

=

(,

"");

=

((),

"");

=

(,

"");

(

).

=

(

(),

,

);

();

(,

|

,

|

,

0);

.

=

((),

"");

=

(

(),

,

);

();

(,

|

,

,

0);

.

=

("");

=

(

(),

,

);

();

(,

|

,

,

0);

=

(

(),

,

);

();

(,

0,

,

0);

=

(

(),

,

);

();

(,

,

,

0);

}

}

}

}

這里會(huì)調(diào)用函數(shù)來(lái)掃描移動(dòng)設(shè)備上的下面這五個(gè)目錄中的文件:

8.

這個(gè)函數(shù)定義在文件中:[]

""\o""""\o""

{

(

,

,

,

)

{

[]

=

();

i;

(0;

i<;

)

{

=

(,

[i]);

(([i]))

{

's

;

}

=

(,

,

,

);

't

.

(

(

&

)

0

)

{

(,

"

"

+

);

();

}

}

}

}

對(duì)于目錄中的每一個(gè)文件,如果是以后作為后綴名,那么就調(diào)用函數(shù)來(lái)對(duì)它進(jìn)行解析和安裝。

9.

這個(gè)函數(shù)定義在文件中:[]

""\o""""\o""

{

(

,

,

,

)

{

=

();

;

=

();

=

(,

,

,

);

(,

,

|

,

);

}

}

這個(gè)函數(shù)首先會(huì)為這個(gè)文件創(chuàng)建一個(gè)實(shí)例,接著調(diào)用這個(gè)實(shí)例的函數(shù)來(lái)對(duì)這個(gè)文件進(jìn)行解析。這個(gè)函數(shù)最后還會(huì)調(diào)用另外一個(gè)版本的函數(shù)把來(lái)解析后得到的應(yīng)用程序信息保存在中。

10.

這個(gè)函數(shù)定義在文件中:[]

""\o""""\o""

{

(

,

,

,

)

{

=

();

=

;

=

;

=

;

{

=

();

=

();

(

0)

{

=

(,

"");

=

;

}

{

}

}

(

e)

{

}

[]

=

[1];

=

;

=

;

{

:

.

=

(,

,

);

=

(,

,

,

);

}

(

e)

{

}

();

();

=

;

=

;

=

;

=

;

=

;

;

}

}

每一個(gè)文件都是一個(gè)歸檔文件,它里面包含了應(yīng)用程序的配置文件,這里主要就是要對(duì)這個(gè)配置文件就行解析了,從歸檔文件中得到這個(gè)配置文件后,就調(diào)用另一外版本的函數(shù)對(duì)這個(gè)應(yīng)用程序進(jìn)行解析了:[]

""\o""""\o""

{

(

,

,

,

[]

)

,

{

=

(,

,

,

);

=

();

;

=

(,

);

((())

(

()

>

))

{

(

)

{

;

}

=

();

((""))

{

((,

,

,

,

,

))

{

;

}

}

((""))

{

}

((""))

{

}

((""))

{

}

((""))

{

}

((""))

{

}

((""))

{

}

((""))

{

}

((""))

{

}

((""))

{

}

((""))

{

}

((""))

{

}

((""))

{

}

((""))

{

}

((""))

{

}

((""))

{

}

()

{

}

{

}

}

;

}

}

這里就是對(duì)文件中的各個(gè)標(biāo)簽進(jìn)行解析了,各個(gè)標(biāo)簽的含義可以參考官方文檔"""",這里我們只簡(jiǎn)單看一下標(biāo)簽的解析,這是通過(guò)調(diào)用函數(shù)來(lái)進(jìn)行的。

11.

這個(gè)函數(shù)定義在文件中:[]

""\o""""\o""

{

(

,

,

,

,

,

[]

)

,

{

=

;

=

;

=

(,

);

;

((())

(

()

>

))

{

(

)

{

;

}

=

();

((""))

{

a

=

(,

,

,

,

,

,

);

(a);

}

((""))

{

a

=

(,

,

,

,

,

,

);

(a);

}

((""))

{

s

=

(,

,

,

,

,

);

(s);

}

((""))

{

p

=

(,

,

,

,

,

);

(p);

}

((""))

{

a

=

(,

,

,

,

,

);

(a);

}

(()(""))

{

}

((""))

{

}

((""))

{

}

{

}

}

;

}

}

這里就是對(duì)文件中的標(biāo)簽進(jìn)行解析了,我們常用到的標(biāo)簽就有、、和,各個(gè)標(biāo)簽的含義可以參考官方文檔""""。

這里解析完成后,一層層返回到9中,調(diào)用另一個(gè)版本的函數(shù)把來(lái)解析后得到的應(yīng)用程序信息保存下來(lái)。

12.

這個(gè)函數(shù)定義在文件中:[]

""\o""""\o""

{

(

),

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論