其中的每個(gè)標(biāo)簽的有詳細(xì)的介紹 https://blog.csdn.net/o190847959/article/list/2
————————————————
AndroidManifest.xml這個(gè)文件用來(lái)告訴android系統(tǒng),這里面有關(guān)于APP的配置信息司致,你需要根據(jù)里面的設(shè)置的配置信息來(lái)運(yùn)行這個(gè)app聋迎。
xml包含標(biāo)簽,屬性庭再,值牺堰。AndroidManifest.xml常用的標(biāo)簽有(每個(gè)標(biāo)簽里的屬性啊值啊就不介紹了):
<manifest>——根節(jié)點(diǎn)
<application>——應(yīng)用節(jié)點(diǎn),必須有恨搓,作為<manifest>的子節(jié)點(diǎn)
<activity>,<provider>常拓,<service> <receiver >描述應(yīng)用的組件辉浦,作為<application>的子節(jié)點(diǎn)
<activity-alias >
<meta-data >
<uses-library >
<uses-feature>——用戶(hù)特征標(biāo)簽,描述應(yīng)用所依賴(lài)的硬件或者軟件條件掂恕。在應(yīng)用商店搜索的時(shí)候進(jìn)行過(guò)濾懊亡。
<uses-permission>——用戶(hù)權(quán)限標(biāo)簽乎串,描述應(yīng)用需要的權(quán)限
————————————————哪個(gè)是啟動(dòng)Activity
在生成APK時(shí),會(huì)合并所有Arr包的AndroidManifest,如果存在兩個(gè)啟動(dòng)活動(dòng)入口的坏瞄,會(huì)在安裝時(shí)出現(xiàn)兩個(gè)APK,確保只存在一個(gè)啟動(dòng)活動(dòng)入口蕉斜,帶有這兩個(gè)標(biāo)簽的Activity就是啟動(dòng)入口
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
————————————————<manifest>標(biāo)簽
<manifest>標(biāo)簽是AndroidManifest.xml 文件的根節(jié)點(diǎn)缀棍,其子節(jié)點(diǎn)必須要包含<application>標(biāo)簽元素(指的是最終apk的AndroidManifest.xml中)
屬性必須包括:
- xmlns:android(定義Android命名空間,必須設(shè)置成一個(gè)固定的值http://schemas.android.com/apk/res/android)
-
package(包名父腕,代表用來(lái)發(fā)布應(yīng)用的唯一的applicationid璧亮。做來(lái)作為R.java類(lèi)和相對(duì)類(lèi)名的前綴斥难。)。
(注意:package值如果用gradle打包會(huì)其配置中設(shè)置的值替換哑诊;如果unity自動(dòng)打包會(huì)被playersetting中的bundleid替換。)
————————————————<application>標(biāo)簽
AndroidManifest.xml必須包含元素的節(jié)點(diǎn)缴饭,作為<manifest>的子節(jié)點(diǎn)。
該元素標(biāo)簽內(nèi)容是對(duì)應(yīng)用程序的聲明茴扁。
本元素包含了聲明每個(gè)程序組件的子元素汪疮,及作用于全部組件的屬性:
- 一些屬性(比如 icon、label卖丸、permission盏道、process、 taskAffinity 和 allowTaskReparenting)設(shè)置了組件元素中對(duì)應(yīng)屬性的默認(rèn)值衅枫,可以被組建的屬性值覆蓋朗伶。
- 一些屬性(比如 debuggable、enabled益楼、description 和 allowClearUserData)設(shè)置了應(yīng)用程序的全局屬性值点晴,且不能被組件的屬性值覆蓋。
android:icon——設(shè)置APP的圖標(biāo)以及每個(gè)組件的默認(rèn)圖標(biāo)陪竿,也可以在組價(jià)中自定義圖標(biāo)覆蓋此值坠陈。這個(gè)屬性必須設(shè)置成一個(gè)引用,指向一個(gè)可繪制的資源庸蔼,這個(gè)資源必須包含圖片姐仅。比如設(shè)置成@drawable/icon,這個(gè)圖標(biāo)可以在res\drawable\icon.png中找到
android:label——設(shè)置APP的名稱(chēng)劳翰,以及所有組件的默認(rèn)標(biāo)簽馒疹,也可以在組件中自定標(biāo)簽。這個(gè)屬性必須設(shè)置設(shè)置成一個(gè)字符串資源的引用生均。比如設(shè)置成@string/app_name腥刹,其值在標(biāo)簽名是string,name屬性值是 app_name的元素下設(shè)置值佩脊。
比如strings.xml 下的內(nèi)容為垫卤,標(biāo)簽名是string,name屬性值是 app_name:
<resources>
<string name="app_name">sdk</string>
</resources>
android:name——Application子類(lèi)的全名抱冷。比如如果是:com.XXX.mgp.sdk.platform.channel.ChannelApplication梢褐。當(dāng)應(yīng)用啟動(dòng)時(shí)盈咳,這個(gè)類(lèi)的實(shí)例被第一個(gè)創(chuàng)建边翼。肯定有一個(gè)這個(gè)類(lèi)的實(shí)現(xiàn)繼承自Application:
這個(gè)屬性是可選的丈积,大多數(shù)APP都不需要這個(gè)屬性债鸡。在沒(méi)有這個(gè)屬性的時(shí)候,Android會(huì)啟動(dòng)一個(gè)Application類(lèi)的實(shí)例唬滑。
如果第一個(gè)字符是點(diǎn)('.'),就是相對(duì)名字擒悬,需要加上之前設(shè)置的package包名稻艰,就是其完整的類(lèi)的名字。
————————————————<activity>標(biāo)簽
作為<application>的子節(jié)點(diǎn)僧凤,聲明一個(gè)實(shí)現(xiàn)應(yīng)用可視化界面的Activity(Activity類(lèi)的子類(lèi))這是元素中必要的子元素拼弃。一個(gè)activity就相當(dāng)于安卓的一個(gè)界面摇展,一般應(yīng)用程序會(huì)有很多界面。所有Activity都必須由清單文件中的<activity>元素表示盯孙。任何未在該處聲明的Activity對(duì)系統(tǒng)都不可見(jiàn)祟滴,并且永遠(yuǎn)不會(huì)被執(zhí)行。它的屬性包括:
android:name——Activity子類(lèi)的名字骑晶。表明與哪個(gè)類(lèi)關(guān)聯(lián)的。
android:label——可以覆蓋application中設(shè)置的值桶蛔。
android:configChanges——在運(yùn)行時(shí)發(fā)生對(duì)應(yīng)的配置更改時(shí)仔雷,Activity保持運(yùn)行狀態(tài)舔示,并且系統(tǒng)會(huì)調(diào)用其 onConfigurationChanged() 方法進(jìn)行處理。不設(shè)置的時(shí)候惕稻,即默認(rèn)情況下是關(guān)閉 Activity 然后將其重新啟動(dòng),而使用該屬性聲明配置將阻止 Activity 重新啟動(dòng)肘迎。
注:應(yīng)避免使用該屬性,并且只應(yīng)在萬(wàn)不得已的情況下使用姻蚓。 如需了解有關(guān)如何正確處理配置更改所致重新啟動(dòng)的詳細(xì)信息匣沼,請(qǐng)閱讀處理運(yùn)行時(shí)變更。
這屬性可以設(shè)置的項(xiàng)很多释涛,這里列出常用的項(xiàng):
- orientation——屏幕方向發(fā)生了變化唇撬,比如用戶(hù)旋轉(zhuǎn)了設(shè)備
- keyboardHidden——鍵盤(pán)無(wú)障礙功能發(fā)生了變化,比如用戶(hù)顯示了硬件鍵盤(pán)
- screenSize——屏幕大小發(fā)生了變化
設(shè)置多個(gè)值使用“|”分隔 — 例如豫柬,“l(fā)ocale|navigation|orientation”扑浸。
所有這些配置變更都可能影響應(yīng)用看到的資源值。 因此喝噪,調(diào)用 onConfigurationChanged() 時(shí),通常有必要再次獲取所有資源(包括視圖布局酝惧、可繪制對(duì)象等),以正確處理變化晚唇。
android:theme(該屬性定義了應(yīng)用使用的主題的缺亮,它是一個(gè)指向style資源的引用桥言,設(shè)定主題格式。各個(gè)activity可以用自己的theme屬性設(shè)置自己的主題并鸵。也可以在<application>中設(shè)置默認(rèn)的theme扔涧。
————————————————<meta-data>標(biāo)簽
標(biāo)簽指定額外的數(shù)據(jù)項(xiàng)届谈,該數(shù)據(jù)項(xiàng)是一個(gè)name-value對(duì)艰山,提供給其父組件咏闪。這些數(shù)據(jù)會(huì)組成一個(gè)Bundle對(duì)象,可以由PackageItemInfo.metaData字段使用纵装。雖然可以使用多個(gè)元素標(biāo)簽据某,但是不推薦這么使用。如果有多個(gè)數(shù)據(jù)項(xiàng)要指定挽唉,推薦做法是:將多個(gè)數(shù)據(jù)項(xiàng)合并成一個(gè)資源才避,然后使用一個(gè)包含進(jìn)去。
屬性有:
android:name 數(shù)據(jù)項(xiàng)名稱(chēng)棘劣,這是一個(gè)唯一值楞遏。
android:resource 一個(gè)資源的引用
android:value 數(shù)據(jù)項(xiàng)的值 字符串可以
父節(jié)點(diǎn)可以是:
< activity >
< activity-alias >
< application >
< provider >
< receiver >
但不同的父元素,在代碼中讀取使用的方法也不同糙俗。
詳見(jiàn):https://blog.csdn.net/o190847959/article/details/46702001
另外例子:
https://blog.csdn.net/zhe_ge_sha_shou/article/details/79378672?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
————————————————<intent-filter>標(biāo)簽
<intent-filter>元素標(biāo)簽预鬓,用在是activity的子節(jié)點(diǎn)
指明這個(gè)activity可以以什么樣的意圖(intent)啟動(dòng)。其下又包含好幾個(gè)子元素:
<action>元素標(biāo)簽 表示activity作為一個(gè)什么動(dòng)作啟動(dòng)劈彪,android.intent.action.MAIN 表示作為主activity啟動(dòng)顶猜。
<category>元素標(biāo)簽 這是action元素的額外類(lèi)別信息,android.intent.category.LAUNCHER表示這個(gè)activity為當(dāng)前應(yīng)用程序優(yōu)先級(jí)最高的Activity长窄。
————————————————<uses-feature>標(biāo)簽
<uses-feature>標(biāo)簽 這東西的作用是將APP所依賴(lài)的硬件或者軟件條件告訴別人纲菌。Google Play利用這個(gè)元素的值從不符合應(yīng)用需要的設(shè)備上將應(yīng)用過(guò)濾翰舌。比如可以要求設(shè)備同時(shí)具有nfc功能矗愧。藍(lán)牙功能,相機(jī)功能夜涕。用字符串標(biāo)識(shí)属愤。
————————————————<uses-permission>標(biāo)簽
告訴Android系統(tǒng)并向系統(tǒng)請(qǐng)求所需的權(quán)限。
android:name——指定申請(qǐng)權(quán)限的名字:可以使標(biāo)準(zhǔn)的系統(tǒng)權(quán)限驾胆;可以是app的自定義權(quán)限(詳見(jiàn)https://blog.csdn.net/o190847959/article/details/53304432中的例子)贱呐;可以是其他app中的權(quán)限
android:maxSdkVersion——設(shè)置該權(quán)限的最大版本號(hào),因?yàn)橛行?quán)限再新的版本中就無(wú)需再申請(qǐng)了驳阎。
app的系統(tǒng)權(quán)限::
https://developer.android.com/reference/android/Manifest.permission.html
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.NFC" />
————————————————
<service>服務(wù)
<receiver>
<provider>
————————————————
Unity Plugin下保存的AndroidManifest.xml和打包成Apk以后的AndroidManifest.xml的區(qū)別
如果Plugin下沒(méi)有自己寫(xiě)的AndroidManifest馁蒂,打包的時(shí)候Unity會(huì)用它默認(rèn)的AndroidManifest(mac中存在 unity.app/Contents/PlaybackEngines/AndroidPlayer下面,windows在安裝路徑的\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Apk下面饵隙,當(dāng)你在進(jìn)行打包apk的時(shí)候沮脖,unity會(huì)拷貝該路徑下的所有參數(shù))。
變化的一些值
- package="com.unity3d.player"打包的時(shí)候Unity會(huì)將其修改為Player Setting的Bundle Identifier驶俊。
- android:versionCode以及android:versionName這兩部分的內(nèi)容在打包時(shí)會(huì)根據(jù)Player Setting里面的Version以及Bundle Version Code的內(nèi)容來(lái)進(jìn)行修改涮因,所以在xml中配置也會(huì)被替換养泡。
PlayerSettings.bundleVersion string類(lèi)型--》playersetting界面中的"Version" (界面中加*就代表多個(gè)平臺(tái)公用)
PlayerSettings.Android.bundleVersionCode int類(lèi)型---》playersetting界面中的 "Bundle Version Code"
- android:icon以及android:label這兩個(gè)對(duì)應(yīng)的是應(yīng)用的圖標(biāo)以及應(yīng)用名稱(chēng)。如果不改的話(huà)澜掩,Unity也會(huì)自動(dòng)根據(jù)Player Setting里面的內(nèi)容來(lái)進(jìn)行修改。
- android:debuggable="true"這個(gè)在打包的時(shí)候Unity也會(huì)自動(dòng)根據(jù)Build Setting里面的Development Build選項(xiàng)自動(dòng)進(jìn)行修改刚陡。
- activity里面的android:name株汉,這個(gè)name只的是該activity需要運(yùn)行的哪個(gè)Java的Activity的類(lèi)。如果不修改蝙云,加載的就是Unity默認(rèn)Activity的類(lèi)路召。這篇文章需要把默認(rèn)的Activity改成剛剛我們的實(shí)現(xiàn),所以股淡,我們把剛剛寫(xiě)好的那個(gè)Activity的完整名稱(chēng)寫(xiě)上去(包括包名還有類(lèi)名)。
- activity里面的android:label贾铝,這個(gè)是在桌面上圖標(biāo)下面寫(xiě)的那一行文字早敬,也是應(yīng)用的名稱(chēng)。不修改的話(huà)Unity會(huì)幫你維護(hù)水孩。
- meta-data的這一行的name值是key琐驴,value值就是這個(gè)key對(duì)應(yīng)的內(nèi)容。meta-data可以根據(jù)需要自定義多個(gè)宙刘,但是key值不能重復(fù)牢酵,上面代碼里面的unityplayer.UnityActivity應(yīng)該是寫(xiě)給Unity看的,讓Unity知道他自己是運(yùn)行在這個(gè)Activity上馍乙。
- android:minSdkVersion 和 android:targetSdkVersion 修改為Player Setting的設(shè)置的值
- 合并aar包中的AndroidManifest.xml垫释。
- 把可讀的資源路徑都換成了ID棵譬,因?yàn)檫M(jìn)行了資源打包了预伺,對(duì)res下面的資源。
minSdkVersion 和 targetSdkVersion 和 compileSdkVersion
minSdkVersion和targetSdkVersion設(shè)置的值表示這兩個(gè)區(qū)間的設(shè)備能正常使用這個(gè)app脏嚷,表示您已經(jīng)在您指定的版本上測(cè)試了應(yīng)用程序(大概包括該版本)料滥。這更像是一個(gè)認(rèn)證或簽署,你是給Android操作系統(tǒng)作為一個(gè)提示高每,它應(yīng)該如何處理您的應(yīng)用程序的操作系統(tǒng)功能。
(設(shè)備的android系統(tǒng)版本的使用的sdkversion是不一樣的践宴,比如Android5.0對(duì)應(yīng)的targetSDK設(shè)置為21)。
一般來(lái)說(shuō)每次發(fā)布新的版本带欢,targetSdkVersion應(yīng)該遞增以匹配最新的api級(jí)別烤惊,如果有變,然后在相應(yīng)的平臺(tái)版本上徹底測(cè)試應(yīng)用程序渡贾。
而compileSdkVersion可以不變雄右,除非你需要要最新的sdk中功能,那么需要相應(yīng)的改變compileSdkVersion囤屹,舉一個(gè)樣例:
假如你想給你的app增加大量的手勢(shì)操作(sdk 7才引入的),然而這些手勢(shì)操作能夠被Button啊或menu等取代肋坚,在這樣的情況下,手勢(shì)操作就是一個(gè)額外的加分功能粟判,而不是一個(gè)必須的功能峦剔。
然后你所要做的就是要在代碼里推斷版本號(hào)吝沫,假設(shè)是大于等于7的版本號(hào)中就使用手勢(shì)操作递礼,小于7的版本號(hào)中就使用button等取代。然后你把targetSDK設(shè)置為7脊髓,把minSDK設(shè)置為低一些。這樣使用了新手機(jī)的用戶(hù)就能夠體驗(yàn)到你app中酷炫的新功能了恭朗,老用戶(hù)也能正常運(yùn)行依疼。
platformBuildVersionCode="27" 和 platformBuildVersionName="8.1.0"
這是由編譯器添加的,指明由哪個(gè)android sdk版本編譯的膀值,27也就是常說(shuō)的api level
platformBuildVersionName="8.1.0" 也就是這個(gè)版本的android sdk 的可讀的一個(gè)字符串的名字误辑。
platformBuildVersionCode 應(yīng)該是跟 compileSdkVersion 一個(gè)意思吧。