自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

想讓Android更獨特?來試試自己DIY一套圖標(biāo)包

移動開發(fā) Android
眾所周知,Android 的特點之一,在于它為用戶提供了相對而言更大的自由度,而這也成了很多智能手機愛好者選擇 Android 的理由之一。要知道,對于個性化來說,Android 用戶除了更換壁紙鈴聲,還能更換應(yīng)用圖標(biāo)、系統(tǒng)配色、字體、主題、桌面小工具......甚至整個桌面啟動器。

眾所周知,Android 的特點之一,在于它為用戶提供了相對而言更大的自由度,而這也成了很多智能手機愛好者選擇 Android 的理由之一。要知道,對于個性化來說,Android 用戶除了更換壁紙鈴聲,還能更換應(yīng)用圖標(biāo)、系統(tǒng)配色、字體、主題、桌面小工具......甚至整個桌面啟動器。

[[222971]]

如此之多的自定義項目,讓每臺 Android 手機都可以做到「千機千面」,體現(xiàn)屬于你自己的個性。

那么,如果你之前研究過如何個性化 Android,你肯定聽說過「圖標(biāo)包」這個概念。一般來說,圖標(biāo)包在 Android 上,指的是一些適用于一些第三方啟動器的自定義圖標(biāo)集合包,通常作為一個 APK 進(jìn)行安裝。

但這些 Android 圖標(biāo)包畢竟都是公開下載的,動手能力強的朋友們可能覺得還不夠個性想自己畫一套;也有的看上了別家 ROM 主題中的圖標(biāo),想在自己的啟動器上用......

問題來了,有沒有可能自己動手,DIY 一套圖標(biāo)包呢?要是你動了這個念頭,恭喜你,本文就是為你準(zhǔn)備的。

何為 NanoIconPack

NanoIconPack 是一套簡單輕量的圖標(biāo)包模版,由國人 By_syk 開發(fā),并以 Apache 許可證 2.0 版開源,任何人都可以基于這套模版二次開發(fā)圖標(biāo)包。

 

[[222972]]

這套模版功能不多,但勝在簡潔實用,界面友好,同時兼容性也非常高。除了「老三樣」Nova、Apex 和 ADW,它還支持各種其他沿用圖標(biāo)包規(guī)范的啟動器。

已經(jīng)有很多圖標(biāo)包是基于 NanoIconPack 二次開發(fā)而成,其中包括 PDC 圖標(biāo)包、Cardicons Ⅱ 圖標(biāo)包 等。如果你也想自己繪制圖標(biāo)并打包,那么選擇在 NanoIconPack 的基礎(chǔ)上進(jìn)行二次開發(fā),是一個非常好的選擇。

理論上,二次開發(fā) NanoIconPack 最好是擁有一定的 Android 開發(fā)基礎(chǔ);但如果你完全沒有接觸過編程,也沒關(guān)系,只要跟著本文中描述的步驟走,膽大心細(xì),你也可以打造出屬于自己的一款圖標(biāo)包。

準(zhǔn)備圖標(biāo)

既然要做圖標(biāo)包,準(zhǔn)備好圖標(biāo)自然是硬性條件。你可以選擇自己畫一套圖標(biāo),還可以從其他 ROM(例如 MIUI)的主題文件中提取。

需要注意的是,圖標(biāo)的尺寸雖然沒有硬性規(guī)定,但最好是 192*192 px,這一數(shù)值也是 Android 上 xxxhdpi 分辨率圖標(biāo)的默認(rèn)大小。更大也不是不可以,但不要太大,否則可能會影響到啟動器的正常顯示。

圖標(biāo)的命名也有些講究,開發(fā)者 By_syk 在 Wiki 上給出了如下命名規(guī)則建議:

  • 圖標(biāo)文件名(不包括 .png 擴展名)僅使用小寫字母+數(shù)字+下劃線([a-z\d_]+)
  • 不能使用數(shù)字打頭(\D.*)
  • 重名則以下劃線加數(shù)字添加后綴(_1)
  • 為了避免與上一條重名規(guī)則沖突,應(yīng)用名中的英文與數(shù)字之間不要用下劃線隔開。例如相機 360 應(yīng)命名為 camera360而不是 camera_360.png

正確的例子:

  • cuto.png chrome_dev.png camera_1.png
  • 錯誤的例子:Calendar.png 500px.png camera_360.png

因為模版的文件中已存在占位符,個人建議將數(shù)個常用的系統(tǒng)圖標(biāo)以如下方式命名,以節(jié)省一定的工作量:

  • 計算器 - calculator
  • 日歷 - calendar
  • 相機 - camera
  • 時鐘 - clock
  • 通訊錄 - contacts
  • 電子郵件 - email
  • 圖庫 - gallery
  • 音樂 - music
  • 電話 - phone
  • 設(shè)置 - settings
  • 短信 - sms

準(zhǔn)備好之后,將它們保存到一個文件夾備用。

 

本文中將使用提取自 MIUI「凹凸世界」主題文件中的圖標(biāo)為范例。圖標(biāo)原作者:hynick

安裝 Android Studio 和 SDK 工具 & 注冊 GitHub 賬號

為了繼續(xù)接下來的開發(fā)工作,你需要安裝一個 Android Studio 以及相應(yīng)的 SDK 工具包。

 

請務(wù)必注意,在安裝過程中可能會遇到需要對網(wǎng)絡(luò)環(huán)境進(jìn)行處理才能解決的錯誤,請在網(wǎng)絡(luò)上查找相應(yīng)教程進(jìn)行解決。

本文中將不再贅述相關(guān)安裝過程。

同時,如果你之前沒有 GitHub 賬號,你還需要去新注冊一個。注冊 GitHub 賬號很簡單,點擊 Sign Up 后按提示輸入對應(yīng)信息即可。在此同樣不詳細(xì)討論了。

將項目導(dǎo)入 Android Studio

萬事準(zhǔn)備周全后,打開 Android Studio,在右上角找到 File 選項,選擇 New → Project from Version Control → GitHub:

 

然后會彈出 Clone Repository 窗口,如圖所示,在 URL 處填入 https://github.com/by-syk/NanoIconPack.git (此時可以點擊 Test 按鈕測試能否正常訪問),將 Directory Name 改成自己為圖標(biāo)包起的名字,點擊 Clone .

 

如果之前沒有用 GitHub 賬號登錄過 Android Studio,那此時會提示你登錄 GitHub,按提示正常登錄后執(zhí)行上述操作即可。

接下來,你需要耐心等待 Cloning 操作完成。

一旦完成后, Android Studio 便會自動顯示項目界面:

 

界面中左側(cè)顯示的是項目的文件夾與文件,其中的 /nanoiconpack 為庫代碼,/app 為應(yīng)用代碼。下文中的內(nèi)容,基本上只涉及到對應(yīng)用代碼,也就是 /app 目錄的修改。

添加圖標(biāo)

該往模版里添加圖標(biāo)了。找到 /app 下的 /res/drawable 目錄,右鍵點擊,選擇「Show in Explorer」選項,此時應(yīng)該會顯示 res 文件夾,雙擊打開 drawable-nodpi :

 

此時將里面的文件全部刪除,再將之前準(zhǔn)備好的圖標(biāo)拷貝進(jìn)去。

如果你還準(zhǔn)備了 384*384 px 的大尺寸圖標(biāo)樣本,你可以回到上一級目錄中,將那些圖標(biāo)拷貝到 mipmap-nodpi 文件夾中,這樣會讓圖標(biāo)包應(yīng)用中自動顯示高清圖標(biāo)。但這些圖標(biāo)僅用于展示,不會應(yīng)用于啟動器。

接下來,在 Android Studio 中找到 /res/drawable/values 下的 icon_pack.xml,這其中包含了兩個 icon_pack.xml 文件,有一個帶有中國國旗圖標(biāo),作為簡體中文本地化的版本。

 

這個文件的作用是記錄圖標(biāo)包中包含的圖標(biāo)文件名,以及圖標(biāo)文件相對應(yīng)的應(yīng)用名。以 values\icon_pack.xml 文件為例,其中第一部分為圖標(biāo)的文件名:

  1. <!-- File name (no suffix) list of all icons in /res/drawable-nodpi/ --> 
  2. <!-- Names like "Calendar", "500px", "camera_360" are not allowed or recommended. --> 
  3. <string-array name="icons" translatable="false"
  4.     <!-- A --> 
  5.     <item>alipay</item> 
  6.     <item>amazon_kindle</item> 
  7.     <item>autonavi</item>   

 

第二部分為每個圖標(biāo)文件相對應(yīng)的英文應(yīng)用名:

  1. <!-- Corresponding app name list of all icons in /res/drawable-nodpi/ --> 
  2. <string-array name="icon_labels"
  3.     <!-- A --> 
  4.     <item>Alipay</item> 
  5.     <item>Amazon Kindle</item> 
  6.     <item>Autonavi Maps</item> 

 

請謹(jǐn)記,每個圖標(biāo)文件名與應(yīng)用名之間都必須呈一一對應(yīng)關(guān)系。也就是說,不能出現(xiàn)寫了文件名,但應(yīng)用名有些寫了,有些不寫的情況。雖然你可以選擇全部不寫應(yīng)用名,但我不推薦這么做。

編輯完畢后,就可以打開帶著國旗的 zh\icon_pack.xml,這一塊用于填寫中文應(yīng)用名:

  1. <!-- Corresponding app name list of all icons in /res/drawable-nodpi/ --> 
  2. <string-array name="icon_labels"
  3.     <!-- A --> 
  4.     <item>支付寶</item> 
  5.     <item>亞馬遜 Kindle</item> 
  6.     <item>高德地圖</item> 

 

自此,icon_pack.xml 修改完成。接下來需要修改的是 drawable.xml,位于 /res/xml 目錄下:

 

這個文件的作用又是什么呢?你可以在 Nova Launcher 中直接瀏覽圖標(biāo)包,而且會發(fā)現(xiàn)它還能分門別類地顯示圖標(biāo):

 

而這個特性的背后就是 drawable.xml 的功勞了:它用于給 Nova Launcher 等啟動器提供圖標(biāo)選擇列表,同時告訴啟動器哪些圖標(biāo)屬于哪個類型。

NanoIconPack 模版默認(rèn)提供了三個不同的分類。如果你嫌麻煩,就基于這三個分類編輯就好。第一個分類「Basic」中存在一些占位符:

  1. <category title="Basic" /><!-- Copy basic icons here from All category --> 
  2. <!--<item drawable="browser" />--> 
  3. <!--<item drawable="calculator" />--> 
  4. <item drawable="calendar" /> 
  5. <!--<item drawable="camera" />--> 
  6. <!--<item drawable="clock" />--> 

你或許已經(jīng)注意到了,item drawable= 后跟著的是每個圖標(biāo)的文件名。所以,務(wù)必注意不要寫錯。

如果你聽了我上文中的勸告(命名常用系統(tǒng)應(yīng)用的圖標(biāo)文件名),你現(xiàn)在需要做的就是,把占位符開頭的 刪除。就像這樣:

  1. <category title="Basic" /><!-- Copy basic icons here from All category --> 
  2. <item drawable="browser" /> 
  3. <item drawable="calculator" /> 
  4. <item drawable="calendar" /> 
  5. <item drawable="camera" /> 
  6. <item drawable="clock" /> 

然后,剩下的兩個分類「Game」和「Alternative」,你可填寫可不填寫,如果不想填寫的話,刪掉就好。但是結(jié)尾的「All」分類一定要填,像這樣將圖標(biāo)包的所有文件都填進(jìn)去:

 

填寫完畢后,這個文件的工作也結(jié)束了。最后,我們要找到與 drawable.xml 同樣位于 /res/xml 目錄下的 appfilter.xml。

可別小看它,這個文件非常重要!它決定了每個圖標(biāo)與程序之間的對應(yīng)關(guān)系,也就是說,因為有它的存在,啟動器才可以自動識別圖標(biāo)包中適配的應(yīng)用,并將圖標(biāo)覆蓋到每個應(yīng)用上。

這個文件由許多條 代碼所組成,一條代碼的結(jié)構(gòu)大致如此:

 

  1. <item  
  2. component="ComponentInfo{[包名]/[啟動 Acrivity 名]}"  
  3. drawable="[圖標(biāo)文件名]" /> 

應(yīng)用包名是每個 Android 應(yīng)用的唯一標(biāo)識符,系統(tǒng)依據(jù)包名來判斷并識別應(yīng)用??v使一個應(yīng)用改名換姓,只要包名一致,系統(tǒng)就會認(rèn)為它們是同一個應(yīng)用。

舉個例子:有一天,我派的 Cuto 壁紙突然決定將應(yīng)用名改成 Otuc,圖標(biāo)也改掉了。

但在安裝 Otuc 時,由于我派在改名字的時候沒有改掉包名,系統(tǒng)依然判斷「Otuc」和「Cuto」是同一個應(yīng)用,會直接將舊應(yīng)用做更新處理,而不是重新裝一個新的。

 

另一個「啟動 Activity」是一個比較復(fù)雜的概念,簡單來說就是,它決定了當(dāng)你在啟動器上點擊圖標(biāo)時,應(yīng)用會打開哪個頁面。

所以,這兩個元素是圖標(biāo)包區(qū)分應(yīng)用的關(guān)鍵;而這也允許了不同應(yīng)用使用同一個圖標(biāo)文件。

舉個例子,在一臺 Google Pixel 上,「相機」應(yīng)用的 適配代碼大致是這樣的:

 

  1. <item 
  2.     component="ComponentInfo{com.google.android.GoogleCamera/com.android.camera.CameraLauncher}" 
  3.     drawable="camera" /> 

而對于一加手機而言,適配代碼則會變成:

 

  1. <item 
  2.     component="ComponentInfo{com.oneplus.camera/com.oneplus.camera.OPCameraActivity}" 
  3.     drawable="camera" /> 

看出來了嗎?由于手機廠商的不同,「相機」應(yīng)用的包名和啟動 Activity 均有區(qū)別;但以這種方式,它們都可以調(diào)用圖標(biāo)包中的 camera.png 文件。

那么,問題又來了:該去哪里找這些包名和啟動 Activity 呢?畢竟對于這些基本應(yīng)用來說,每家手機廠商可能都不一樣,工作量還是頗大的。

好在開發(fā)者 By_syk 為我們提供了一個值得參考的模版文件,其中已經(jīng)包含了很多系統(tǒng)應(yīng)用以及常見應(yīng)用的 代碼,只要尋找自己圖標(biāo)包中包含的應(yīng)用,然后復(fù)制粘貼就可以了。

 

但如果你想要適配的應(yīng)用,模版中也不存在,怎么辦?這時候就需要用到 Package Name Viewer 2.0 這款小工具了。

 

小工具會將手機中已安裝的應(yīng)用分為用戶應(yīng)用和系統(tǒng)應(yīng)用兩類,你可以選擇手動翻找,或是進(jìn)行搜索。再用 Cuto 做個例子,在列表中找到 Cuto 之后,點擊就能看到這個窗口:

 

上方的 com.sspai.cuto.android 即為包名,下方的 com.sspai.cuto.android.EntryActivity 自然就是啟動 Activity 了。你可以選擇復(fù)制并發(fā)送到電腦上,按上方的說明填寫 代碼。

至此,添加圖標(biāo)的部分就結(jié)束了。這一塊的具體工作量取決于你想要適配的圖標(biāo)多少,但也是最麻煩的一部分,需要有一定的耐心去編輯文件。

好在,結(jié)束了這一塊之后圖標(biāo)包已經(jīng)趨近完成了,接下來的工作都很簡單。

配置圖標(biāo)包

正如上文所述,Android 系統(tǒng)需要依照應(yīng)用包名來識別應(yīng)用,所以你也要為你的圖標(biāo)包起一個包名,順便還要為它設(shè)置一個版本號。

找到左側(cè)的 Gradle Scripts 選項,雙擊打開 build.gradle (Module: app) :

 

再找到文件中的 defaultConfig 區(qū)域。其中 applicationId 即為包名:

 

包名的起名方式可以參考如下模版:com.[你的名字].iconpack.[圖標(biāo)包的名字] (均只能使用英文字母)。

versionCode 和 versionName 均為版本號的一部分,前者可以理解為「內(nèi)部版本號」,后者則是顯示在前臺的版本號,可以依據(jù)你自己的想法進(jìn)行設(shè)置。

另外在這一部分還需要注意,如果你希望你的圖標(biāo)包能向下兼容(最低 Android 5.0),那么你需要填入 minSdkVersion 和 targetSdkVersion.

后者填入最新的 SDK 版本即可(Android 8.1, API Level 27),而前者決定了應(yīng)用最低可以在哪個版本的系統(tǒng)上安裝,建議填入代表 Android 5.0 的 21.

既然圖標(biāo)包也是一個應(yīng)用,那么你顯然需要為它準(zhǔn)備一個圖標(biāo) —— 嚴(yán)格來說是四個。

說是四個圖標(biāo),原因是應(yīng)用圖標(biāo)文件 ic_launcher.png 分布在 /mipmap-hdpi、/mipmap-xhdpi、/mipmap-xxhdpi、/mipmap-xxxhdpi 這四個目錄下,它們分別代表著四個不同的分辨率:72*72、96*96、144*144 和 192*192。

 

不過這倒不是什么麻煩事,做一個最大分辨率的圖標(biāo),再分別縮放保存即可。

接下來,回到 Android Studio 的項目中,我們需要編輯一下 /res/values 下的 strings.xml。

 

這個文件是用來決定圖標(biāo)包的名字、作者,以及顯示在圖標(biāo)包「關(guān)于」界面中的內(nèi)容的。

 

app_name 處用于填寫圖標(biāo)包的名字,developer_name 處填寫你自己的名字。

文件下面的內(nèi)容會在「關(guān)于」界面中顯示。 NanoIconPack 默認(rèn)自帶了很多內(nèi)容占位符,包括圖標(biāo)包作者、捐贈信息等。如果你不需要顯示某項信息,可以自行留空,但不要刪除。

 

這個文件和 icon_pack.xml 一樣,也有一個 帶國旗的 zh\ 版本(如上圖所示),記得一并編寫。最后呈現(xiàn)在應(yīng)用中的效果就像這樣:

 

信息允許換行,但需要使用 \n 作為換行符。另外,一些特定符號(比如說版權(quán)所有的©️)需要使用代碼代替,請注意 Android Studio 提示的錯誤信息。

NanoIconPack 還可以編輯圖標(biāo)包應(yīng)用的主題色,相關(guān)文件是位于 /res/values 下的 colors.xml:

 

如果你不太熟悉顏色的代碼以及搭配,可以試試在 Material Palette 網(wǎng)站上隨便選兩個看上去順眼的顏色,它會自動幫你生成一套搭配方案。

 

具體的效果如下:

 

到了這一步,圖標(biāo)包的開發(fā)工作已經(jīng)接近尾聲,接下來要做的,就只剩測試和打包了!

測試并打包

萬事俱備,只欠打包;你很快就能用上自己 DIY 的圖標(biāo)包了!

不過在打包之前,最好還是在設(shè)備上測試一下,看看有沒有出現(xiàn)什么問題。首先要確認(rèn)在 Android 設(shè)備上啟用了開發(fā)者選項,并且啟用 USB 調(diào)試功能。

 

然后點擊 Android Studio 上的 Run 按鈕,會彈出窗口,讓你選擇連接到電腦上的設(shè)備:

 

接下來,點擊 OK 即可。如果一切順利,你就會發(fā)現(xiàn)設(shè)備上自動打開了圖標(biāo)包應(yīng)用,確認(rèn)無誤后,就可以打包為 APK 安裝包了。

在 Android Studios 中找到 Build → Generate Signed APK:

 

該選項用于生成已經(jīng)簽名好的 APK 安裝包,至于如何進(jìn)行操作,建議參考 Google 官方的文檔。

只有最后一步需要注意,務(wù)必在 Versions 處打上 V1 的勾,不然可能會出現(xiàn)無法安裝的情況:

 

當(dāng)然,生成安裝包時也有可能會出錯,具體的錯誤信息會顯示在底部的 Messages 處,請善用搜索引擎,網(wǎng)絡(luò)上一定會有解決方案。

好了,你的 DIY 圖標(biāo)包已經(jīng)正式打包完成了!快去啟動器上換上試試吧!

 

責(zé)任編輯:未麗燕 來源: 少數(shù)派
相關(guān)推薦

2014-12-02 10:02:21

Android異步任務(wù)

2020-10-19 10:35:43

iOS設(shè)備尺寸

2020-05-27 15:10:31

戴爾

2020-03-06 10:48:29

業(yè)務(wù)中斷業(yè)務(wù)安全

2020-07-10 12:06:28

WebpackBundleless瀏覽器

2012-07-03 09:38:42

前端

2019-10-11 15:58:25

戴爾

2021-05-27 07:12:19

單點登錄系統(tǒng)

2020-08-25 08:03:59

測試Sharness結(jié)構(gòu)

2025-04-07 07:45:00

AI模型神經(jīng)網(wǎng)絡(luò)

2009-06-23 18:01:45

Ajax框架源代碼

2018-08-31 08:42:48

LinuxUnix實用程序

2017-01-22 08:49:29

Android庫開源程序員數(shù)據(jù)

2022-06-17 11:10:43

PandasPolarsPython

2020-12-02 08:31:47

Elasticsear

2020-11-04 16:34:45

單元測試技術(shù)

2010-06-09 17:00:43

UML試題

2023-03-03 17:00:00

部署Linux內(nèi)核

2012-10-24 09:42:27

數(shù)據(jù)安全BYOD云數(shù)據(jù)
點贊
收藏

51CTO技術(shù)棧公眾號