欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android項(xiàng)目基本結(jié)構(gòu)詳解

 更新時(shí)間:2016年06月14日 11:30:52   作者:rainmj  
這篇文章主要為大家詳細(xì)介紹了Android項(xiàng)目基本結(jié)構(gòu),從最基本的內(nèi)容講起,帶你逐步進(jìn)入用C#進(jìn)行Android應(yīng)用開(kāi)發(fā)的樂(lè)園,感興趣的小伙伴們可以參考一下

一、簡(jiǎn)介

第3章雖然通過(guò)百度地圖應(yīng)用展示了你可能感興趣的內(nèi)容,但是,如果你是一個(gè)初學(xué)者,一開(kāi)始就看懂和理解代碼可能會(huì)非常費(fèi)勁。為了解決此問(wèn)題,從這一章開(kāi)始,本模塊將從最基本的內(nèi)容講起,帶你逐步進(jìn)入用C#進(jìn)行Android應(yīng)用開(kāi)發(fā)的樂(lè)園。

二、AndroidApp入口

要用C#開(kāi)發(fā)Android應(yīng)用程序,首先需要對(duì)項(xiàng)目的基本結(jié)構(gòu)有一個(gè)感性認(rèn)識(shí)。如下圖所示:

Android應(yīng)用程序使用的是單一入口,源程序中并不能一眼看出程序從哪開(kāi)始運(yùn)行,當(dāng)應(yīng)用程序加載到內(nèi)存中時(shí),Android操作系統(tǒng)會(huì)自動(dòng)從內(nèi)部自定義的入口處開(kāi)始運(yùn)行該應(yīng)用程序。這種獨(dú)特的架構(gòu)可讓程序員設(shè)計(jì)的代碼直接和Android操作系統(tǒng)交互,但其缺點(diǎn)也很明顯:即使一個(gè)非常簡(jiǎn)單的程序,也會(huì)變得很復(fù)雜。

為了方便找到程序入口點(diǎn),當(dāng)新建一個(gè)Android項(xiàng)目時(shí),默認(rèn)情況下,在MainActivity.cs文件的特性聲明中通過(guò)“MainLauncher = true”表示程序從這個(gè)Activity開(kāi)始執(zhí)行:

[Activity(Label = "myDemos", MainLauncher = true)]

public class MainActivity : Activity

{

//……

}

注意MainActivity.cs的前綴,一般表示它控制的是布局文件Main.axml(但不是必須這樣做)。比如,如果把Main.axml改為First.axml,那么它對(duì)應(yīng)的Activity類(lèi)最好命名為FirstActivity.cs,換言之,前綴只是為了方便查看它和界面的對(duì)應(yīng)關(guān)系而已,這僅僅是一種命名習(xí)慣,而不是對(duì)文件命名的必然要求。

實(shí)際上,你可以把“MainLauncher = true”放到任何一個(gè)繼承自Activity的類(lèi)中。總之,你將其放到哪個(gè)類(lèi)的特性聲明中,程序就從哪個(gè)Activity開(kāi)始執(zhí)行。

三、資源文件(Resources文件夾下的各種文件)

資源文件是指在代碼中使用的并且在編譯時(shí)就被打包到應(yīng)用程序中的附加文件。根據(jù)資源的類(lèi)型,這些文件分別被保存在項(xiàng)目中的不同文件夾下。

在項(xiàng)目的Resources文件夾下,根據(jù)資源類(lèi)型,可將其分為多個(gè)子文件夾。這些資源包括圖片,音頻文件,以及任何與程序可見(jiàn)內(nèi)容相關(guān)的東西。例如,自定義的動(dòng)畫(huà)、菜單、風(fēng)格、顏色以及由.axml文件(帶設(shè)計(jì)界面)或.xml文件(不帶設(shè)計(jì)界面)描述的用戶(hù)交互頁(yè)面的布局等。

1、基本概念

Resources文件夾下保存的資源不包括代碼文件,而是指隨項(xiàng)目一起編譯和打包的除了代碼文件之外的其他文件,如聲音、視頻、圖像、字符串、布局文件等。

將資源單獨(dú)組織的優(yōu)點(diǎn)是:代碼分離,這樣就可以適用于多平臺(tái),同時(shí)也能在編譯時(shí)進(jìn)行檢查,并在編譯通過(guò)后為鍵入C#代碼提供智能提示。

使用資源可使修改程序的特征變得很容易,同時(shí)不必修改代碼。而且通過(guò)可選擇的資源集合,能為不同的設(shè)備配置優(yōu)化程序(例如不同的國(guó)家語(yǔ)言和不同的屏幕尺寸等)。

系統(tǒng)搭建工具會(huì)自動(dòng)為Android項(xiàng)目使用的每一個(gè)資源都定義一個(gè)唯一的整型ID,程序通過(guò)ID獲得代碼中的資源或者.xml或.axml中的其它資源的引用。例如,程序包含了一個(gè)名叫l(wèi)ogo.png (保存在 Resources/drawable/ 目錄下)的圖片文件,工具就會(huì)生成一個(gè)叫做Resource.drawable.logo的資源ID,程序中可以用這個(gè)ID引用該圖片。

分隔資源的一個(gè)重要能力是為不同的設(shè)備配置提供可選擇的資源文件。例如,在XML中定義UI字符串,就可以把這些字符串翻譯成其它的國(guó)家語(yǔ)言,并在分隔的文件中分別保存。然后,根據(jù)追加到資源目錄名中的國(guó)家語(yǔ)言修飾符(例如res/values-fr/是法語(yǔ)字符串的值)和用戶(hù)對(duì)國(guó)家語(yǔ)言的設(shè)置,Android系統(tǒng)就會(huì)提供適當(dāng)?shù)膰?guó)家語(yǔ)言字符串到UI中。

Android支持很多不同的修飾符以支持可選的資源。這些修飾符都是被加入到資源目錄名中的簡(jiǎn)短字符串。這樣定義是為了定義設(shè)備的特定配置,以保證這個(gè)目錄下的資源可能會(huì)被使用到。

2、基本的資源文件夾

基本的資源文件夾用于保存項(xiàng)目中常用的資源文件。

(1)Drawable文件夾

Drawable文件夾:保存通用的圖片文件。

Drawable resources(可繪制資源)是編譯到應(yīng)用程序中的圖像資源,這些資源可通過(guò)API去調(diào)用或引用其他的XML資源。例如,位圖文件 (.png、.gif、.jpg)、可調(diào)整大小的9-Patch格式的圖像、在XML文件中定義的狀態(tài)列表、通用的形狀定義、……等。

通過(guò)Resources.Drawable獲取該文件夾下的這些文件資源。

說(shuō)明:9-Patch圖像(*.9.png)的含義及用法見(jiàn)本博客第5章介紹的圖像示例。

(2)其他與分辨率對(duì)應(yīng)的圖片資源文件夾

其他與分辨率對(duì)應(yīng)的相關(guān)文件夾還有:

drawable-ldpi文件夾:保存低分辨率手機(jī)專(zhuān)用的圖片文件。

drawable-mdpi文件夾:保存中等分辨率手機(jī)專(zhuān)用的圖片文件。

drawable-hdpi文件夾:保存高分辨率手機(jī)專(zhuān)用的圖片文件。

drawable-xdpi文件夾:保存超高分辨率手機(jī)專(zhuān)用的圖片文件。

drawable-xxdpi文件夾:保存超超高分辨率手機(jī)專(zhuān)用的圖片文件。

(3)layout文件夾

layout文件夾用于保存所有界面文件(包括帶設(shè)計(jì)界面的.axml文件和不帶設(shè)計(jì)界面的.xml文件),如果你高興,可隨時(shí)將.xml換名為.axml,或者隨時(shí)將.axml換名為.xml。

一般用Main.axml作為默認(rèn)的App主頁(yè)布局文件,有Design和Source兩種模式。

該文件夾下的文件都是可編譯為屏幕布局的XML文件,可通過(guò)Resources.Layout獲取這些文件資源,通過(guò)Resources.Id獲取這些文件中用id定義的資源。

(4)Values文件夾

Values文件夾存放用字符串描述的XML文件,該文件夾下的這些文件中包含的都是一個(gè)或多個(gè)簡(jiǎn)單的字符串類(lèi)型的值或列表(strings、integers、colors等)。比如在一個(gè)XML文件中用字符串列表定義一系列顏色。

Values文件夾資源文件都是文本資源,在文件夾中有一些約定的文件名稱(chēng)。另外,該目錄下的XML文件中的值可定義多個(gè)資源而不是只能定義單個(gè)資源,例如:

String.xml:保存字符串值列表,通過(guò)Resources.String獲取這些資源。Colors.xml:保存顏色值列表,通過(guò)Resources.Color獲取這些資源。Arrays.xml:定義數(shù)組,通過(guò)Resources.Array獲取這些資源。Dimens.xml:保存尺度值,通過(guò)Resources.Dimens獲取這些資源。

(5)animator文件夾

該文件夾下保存的是用屬性動(dòng)畫(huà)描述對(duì)象的動(dòng)畫(huà)的XML文件。其用法和WPF的屬性動(dòng)畫(huà)相似,是一種非常靈活而強(qiáng)大的描述動(dòng)畫(huà)的方式,可描述各種類(lèi)型的對(duì)象。

“屬性動(dòng)畫(huà)”是在API level 11 (Android 3.0)開(kāi)始提供的。

注:Android的屬性動(dòng)畫(huà)和WPF的屬性動(dòng)畫(huà)的用法非常相似,只要學(xué)會(huì)其中一種,很快就會(huì)另一種的用法。

(6)anim文件夾

該文件夾用于保存描述補(bǔ)間動(dòng)畫(huà)(tween animations)的XML文件。

補(bǔ)間動(dòng)畫(huà)用一系列的動(dòng)畫(huà)指令對(duì)視圖對(duì)象的內(nèi)容執(zhí)行轉(zhuǎn)換,用于將View對(duì)象轉(zhuǎn)換為動(dòng)畫(huà),比如邊旋轉(zhuǎn)邊增大圖像或文本的大小。

由于旋轉(zhuǎn)圖像或文本會(huì)導(dǎo)致占用的容量快速膨脹,因此補(bǔ)間動(dòng)畫(huà)只能用于View對(duì)象。

(7)color文件夾

該文件夾用于保存描述顏色狀態(tài)列表的XML文件。顏色狀態(tài)列表是指用顏色表示每個(gè)狀態(tài)的變化,比如按鈕按下、禁用等。要讓按鈕的隨著狀態(tài)的變化而引起顏色的改變,就需要定義這樣一個(gè)顏色狀態(tài)列列表,用它來(lái)描述這些顏色狀態(tài)的變化。

(8)menu文件夾

該文件夾保存的是描述菜單的XML文件,如【應(yīng)用程序選項(xiàng)】菜單、彈出菜單、上下文菜單(快捷菜單)、子菜單等。

通過(guò)Resources.Menu獲取該文件夾下的這些文件資源。

(9)raw文件夾

用原始的二進(jìn)制形式保存的任意文件。這些文件仍然以二進(jìn)制文件的形式被編譯到Android應(yīng)用程序中。

通過(guò)Resources.Raw可獲取該文件夾下的這些文件資源。

(10)xml文件夾

該文件夾下保存的XML文件類(lèi)似于.NET的配置文件,即:該文件夾下保存的都是可以由應(yīng)用程序在運(yùn)行時(shí)讀取的任意XML文件。

通過(guò)Resources.Xml獲取這些資源。

4、引用資源的方式

當(dāng)將資源文件添加到項(xiàng)目中時(shí),管道會(huì)自動(dòng)將該資源描述添加到資源中,并自動(dòng)生成對(duì)應(yīng)的類(lèi)(保存在Resource.designer.cs文件中),自動(dòng)生成的類(lèi)會(huì)為每個(gè)資源自動(dòng)分配一個(gè)唯一的ID。

有兩種存取和管理資源的方式:

-----在C#代碼中引用資源。

-----在.xml或者.axml布局文件中引用資源。

(1)方式1--在C#代碼中引用資源

格式:@[<PackageName>.]Resource.<ResourceType>.<ResourceName>

例如:

復(fù)制代碼 代碼如下:
SetContentView(Resource.Layout.Main);EditText phoneNumberText = FindViewById<EditText>(Resource.Id.PhoneNumberText);

(2)方式2--在xml(或者axml)布局文件中引用資源

格式:@[<PackageName>:]<ResourceType>/<ResourceName>

例如(見(jiàn)Main.axml文件):

復(fù)制代碼 代碼如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:id="@+id/myImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/flag" /></LinearLayout>

5、其他備用的資源文件夾

備用資源也是保存在Resources文件夾下,子文件夾的格式為:

<ResourceType>-<Qualifier>

即:<資源類(lèi)型>-<限定標(biāo)識(shí)符>

例如:drawable-hdpi

當(dāng)有多個(gè)限定符時(shí),各限定符之間用短劃線分隔。

限定符必須按下表列出的順序出現(xiàn)(該表實(shí)際是按優(yōu)先級(jí)從高到低排列):

例如,v11的目標(biāo)是API level 11 (Android 3.0)設(shè)備。

下面是截圖表格中各限定符的含義。

MCC、MNC

手機(jī)的國(guó)家碼(MCC):手機(jī)的SIM卡提供商。

移動(dòng)網(wǎng)絡(luò)碼(MNC):手機(jī)連接到的網(wǎng)絡(luò)供應(yīng)商。

盡管本地化目標(biāo)可以使用用于移動(dòng)設(shè)備的國(guó)家碼,但是仍建議使用資源限定符來(lái)限定它。例如:美國(guó)(U.S)的資源限定符是 mcc310-mnc026

MCC的完整編碼詳見(jiàn)下面的網(wǎng)站:http://mcclist.com/

Language

兩字母的ISO 639-1國(guó)家語(yǔ)言編碼以及可選的兩字母的ISO-3166-alpha-2區(qū)域編碼。 如果同時(shí)提供這兩個(gè)限定符,用“-r”分隔。

例如:對(duì)于French-Canadian locales,使用的資源限定符為:fr-rCA

完整的語(yǔ)言和區(qū)域編碼見(jiàn)“Codes for the Representation of Names Of Languages and Country names and code elements”。

Smallest Width

限定屏幕執(zhí)行時(shí)使用的最小寬度。例如:sw320dp 表示目標(biāo)設(shè)備的高和寬最小說(shuō)320dp。

Available Width、Available Height

Available Width:屏幕最小寬度,格式:w<N>dp,其中N表示與像素?zé)o關(guān)的寬度。當(dāng)用戶(hù)旋轉(zhuǎn)屏幕時(shí)會(huì)改變?cè)撝?。例如:w720dp 表示目標(biāo)設(shè)備的最小寬度為720dp

Available Height:屏幕最小高度,格式:h<N>dp,其中N表示與像素?zé)o關(guān)的寬度。當(dāng)用戶(hù)旋轉(zhuǎn)屏幕時(shí)會(huì)改變?cè)撝?。例如:h720dp 表示目標(biāo)設(shè)備的最小高度為720dp

Screen aspect

指屏幕的寬高比,而不是屏幕的放置順序(縱向和橫向)。其值有兩個(gè):long(表示寬屏幕)、notlong(表示非寬屏幕)。

Screen Orientation

屏幕放置順序,Portrait(縱向放置)或者landscape(橫向放置)。該值可在應(yīng)用程序的生命周期中改變。取值有:port、land

Dock mode

設(shè)備在 car dock或者 desk dock 中。API 8(Android 2.2.x)開(kāi)始提供。取值有:car、desk

Night mode

應(yīng)用程序是否在夜間模式下運(yùn)行。此限定可給開(kāi)發(fā)者在應(yīng)用程序生命周期中提供優(yōu)化選項(xiàng)。API level 8 (Android 2.2.x)開(kāi)始提供。

可能的值:night、notnight

Screen pixel density (dpi)

物理屏幕的像素?cái)?shù),通常用dpi表示。可能的值有:

ldpi – 低分辨率屏幕

mdpi – 中等分辨率屏幕

hdpi – 高分辨率屏幕

xhdpi – 超高分辨率屏幕

nodpi – 資源不可縮放

tvdpi – 在mdpi和hdpi之間

Touchscreen type

限定設(shè)備是哪種觸摸屏。可能的值有:notouch (無(wú)觸摸功能)、stylus(適用于手寫(xiě)筆的電阻式觸摸屏)、finger(手指觸摸)

Keyboard availability

限定哪種鍵盤(pán)可用??稍趹?yīng)用程序的生命周期中改變它??赡艿闹涤校?/p>

keysexposed – 該設(shè)備有可用的鍵盤(pán)。如果軟鍵盤(pán)不可用,則當(dāng)【硬件鍵盤(pán)】設(shè)置打開(kāi)時(shí)僅使用硬鍵盤(pán)。

keyshidden – 設(shè)備沒(méi)有硬鍵盤(pán),而且軟鍵盤(pán)也隱藏。即:軟件沒(méi)有可以用的鍵盤(pán)。

keyssoft –設(shè)備有可用的軟鍵盤(pán)。

Primary text input method

限定哪種硬件鍵盤(pán)可用于輸入。可能的值有:

nokeys – 無(wú)可用的用于輸入文本信息的硬件鍵盤(pán)。

qwerty – 有可用的qwerty鍵盤(pán)。

12key – 有可用的12-鍵(12-key)硬件鍵盤(pán)。

Navigation key availability

用于當(dāng)“5-way”或者“d-pad (directional-pad)”導(dǎo)航鍵可用的情況。可在應(yīng)用程序生命周期中改變。可能的值有:

navexposed – 用戶(hù)可以使用導(dǎo)航鍵。

navhidden – 導(dǎo)航鍵不可用。

Primary non-touch navigation method

設(shè)備提供的可用導(dǎo)航鍵??赡艿闹涤校?/p>

nonav – 僅能通過(guò)觸摸屏幕導(dǎo)航。

dpad – 有可用的“d-pad (directional-pad)”導(dǎo)航。

trackball – 設(shè)備有一個(gè)“trackball”用于導(dǎo)航。

wheel - (不常見(jiàn))有一個(gè)或多個(gè)可用的定向輪

Platform version (API level)

設(shè)備支持(supported)的API級(jí)別。格式:v<N>

下圖列出了Android的判斷規(guī)則:

四、附件(Assets文件夾下的各種文件)

在Android App中,Asset文件夾及其子文件夾下可保存任意類(lèi)型的原始文件:text、xml、fonts、music、video、……等(WPF的內(nèi)容文件類(lèi)型也是如此,換言之,如果你知道如何用C#讀寫(xiě)WPF項(xiàng)目中的內(nèi)容文件,也就知道如何用C#讀寫(xiě)Android項(xiàng)目中Asset文件夾下的原始文件了)。

與資源文件不同,Asset文件夾下的文件不是被編譯到Android應(yīng)用程序內(nèi),而是以單獨(dú)的原始(raw)文件的形式作為附件隨Android App一起打包到.apk壓縮文件包中發(fā)布出來(lái)。

和WPF的比較:在WPF中,將這種文件稱(chēng)為內(nèi)容文件,WPF是通過(guò)文件屬性來(lái)指定編譯器如何處理這種文件的(復(fù)制到輸出目錄:總是復(fù)制、如果較新則復(fù)制等),但是WPF并沒(méi)有規(guī)定必須將這種類(lèi)型的文件保存到項(xiàng)目中的哪個(gè)文件夾及其子文件夾下。而Android規(guī)定必須將這種類(lèi)型的文件保存到項(xiàng)目中的Asset文件夾及其子文件夾下,而且規(guī)定只能通過(guò)Assets類(lèi)來(lái)打開(kāi)該文件夾下的文件。

下面的代碼演示了如何讀取Assets下的文本文件并將其顯示到界面上:

using Android.App;
using Android.OS;
using Android.Widget;
using System.IO;
namespace MyTestProj
{
  [Activity(Label = "Activity1")]
  public class Activity1 : Activity
  {
    protected override void OnCreate(Bundle savedInstanceState)
    {
      base.OnCreate(savedInstanceState);
      base.OnCreate(savedInstanceState);
      var textView1 = new TextView(this);
      string content;
      using (StreamReader sr = new StreamReader(Assets.Open("readme.txt")))
      {
        content = sr.ReadToEnd();
      }
      textView1.Text = content;
      SetContentView(textView1);
    }
  }
}

在Android應(yīng)用程序中,每個(gè)組件都是一個(gè)獨(dú)立的模塊,但并不是所有組件都是用戶(hù)進(jìn)入程序的真實(shí)入口,其中一些要依賴(lài)于其它組件。

Android內(nèi)置了四種不同的應(yīng)用程序組件:Activity、Service、Content Provider和Broadcast recevicer。除此之外,還可以自定義組件并將其保存到項(xiàng)目的Components文件夾下。

在后面的章節(jié)中,還會(huì)專(zhuān)門(mén)介紹這些內(nèi)容,這里你只需要記住真正掌握Android應(yīng)用開(kāi)發(fā)技術(shù),必須理解這些組件的含義和具體使用場(chǎng)合。

六、權(quán)限設(shè)置與管理(AndroidManifest.xml)

清單(Manifest)可以定義應(yīng)用程序及其組件的結(jié)構(gòu)和元數(shù)據(jù)。

AndroidManifest.xml文件包含在每個(gè)安卓應(yīng)用程序中,該文件向系統(tǒng)描述了本程序所包括的組件、所實(shí)現(xiàn)的功能、所能處理的數(shù)據(jù)、要請(qǐng)求的資源等。

該文件的功能類(lèi)似于網(wǎng)站中的Web.conig文件。

在AndroidManifest.xml文件中添加或刪除權(quán)限時(shí),最常用的是通過(guò)VS2015主菜單下的項(xiàng)目屬性來(lái)設(shè)置與權(quán)限(Permissions)相關(guān)的屬性:

也可以在【解決方案資源管理器】中雙擊項(xiàng)目的【Properties】文件夾直接進(jìn)入該界面。

設(shè)置后,它會(huì)自動(dòng)更新項(xiàng)目中Properties文件夾下的AndroidManifest.xml文件。如果項(xiàng)目的Properties文件夾下不存在該文件,系統(tǒng)會(huì)自動(dòng)創(chuàng)建它。

在Android系統(tǒng)能夠啟動(dòng)一個(gè)程序組件之前, 系統(tǒng)必須通過(guò)讀取程序的AndroidManifest.xml文件來(lái)知道這個(gè)組件是否存在。因此對(duì)于Java開(kāi)發(fā)者要求程序必須在這個(gè)文件中聲明它所有的組件。

除了聲明程序組件外,這個(gè)配置文件還做一些其它的工作,例如:

確定程序需要哪些用戶(hù)權(quán)限,例如網(wǎng)絡(luò)訪問(wèn)或者讀取用戶(hù)的聯(lián)系人。聲明程序需要的最小的 API Level 這個(gè)要參照程序都使用了哪些API。聲明程序使用或要求的硬件和軟件特性,例如相機(jī),藍(lán)牙服務(wù),或者多點(diǎn)觸屏。程序需要鏈接的API類(lèi)庫(kù)(除Android framework API之外的類(lèi)庫(kù)),例如 Google Map類(lèi)庫(kù)。

但是,如果用C#來(lái)開(kāi)發(fā),“直接在AndroidManifest.xml文件中聲明”并不是必需的,因?yàn)橛脦в兄悄芴崾镜奶匦月暶鱽?lái)聲明它,然后讓編譯器自動(dòng)生成合適的代碼添加到這個(gè)文件中更方便。

當(dāng)然,如果你希望直接在該文件中添加聲明,也可以這樣做。換言之,C#開(kāi)發(fā)給你提供了多種聲明清單的方式,你只需要按自己的習(xí)慣去選擇一種合適的方式即可。這些方式有:

在AndroidManifest.xml文件中直接添加聲明。通過(guò)項(xiàng)目的屬性窗口選擇,然后讓編譯器自動(dòng)將合適的代碼添加到AndroidManifest.xml文件中。在AssemblyInfo.cs文件中聲明,然后讓編譯器自動(dòng)自動(dòng)將合適的代碼添加到AndroidManifest.xml文件中。通過(guò)在類(lèi)上方添加特性聲明來(lái)聲明,然后讓編譯器自動(dòng)自動(dòng)將合適的代碼添加到AndroidManifest.xml文件中。

通過(guò)這些方式,你就擁有了最大的靈活性,同時(shí)也是代碼看起來(lái)簡(jiǎn)潔而直觀。

七、CPU架構(gòu)(CPU Architectures)

VS2015調(diào)試模式(Debug)使用的是可適應(yīng)多種CPU架構(gòu)的模式,發(fā)布模式(Release)用于選擇某種具體型號(hào)的手機(jī),然后部署。

(1)如何指定支持的CPU架構(gòu)

在調(diào)試狀態(tài)(Debug)下,下面的兩個(gè)選項(xiàng)默認(rèn)是選中的:

這兩個(gè)選項(xiàng)選中后??煞乐拐{(diào)試時(shí)指定某種具體的CPU架構(gòu)(CPU Architectures),即在下面的配置中,下面這些選項(xiàng)是不可更改的:

通常情況下,實(shí)際發(fā)布應(yīng)用程序時(shí)需要明確配置使用的CPU體系結(jié)構(gòu)或架構(gòu)。當(dāng)更改為發(fā)布(Release)模式時(shí),它會(huì)自動(dòng)不勾選“Use Shared Runtime”和“Use Fast Delployment…”復(fù)選框,這樣一來(lái),上圖中的選項(xiàng)就可選了。

Xamarin.Android提供下面的架構(gòu):

armeabi – 基于ARM的CPU系列,提供了不低于ARMv5TE結(jié)構(gòu)的指令集。注意armeabi不是線程安全的而且不能用于多CPU的設(shè)備。armeabi-v7a – 這種CPU支持硬件浮點(diǎn)運(yùn)算和多CPU(SMP)設(shè)備。注意armeabi-v7a的機(jī)器碼無(wú)法在ARMv5設(shè)備上運(yùn)行。arm64-v8a –這是一種基于64-bit ARMv8架構(gòu)的CPU。x86 – 這種CPU提供x86 (or IA-32)指令集。該指令集等價(jià)于奔騰Pro(Pentium Pro),包括MMX, SSE, SSE2,以及SSE3指令集。x86_64 CPUs提供64-bit的x86指令集。

在Release模式下,Xamarin.Android默認(rèn)指定的是armeabi-v7a,其性能比armeabi高。如果發(fā)布目標(biāo)是64-bit ARM平臺(tái)(例如Nexus 9),此時(shí)需要選擇arm64-v8a。如果發(fā)布到x86設(shè)備,就選擇x86,如果發(fā)布目標(biāo)是64-bit的CPU架構(gòu),就選擇x86_64。

注意:由于在64位架構(gòu)上可運(yùn)行32位程序(例如Nexs 9就是64-bit ARM設(shè)備),因此,發(fā)布到64位手機(jī)設(shè)備上的時(shí)候,不是必須選擇arm64-v8a或x86_64,仍然可以繼續(xù)選擇32位架構(gòu),這樣做的優(yōu)點(diǎn)是可避免應(yīng)用程序占用過(guò)多的內(nèi)存。

(2)多平臺(tái)目標(biāo)(Targeting Multiple Platforms)

面向多平臺(tái)的優(yōu)點(diǎn)是可同時(shí)調(diào)試多種CPU,缺點(diǎn)是這會(huì)導(dǎo)致.apk文件很大,如果希望減少.apk文件的大小,發(fā)布時(shí)只選擇一個(gè)平臺(tái)就行了。

注意:雖然在Xamarin.Android 5.1.x或更高版本中也可以體驗(yàn)64位的功能,但實(shí)際發(fā)布時(shí)并不使用它。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論