androidraw文件路径
‘壹’ Android中assets目录和raw目录的区别和使用情况
今天看到有人问Android中assets目录和raw目录的区别和使用情况。
能提出这个问题的,应该都了解它们的共同点:
它们会被原封不动的拷贝到APK中,而不会像其它资源文件那样被编译成二进制的形式。
要说区别,当然最直观的就是获取它们的InputStream的API不一样了。
assets:InputStream assets = getAssets().open("xxxx");
raw:InputStream raw = getResources().openRawResource(R.raw.xxxx)
有人可能会有疑问,既然它们都是被原封不动的拷贝到APK中,而assets可以创建目录结构,又能够动态的列出assets中的所有资源getAssets().list(String path);,这些raw都做不到,那raw还有什么用呢?
下面我们来说说它们主要的区别:
由 于raw是Resources (res)的子目录,Android会自动的为这目录中的所有资源文件生成一个ID,这个ID会被存储在R类当中,作为一个文件的引用。这意味着这个资源 文件可以很容易的被Android的类和方法访问到,甚至在Android XML文件中你也可以@raw/的形式引用到它。在Android中,使用ID是访问一个文件最快捷的方式。MP3和Ogg文件放在这个目录下是比较合适 的。
assets目录更像一个附录类型的目录,Android不会为这个目录中的文件生成ID并保存在R类当中,因此它与 Android中的一些类和方法兼容度更低。同时,由于你需要一个字符串路径来获取这个目录下的文件描述符,访问的速度会更慢。但是把一些文件放在这个目 录下会使一些操作更加方便,比方说拷贝一个数据库文件到系统内存中。要注意的是,你无法在Android XML文件中引用到assets目录下的文件,只能通过AssetManager来访问这些文件。数据库文件和游戏数据等放在这个目录下是比较合适的。
另 外,网上关于assets和raw的资料都千篇一律了,因此关于这两者中单个文件大小不能超过1M的**错误**描述也在传播,即如果读取超过1M的文件 会报"Data exceeds UNCOMPRESS_DATA_MAX (1314625 vs 1048576)"的IOException,还引申出种种解决方案。个人认为不应该有这样的限制,为了验证这个说法写了个Demo,发现将近5M的压缩 包在assets和raw中都能正常访问,因此在这里纠正一下,理论上只要打包不超过Android APK 50M大小的限制都是没有问题的。当然了,不排除是Android很早期的时候因为设备硬件原因aapt在编译的时候对这两个文件夹大小做出了限制,如果 是这样,较新版的ADT应该不会出现这种情况。
更新:为了验证我最后一段的描述,避免导致结果误 导,晚上写了几个小Demo验证之后又花了点时间查阅了一些资料,最后找到这篇文章http://ponystyle.com/blog/2010/03 /26/dealing-with-asset-compression-in-android-apps/ ,文章比较简单清晰,我就不翻译了。这篇文章应该还蛮有说服力的,从根本上说明了当时Android2.3以前产生资源文件单个文件大小不能超过1M的原 因和部分解决方法。不过由于限制是当时的aapt决定的,现在已经更新了多个版本的aapt已经不存在这种问题了,也印证了我最后一段的猜想。
‘贰’ Android assets或res/raw等目录下的某文件Uri要怎么写
在Android中不能直接打开res aw目录中的数据库文件, 而需要在程序第一次启动时将该文件复制到手机内存或SD卡的某个目录中, 然后再打开该数据库文件。复制的基本方法是使用getResources().openRawResource方法获 得res aw目录中资源的 InputStr
‘叁’ 在android工程中,res目录下又有anim、drawable、layout、menu、raw、values和xml文件夹,分别用来保存
res目录主要是存放资源文件的!
layout 布局 这个就是你经常看到的与用户交互的界面的 xml 文件,就是各个 view 的排列和嵌套,没什 么好说的啦 风格和主题、 风格主要是指 view 的显示风格 ;
anim 一般是设置动画,画资源分为两种,一是实现图片的 translate、scale、rotate、alpha 四种变化。还可以设置 动画的播放特性;另一种是帧动画,逐帧播放设置的资源;
drawable 主要是是存放所使用的图片的!
menu:菜单 菜单即可以从代码中实现也可以在资源文件中配置;
把图像文件放在 res/raw/ 目录下,这样可以避免被自动优化。
values 是用程序人员设置的一些常量的XML文件,便于修改和使用,一般有Strings,colors等
assets 文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像 xml, java 文件被预编译,可以存放一些图片,html,js, css 等文件。
‘肆’ android涓璻aw鏂囦欢澶逛笉璧蜂綔鐢
鏂囦欢锻藉悕闂棰桦艰嚧銆
1銆佹枃浠跺悕涓鍖呭惈链夐潪娉曞瓧绗︽垨娌℃湁鎸夌収Android瑙勫垯杩涜屽懡钖嶏纴涓嶈兘鍖呭惈绌烘牸锛屼笉鑳戒互鏁板瓧寮澶寸瓑锛屽惁鍒欐槸镞犳晥鏂囦欢澶广
2銆乺aw鏂囦欢澶逛腑镄勬枃浠跺繀椤绘槸Android鏀鎸佺殑镙煎纺锛岄煶棰戞枃浠跺繀椤绘槸mp3銆亀av銆乵id绛夋牸寮忥纴璧勬簮鏂囦欢蹇呴’鏄痯ng銆乯pg銆乥mp绛夋牸寮忥纴钖﹀垯鏂囦欢澶逛笉璧蜂綔鐢ㄣ
‘伍’ android开发!raw文件夹太大怎么办啊啊啊啊。。。。
有时候真的不喜欢你们这些做巨大apk的人……
下载又麻烦安装又麻烦还占地方……
要是上传google,还得分成两次下载,一旦用户拒绝下载资源,就不能使用了……
1、根据你的叙述,这个情况应该只是虚拟机设置不当的原因,虚拟机内存或储存空间太小的缘故,可以自行网络虚拟机设置;
2、听说有些资源应该放在assets文件中,可能是这个原因;
3、如果是音频文件可以用一些软件压缩一下,让他们不占那么多地方;
4、其实很多游戏会把重量级的放在他们的服务器上,让游戏使用前自动下载;
5、Android分配给一个apk的运行空间是有限的,如果加载一个文件太大会溢出报错,是不是考虑把大文件分成小文件,在一个文件使用完之后再加载另一个,保持内存总量不会被占用太多;
6、apk资源先存储在SD卡上,让apk需要时去指定路径下需要再使用吧;
7、其他……
‘陆’ android程序,R.raw.点不出自己的文件ID
R文件没有生成自己的id,通常是res目录下有错误。
解决方式:
选择“eclipse -- myeclipse”的clean,R文件便会出现。
在工程上点击鼠标右键,选择“Build Project”,R.java就会回复。这样在程序中调用R文件指向的资源,也就可以自动补全了。
从别的工程中拷贝一份R文件过来,然后string.xml里随便改动一下,也可更新R文件。
如果上述步骤都不行。可能是工程本身所引起的错误,比如resoure资源中的文件命名,资源文件名称需要全部小写。
检查R文件是否import 错误了。