众所周知,安卓系统的一个特点就是为用户提供了相对更大的自由度,这也成为了很多智能手机爱好者选择安卓系统的原因之一.要知道,为了个性化,Android用户除了可以更换壁纸和铃声,还可以更换应用图标、系统颜色、字体、主题、桌面小工具……甚至整个桌面启动器。如此多的自定义项,让每一部安卓手机都可以“千机千面”,彰显自己的个性。那么,如果你之前研究过如何对Android进行个性化设置,那么你一定听说过“图标包”的概念。Android上的图标包一般是指一些第三方启动器的自定义图标集合包,通常以APK的形式安装。但是这些安卓图标包毕竟都是公开下载的,动手能力强的朋友可能会觉得不够个性,想自己画一套;有些人看中了其他ROM主题中的图标,想在自己的启动器上使用它们。.....问题来了,可不可以自己动手,DIY一套图标包?如果你有这个想法,恭喜你,这篇文章就是为你准备的。什么是NanoIconPackNanoIconPack是一套简单轻量级的图标包模板,由国人By_syk开发,Apache许可2.0版本开源,任何人都可以基于这套模板二次开发图标包。这套模板功能不多,但简单实用,界面友好,兼容性高。除了“老三”Nova、Apex和ADW之外,它还支持其他各种遵循图标包规范的启动器。基于NanoIconPack开发了很多图标包,包括PDC图标包、CardiconsⅡ图标包等,如果你也想自己画图标打包,选择在此基础上进行二次开发是一个非常不错的选择NanoIconPack的。理论上,NanoIconPack的二次开发最好有一定的Android开发基础;但如果你完全没有编程经验也没关系,只要按照本文介绍的步骤,你也可以创建自己的图标包。准备图标既然要做图标包,那么准备图标自然是必备条件。你可以选择自己画一套图标,或者从其他ROM(比如MIUI)中提取出来。需要注意的是,虽然图标的大小没有硬性规定,但最好是192*192px,这也是Android默认的xxxhdpi分辨率图标大小。大一点也不是不行,但也不能太大,否则可能会影响发射器的正常显示。图标的命名也有点讲究。开发者By_syk在Wiki上给出了如下命名规则建议:图标文件名(不包括.png扩展名)只能使用小写字母+数字+下划线([a-z\d_]+)不能使用数字开头(\D.*)如果名称重复,加下划线和数字加后缀(_1)为了避免和前面的重名规则冲突,应用名称中不要用下划线分隔英文和数字。例如camera360应该命名为camera360而不是camera_360.png正确的例子:cuto.pngchrome_dev.pngcamera_1.png错误的例子:Calendar.png500px.pngcamera_360.png因为有已经是模板文件中的占位符。个人建议将几个常用的系统图标命名如下,这样可以节省一定的工作量:计算器-计算器日历-日历相机-相机时钟-通讯录-通讯录邮箱-邮箱图库-图库音乐-音乐手机-手机设置-设置短信-短信准备好后,将它们保存到文件夹中以备将来使用。本文将以MIUI“凹凸世界”主题文件中提取的图标为例。图标原作者:hynick安装AndroidStudio和SDK工具&注册GitHub账号为了继续接下来的开发工作,需要安装一个AndroidStudio和相应的SDK工具包。请注意,在安装过程中,您可能会遇到需要解决网络环境的错误。请在网上找相应的教程解决。本文不再重复相关安装过程。同时,如果之前没有GitHub账号,需要重新注册一个。注册GitHub账号非常简单,点击SignUp,根据提示输入相应信息即可。这里也不详细讨论。将项目导入AndroidStudio一切准备就绪后,打开AndroidStudio,找到右上角的File选项,选择New→ProjectfromVersionControl→GitHub:然后会弹出CloneRepository窗口,如图,在URL中填写https://github.com/by-syk/NanoIconPack.git(可以点击Test按钮测试是否可以正常访问),将DirectoryName改成你为图标包创建的名字,然后单击克隆。如果你之前没有用GitHub账号登录过AndroidStudio之后,此时会提示你登录GitHub,按照提示正常登录后进行上述操作即可。接下来,您需要耐心等待克隆操作完成。完成后,AndroidStudio会自动显示项目界面:界面左侧显示项目的文件夹和文件,其中/nanoiconpack为库代码,/app为应用代码。下面的内容基本只涉及修改应用代码,即/app目录。添加图标现在是向模板添加图标的时候了。找到/app下的/res/drawable目录,右击,选择“在资源管理器中显示”选项。这时候应该会显示res文件夹。双击打开drawable-nodpi:此时删除里面的所有文件,然后将之前准备好的图标复制进去,如果你也准备了384*384px的大图图标样本,可以去回到上层目录,将这些图标复制到mipmap-nodpi文件夹下,图标包应用中会自动显示高清图标。但是,这些图标仅供显示,不会应用于启动器。接下来在AndroidStudio中找到/res/drawable/values下的icon_pack.xml,里面包含两个icon_pack.xml文件,一个带有中国国旗图标,为简体中文本地化版本。该文件的作用是记录图标包中包含的图标文件名,以及图标文件对应的应用程序名称。以values\icon_pack.xml文件为例,第一部分是图标的文件名:- alipay
- amazon_kindle
- autonavi
第二部分是每个图标文件对应的英文应用名:- Alipay
- AmazonKindle
- AutonaviMaps
请注意一定要一一对应每个图标文件名和应用程序名的对应关系。也就是说,不会出现写文件名的情况,而是有的写了应用名,有的不写。虽然你可以选择完全不写应用程序名称,但我不推荐这样做。编辑好后可以打开带有国旗的zh\icon_pack.xml,这块用来填写中文应用名:- Alipay
- AmazonKindle
- Automap
自此修改了icon_pack.xml。接下来要修改的是位于/res/xml目录下的drawable.xml:这个文件的作用是什么?你可以直接在NovaLauncher中浏览图标包,你会发现它还可以按类别显示图标:而这个功能的背后是drawable.xml的功劳:它用于为启动器提供图标选择列表,例如NovaLauncher,同时告诉启动器哪些图标属于哪种类型。NanoIconPack模板默认提供三个不同的类别。如果觉得麻烦,就根据这三个类别进行编辑即可。第一类“Basic”中有一些占位符:"calculator"/>-->你可以我注意到,项目drawable=后跟每个图标的文件名。所以,要小心不要犯错误。如果你听从了我上面的建议(为常用系统应用程序命名图标文件名),你现在需要做的就是删除占位符的开头。就像这样:>然后,对于剩下的“游戏”和“另类”两个类别,您可以填写或不填写。如果你不想填写,就删除它。但是最后的“All”这个类别是必须要填写的,图标包的所有文件都是这样填写的:填写完之后,这个文件的工作也就结束了。最后,我们需要找到与drawable.xml位于同一/res/xml目录中的appfilter.xml。别小看它,这个文件非常重要!它决定了每个图标和程序的对应关系,也就是因为它的存在,启动器可以自动识别图标包中适配的应用,并将图标叠加到每个应用上。这个文件由很多段代码组成,一段代码的结构大致是这样的:应用程序包名是每个Android应用程序的唯一标识,系统根据包名来判断和识别应用程序。即使应用重命名,只要包名相同,系统就会认为它们是同一个应用。举个例子:有一天,我的cuto壁纸突然决定将应用程序名称和图标更改为Otuc。但是在安装Otuc的时候,由于我派在改名的时候没有改包名,所以系统还是判断“Otuc”和“Cuto”是同一个应用,会直接更新旧的应用,不会重新安装新的。的。另一个“启动Activity”是一个比较复杂的概念。简单地说,它决定了当你点击启动器上的图标时,应用程序将打开哪个页面。因此,这两个要素是区分图标包应用的关键;并且这也允许不同的应用程序使用相同的图标文件。比如在GooglePixel上,“Camera”应用的适配代码大致是这样的:对于一加手机,适配代码会变成:是吗?由于手机厂商不同,“相机”应用和启动Activity的包名不同;但是这样一来,他们都可以调用图标包中的camera.png文件了。那么,问题又来了:去哪里找这些包名并启动activity呢?毕竟对于这些基础的应用,每个手机厂商可能都不一样,工作量还是挺大的。幸运的是,开发者By_syk为我们提供了一个参考模板文件,里面已经包含了很多系统应用和常用应用的代码。只需找到您自己的图标包中包含的应用程序,然后复制并粘贴即可。但是如果你要适配的应用在模板中不存在怎么办?这时候就需要用到PackageNameViewer2.0这个小工具了。该插件会将手机中已安装的应用程序分为用户应用程序和系统应用程序两大类,您可以选择手动搜索或搜索。让我们以Cuto为例。在列表中找到Cuto后,点击可以看到这个窗口:最上面的com.sspai.cuto.android是包名,最下面的com.sspai.cuto.android.EntryActivity自然就是启动Activity了。您可以选择复制并发送到您的计算机,并按照上述说明填写代码。至此,添加图标的部分就结束了。这部分的具体工作量取决于你要适配多少个图标,但也是最麻烦的部分,编辑文件需要有一定的耐心。好在做完这部分,图标包就差不多完成了,接下来的工作就很简单了。配置图标包上面提到Android系统需要根据应用程序包名来识别应用程序,所以你还需要为你的图标包提供一个包名,顺便给它设置一个版本号。找到左侧的GradleScripts选项,双击打开build.gradle(Module:app):,然后在文件中找到defaultConfig区域。applicationId为包名:包名可以参考如下模板:com.[你的名字].iconpack.[图标包名](只能用英文字母)。versionCode和versionName都是版本号的一部分。前者可以理解为“内部版本号”,后者是前台显示的版本号,可以根据自己的想法设置。此外,您还需要注意这一部分。如果你想让你的图标包向后兼容(最低Android5.0),那么你需要填写minSdkVersion和targetSdkVersion。后者可以填写最新的SDK版本(Android8.1,APILevel27),前者决定了应用可以安装的最低系统版本。建议填写21代表Android5.0。既然图标包也是一个应用程序,那么显然需要为它准备一个图标——严格来说,四个人。据说有四个图标,原因是应用程序图标文件ic_launcher.png分布在/mipmap-hdpi、/mipmap-xhdpi、/mipmap-xxhdpi、/mipmap-xxxhdpi这四个目录下,分别代表四种不同的分辨率:72*72、96*96、144*144、192*192。不过这也不是什么麻烦的事情,直接做一个最大分辨率的图标,然后单独缩放保存即可。接下来,回到AndroidStudio项目,我们需要编辑/res/values下的strings.xml。该文件用于确定图标包的名称、作者以及在图标包的“关于”界面中显示的内容。app_name用于填写图标包的名称,developer_name填写自己的名字。该文件下方的内容将显示在“关于”界面中。NanoIconPack默认自带了很多内容占位符,包括图标包作者、捐赠信息等,如果不需要显示某项信息,可以留空,但不要删除。这个文件和icon_pack.xml一样,也有带国旗的zh\版本(如上图),记得一起写。应用中最终的渲染效果是这样的:消息允许换行,但是需要用\n作为换行符。另外,一些特定的符号(比如Copyright??)需要用代码代替,请注意AndroidStudio提示的错误信息。NanoIconPack还可以编辑图标包应用程序的主题颜色。相关文件是/res/values下的colors.xml:如果对颜色代码和搭配不熟悉,可以在MaterialPalette网站上随便选两个试试。宜人的色彩,它会自动为您生成匹配方案。具体效果如下:至此,图标包的开发接近尾声,接下来就是测试打包了!万事俱备,可以测试打包,你只需要打包;你很快就能使用它DIY你自己的图标包!不过在打包之前,最好在设备上测试一下,看看有没有问题。第一步是确保在Android设备上启用开发人员选项并启用USB调试。然后点击AndroidStudio上的Run按钮,会弹出一个窗口让你选择连接到你电脑的设备:接下来,点击OK。如果一切顺利,您会发现图标包应用程序已自动在设备上打开。确认无误后,即可打包为APK安装包。在AndroidStudios中找到Build→GenerateSignedAPK:该选项用于生成签名的APK安装包。至于如何操作,建议参考谷歌官方文档。只有最后一步需要注意,一定要在Versions处勾选V1,否则可能会安装失败:当然生成安装包的时候可能会出错,具体错误信息会在Messages下方显示,请善用搜索引擎,网上一定有解决办法。好了,你的DIY图标包已经正式打包啦!转到启动器并尝试一下!