标签: assets

iOS开发中的Assets.xcassets和Assets.car

写在前面
在iOS开发中,*终项目的大小跟项目中的图片关系很大,因为代码的大小是很小的,可以说影响*终项目大小的主要就是项目中的图片资源,所以如何组织项目中的图片资源显得尤为重要。

正文
Assets.xcassets文件
当你创建一个空项目时,会默认帮你生成一个Assets.xcassets文件,当然你也可以自己创建:

%title插图%num
如果没有特殊的需求,一个工程里有一个xcassets文件就可以了,项目中所有图片都可以放在里面,为了组织更有条理更清晰,可以在这里面用文件夹分类,可以按照功能的模块来分类,比如一个模块的功能放在一个文件夹中。

%title插图%num

在这个文件中默认会有一个AppIcon的文件,可以将相对应大小的应用图标直接拖到右边对应大小的地方,就可以了。处理AppIcon这里面还可以放LaunchImage,只要在这个AppIcon这个栏内右键新建即可,还可以针对不同设备新建不同的LaunchImage和AppIcon

%title插图%num

如果只想往项目里加入一张普通的图片,就选择New Image Set,这个Image Set实质就是一个文件夹,里面包括不同分辨率的图片和一个Contents.json文件,内容如下包含着这个图片集中图片文件的基本信息,同AppIcon一样,只要将自己的图片拖到相应的位置即可,然后在项目中使用imageNamed:方法时,使用的名字是这个Image Set的名字,而不是图片真实的名字,这里可以注意的是图片真实的名字虽然无所谓,但*好还是按照一些规律来,*好不要出现中文,而Image Set的名字可以定义一些规则:如用image开头,中间加上模块名,*后加上图片本身的名字,中间用下划线连接,当然这里只是我个人的提议,我们项目中图片就是用这种方式进行命名的。

{
“images” : [
{
“idiom” : “universal”,
“filename” : “sPECIALOFFERIconSurvey1.png”,
“scale” : “1x”
},
{
“idiom” : “universal”,
“filename” : “sPECIALOFFERIconSurvey1@2x.png”,
“scale” : “2x”
},
{
“idiom” : “universal”,
“filename” : “sPECIALOFFERIconSurvey1@3x.png”,
“scale” : “3x”
}
],
“info” : {
“version” : 1,
“author” : “xcode”
}
}

 

将图片放在xcassets文件中的好处:

组织清晰
不同功用的图片有专门的格式
不同分辨率的图片好管理
工程打包后会对图片进行压缩
这里我要着重说一下第四点,包的大小,如果将图片直接放在工程目录下面,项目打包后图片文件也是散落在包里面,而且不会对图片进行压缩,而如果放在xcassets中,在打包后会将这些图片(除了AppIcon和LaunchImage,这两种图片是直接放在包中的)统一压缩成一个Assets.car的文件,大大减小包的大小,具体是几倍的关系我记不清了,但是相当的可观。

Assets.car文件
说完Assets.xcassets,那么说说由它生成的Assets.car文件,这个文件是一种压缩文件。
我们在开发过程中肯定会遇到一种情况就是把一个ipa的包解压出来看看里面有哪些图片,不管是不是自己的项目,总可能会有这种需求,那如果图片都在Assets.car中该怎么获取呢,直接解压是不行的,这时候就需要用到一个命令行工具叫cartool,这是一个开源软件,可以从github下载,这里给出github地址:https://github.com/steventroughtonsmith/cartool

使用方法是cartool Assets.car outputDirectory

还是给大家上一张图

%title插图%num

先将ipa解压缩,然后显示app包的内容,将Assets.car复制到桌面,然后就可以像上图一样,当然要在桌面上新建一个文件夹,如果你想直接把图片解压到桌面上我也是不介意的!

后记
这篇博客大概就是这些内容,主要就是给大家分享这个叫做cartool的工具还有就是科学的组织项目中的图片,当然要感谢大神写出这样方便的工具。

话说这个月已经过去一半了,然而这是这个月的*篇博客,还需加油,努力学习,努力写博客,分享知识,分享快乐,每月四篇一定要实现。

【Android】拷贝文件到另一个目录下

%title插图%num %title插图%num

PS:

拷贝assets目录下文件

InputStream is = ctx.getAssets().open(“test.apk”);

特别感谢jqj1107提的建议,写代码时要谨慎,尽可能不使用try/catch,拷贝文件时检查文件属性等参数,确保万无一失

if (!oldfile.exists()) {return ;}
if (!oldfile.isFile()) {return ;}
if (!oldfile.canRead()) {return ;}

————————————————
评论:
zisuchen
zisuchen:在settings中想拷贝文件到data/user_de/0/中的其他应用的files文件中,要怎么拷贝怎样给权限?

a17816876003
辉度:这个就是java,不能算android

u012691505
下雨天没带雨伞:所以写 int length; 是干嘛用的?

niubitianping
SkyHandCsdn回复:是的,没有flush和close,会导致文件复制损坏,楼主在误人子弟。。

u012691505
下雨天没带雨伞回复: FileOutputStream也没有关闭

ljw910_00
ljw910_00:为什么是byte[] buffer = new byte[1444]; 不是1024求解

luofeng224
luofeng224:流没有关闭,应该有finally块吧

u013633075
假装不在乎你:程序中这段代码是没有用的:bytesum+=byteread//字节数 文件大小 并且注释也错了,也不表示文件大小,inStream.read(buffer)的返回值是IO流中实际二进制串值的大小,所以……

Etzmico
伊茨米可回复:读取的文件大小,或者说复制过去的文件大小。

zgf1991
zgf1991:首先感谢,我是用了 再个我想说一点, if (!oldfile.exists()) { //文件不存在时 对于这个是闲的蛋疼这样写,还是觉得要让直接copy你代码的人废点时间瞄瞄呢? 楼上有人指出了。为何不修改一下? 嘲讽吗? copy本就是想快点
点赞
Etzmico
伊茨米可回复:感谢了
点赞
zgf1991
zgf1991回复伊茨米可: File oldfile = new File(oldPath); if (!oldfile.exists()) { //文件不存在时 InputStream inStream = new FileInputStream(oldPath); //读入原文件 FileOutputStream fs = new FileOutputStream(newPath); byte[] buffer = new byte[1444]; 这个是你的代码吧。那我再说清楚一点吧,3、4楼都说了这个问题, lz,你的回复是觉得这个东西得我们用的时候自己再修改下吗? if (!oldfile.exists()) { 原文件不存在的时候,在这里复制吗?} 能不成这个! 不该去掉?你自己再去试试能用? 是你逗还是我逗呢? 对于 -> 下面还有人提到需要这句话你怎么没看到呢? 8楼的那段代码,是应该要。 我都看了,我还加了8楼的代码,你自己试试再说吧,验证有问题的话你把文章编辑下吧
Etzmico
伊茨米可回复:呵呵 下面还有人提到需要这句话你怎么没看到呢? 只能说你手头的项目对此判断没有需求,要么就是你没考虑全面,要么就是项目较简单,不需要考虑全面 文章是给所有需要的人看的,你不需要,不代表别人不需要,如果你实在觉得多余,删掉就是了,直接无视就好。
jqj1107
零下36度:
if (!oldfile.exists()) {return ;}
if (!oldfile.isFile()) {return ;}
if (!oldfile.canRead()) {return ;}
拷贝单个文件时,建议检查下原文件是否存在等属性,不要直接异常处理。
Etzmico
伊茨米可回复:学习了,谢谢。
yong7356
yong7356:学习了。。。。。。。。。。。。
icebounder
逝于寂寞:if (!oldfile.exists()) //文件不存在时 文件都不存在了,还去拷贝什么呢??一楼说的很正确的啊?楼主你的代码是复制的吧?
griefcola
griefcola回复:你写代码的时候,永远只写你预期的部分吗? 没有使用场景的情况下,楼主的代码是没有问题的
xh_jiayou
xh_jiayou:文件不存在的时候去拷贝,考个毛啊
Etzmico
伊茨米可回复:你只看得懂中文,看不懂代码么?
maggiccrystal_3
maggiccrystal_3:从 /mnt/usb/sda1/dragons/myres 下面showtest.txt , results文件 复制到 /data/Mytest 目录 在sd卡权限: 我都加了,但是还是不成功,
Etzmico
伊茨米可回复:你那个第二个目录系统目录吧?
maggiccrystal_3
maggiccrystal_3:hello,楼主,你*个方法我试了,不能拷贝成功
Etzmico
伊茨米可回复:纳尼。。。from where to where.

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速