溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

從零開始熟悉AS中手機app的開發(fā)(一)

發(fā)布時間:2020-08-25 13:59:08 來源:網(wǎng)絡(luò) 閱讀:948 作者:ccpit2b2c 欄目:移動開發(fā)

2016-05-04

    我喜歡,看別人寫的程序手記,那種真實的理解和感受,看這樣的文章,是一種享受,一種飄浮在意識空間中的獨立世界的純意識層面思考的快樂,全息而富有色彩,真實而無極限。

下面是看到一段移動端開發(fā)者的博文手記:


    ......“AndroidManifest.xml 是每個 android 程序中必須的文件。它位于 application 的根目錄,描述了 package 中的全局數(shù)據(jù),包括了 package 中暴露的組件( activities, services, 等等),它們各自的實現(xiàn)類,各種能被處理的數(shù)據(jù)和啟動位置。”......

 

    當(dāng)我看到這段文字的時候,感到很精彩,顯然看到了作者條理邏輯分明的邏輯中樞神經(jīng),這種精彩,就像是看到了《***帝國》中描述的一個精密的控制中心,一個處理大廳或各條走廊和控制中心,,延伸開來各種處理組件和處理程序,結(jié)構(gòu)清晰,邏輯豐富而充實。

以此為例,我試圖來理解看到的這段代碼:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.knight.android.test"
    android:versionCode="1"
    android:versionName="1.0" >
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name="AndroidTestActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

    <!-- 授權(quán)訪問網(wǎng)絡(luò) -->
    <uses-permission android:name="android.permission.INTERNET"/>

</manifest>

 

第一段顯然是標明xml的版本號和編碼字符集。

1、第一層(<Manifest>):(屬性)

<manifest  xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.woody.test"
          android:sharedUserId="string"
          android:sharedUserLabel="string resource"
          android:versionCode="integer"
          android:versionName="string"
          android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
</manifest>

A、xmlns:android

定義android命名空間,一般為http://schemas.android.com/apk/res/android,這樣使得Android中各種標準屬性能在文件中使用,提供了大部分元素中的數(shù)據(jù)。


Bpackage

指定本應(yīng)用內(nèi)Java主程序包的包名,它也是一個應(yīng)用進程的默認名稱


C、sharedUserId

表明數(shù)據(jù)權(quán)限,因為默認情況下,Android給每個APK分配一個唯一的UserID,所以是默認禁止不同APK訪問共享數(shù)據(jù)的。若要共享數(shù)據(jù),第一可以采用Share Preference方法,第二種就可以采用sharedUserId了,將不同APKsharedUserId都設(shè)為一樣,則這些APK之間就可以互相共享數(shù)據(jù)了。詳見:http://wallage.blog.163.com/blog/static/17389624201011010539408/

D、sharedUserLabel

一個共享的用戶名,它只有在設(shè)置了sharedUserId屬性的前提下才會有意義


E、versionCode

是給設(shè)備程序識別版本(升級)用的必須是一個interger值代表app更新過多少次,比如第一版一般為1,之后若要更新版本就設(shè)置為23等等。


F、versionName

這個名稱是給用戶看的,你可以將你的APP版本號設(shè)置為1.1版,后續(xù)更新版本設(shè)置為1.2、2.0版本等等。。。


G、installLocation

安裝參數(shù),是Android2.2中的一個新特性,installLocation有三個值可以選擇:internalOnly、auto、preferExternal

選擇preferExternal,系統(tǒng)會優(yōu)先考慮將APK安裝到SD卡上(當(dāng)然最終用戶可以選擇為內(nèi)部ROM存儲上,如果SD存儲已滿,也會安裝到內(nèi)部存儲上)

選擇auto,系統(tǒng)將會根據(jù)存儲空間自己去適應(yīng)

選擇internalOnly是指必須安裝到內(nèi)部才能運行

(注:需要進行后臺類監(jiān)控的APP最好安裝在內(nèi)部,而一些較大的游戲APP最好安裝在SD卡上?,F(xiàn)默認為安裝在內(nèi)部,如果把APP安裝在SD卡上,首先得設(shè)置你的level8,并且要配置android:installLocation這個參數(shù)的屬性為preferExternal)

這位天才的博文總結(jié)如下:

    此文件一個重要的地方就是它所包含的 intent-filters 。這些 filters 描述了 activity 啟動的位置和時間。每當(dāng)一個 activity (或者操作系統(tǒng))要執(zhí)行一個操作,例如:打開網(wǎng)頁或聯(lián)系簿時,它創(chuàng)建出一個 intent 的對象。它能承載一些信息描述了你想做什么,你想處理什么數(shù)據(jù),數(shù)據(jù)的類型,和一些其他信息。Android 比較了 intent 對象中和每個 application 所暴露的 intent-filter 中的信息,來找到最合適的 activity 來處理調(diào)用者所指定的數(shù)據(jù)和操作。

除了能聲明你程序中的 Activities, Content Providers, Services, 和 Intent Receivers,你還能指定 permissions 和 instrumentation (安全控制和測試)在 AndroidManifest.xml 文件中。天哪???!這些都是什么???別著急,呵呵,這些都是運行手機app程序需要定義好的一些文件,以后會逐漸的知道,先不用管,看看有這么多的內(nèi)容為我們服務(wù),有多么好?

    一般打開AS,一般我們首先會發(fā)現(xiàn)AndroidManifest.xml,這是什么文件呢?一個基本而重要的全局文件。

這是一個簡單的AndroidManifest.xml。

< ?xml version="1.0" encoding="utf-8"?>

< manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.my_domain.app.helloactivity">

< application android:label="@string/app_name">

< activity class=".HelloActivity">

< intent-filter>

< action android:value="android.intent.action.MAIN"/>

< category android:value="android.intent.category.LAUNCHER"/>

< /intent-filter>

< /activity>

< /application>

< /manifest>

值得一提一些常用之處:

 

  · 幾乎所有的 AndroidManifest.xml (以及許多其他Androidxml的文件)在第一個元素中包含了命名空間的聲明xmlns:android="http://schemas.android.com/apk/res/android"。這樣使得Android中各種標準屬性能在文件中使用,提供了大部分元素中的數(shù)據(jù)。

 

  · 大部分manifests包含了單個< application>的元素,它定義了所有的application級別組件和屬性,并能在package中使用。

 

  · 任何被用戶看作頂層應(yīng)用程序,并能被程序啟動器所用的package,需要包含至少一個Activity組件來支持MAIN操作和LAUNCHER種類,如上述代碼中所見。

 

  這里是AndroidManifest.xml文件結(jié)構(gòu)的一個詳細的列表,描述了所有能被使用的標記。

 

    manifest

  根節(jié)點,描述了package中所有的內(nèi)容。在它之下能放置:

 

  uses-permission

  請求你的 package 正常運作所需賦予的安全許可。見 SecurityModel 來獲得許可的更多的信息。一個 manifest 能包含零個或更多此元素。

 

    permission

  聲明了安全許可來限制哪些程序能你 package 中的組件和功能。見 SecurityModel 來獲得許可的更多的信息。一個 manifest 能包含零個或更多此元素。

 

    instrumentation

  聲明了用來測試此 package 或其他 package 指令組件的代碼。見 Instrumentation 來獲得許可的更多的信息。一個 manifest 能包含零個或更多此元素。

 

    application

  包含 package 中 application 級別組件聲明的根節(jié)點。此元素也可包含 application 中全局和默認的屬性,如標簽,icon,主題,必要的權(quán)限,等等。一個 manifest 能包含零個或一個此元素(不允許多余一個)。在它之下能放置零個或更多下列組件聲明:

 

    activity

  Activity 是用來與用戶交互的主要工具。當(dāng)用戶打開一個應(yīng)用程序的初始頁面時一個 activity ,大部分被使用到的其他頁面也由不同的activity所實現(xiàn)并聲明在另外的 activity 標記中。

 

  注意:每一個 activity 必須要一個 標記對應(yīng),無論它給外部使用或是只用于自己的 package 中。如果一個 activity 沒有對應(yīng)的標記,你將不能運行它。

 

  另外,為了支持運行時查找你的 activity, 你能包含一個或多個 元素來描述你 activity 所支持的操作:

 

    intent-filter

  聲明了指定的一組組件支持的 Intent 值,從而形成了 IntentFilter。除了能在此元素下指定不同類型的值,屬性也能放在這里來描述一個操作所需的唯一的標簽,icon 和其它信息。

 

    action

 

  組件支持的 Intentaction。

 

    category

  組件支持的 IntentCategory.

 

    type

  組件支持的 Intentdata MIME type.

 

    schema

  組件支持的 Intentdata URI scheme.

 

    authority

  組件支持的 Intentdata URI authority.

 

    path

  組件支持的 Intentdata URI path.

 

    receiver

  IntentReceiver 能使的 application 獲得數(shù)據(jù)的改變或者發(fā)生的操作,即使它當(dāng)前不在運行。利用 activity 標記,你能選擇地包含一個或多個 receiver 所支持的 元素;

 

    service

  Service 是能在后臺運行任意時間的組件。利用 activity 標記,你能選擇地包含一個或多個 receiver 所支持的 元素;

 

    provider

ContentProvider 是用來管理持久化數(shù)據(jù)并發(fā)布給其他應(yīng)用程序使用的組件。AndroidManifest.xml 是每個 android 程序中必須的文件。它位于 application 的根目錄,描述了 package 中的全局數(shù)據(jù),包括了 package 中暴露的組件( activities, services, 等等),它們各自的實現(xiàn)類,各種能被處理的數(shù)據(jù)和啟動位置。


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI