1.上手机时INSTALL_FAILED_INSUFFICIENT_STORAGE 错误提示

主要原因还是asset文件夹里面的东西太大导致的,开始自己放了几个字体在里面,其中有一个5M大的 安装的时候就悲剧了,删除后问题解决。

如果是模拟器爆这个错误,可以添加参数:-partition-size 1024

在网络上查了下关于这个问题的深入原因:

  “在使用Android自带的Res\raw或使用Asset时都需要经过Asset Manager,这将会产生一个比较严重的问题,在Android模拟器测试时不存在问题,但放到真机G1时会面临多个问题,经过查看 UNCOMPRESS_DATA_MAX的取值为1048576字节,除以1024不难发现是1MB。也就是说Android手机在处理资源文件时不能大 于1mb的体积”

  目前解决的方法只有将文件放入到sdcard,但这样除了microsd的读取IO效率和耗电量解决不是很好,同时sd卡移除时可能存在问题,解决的方法 如果数据量大的化通过sqlite是一种解决方法,同时openFileOutput方式读取也是不错的选择,看来android操作系统中最安全控制的 严格,但犯了一个不小的错误。

这里涉及到asset文件夹和raw文件夹的一点知识:

*res/raw和assets的相同点:

1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。


*res/raw和assets的不同点:
1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹

*读取文件资源:

1.读取res/raw下的文件资源,通过以下方式获取输入流来进行写操作

  • InputStream is = getResources().openRawResource(R.id.filename);

2.读取assets下的文件资源,通过以下方式获取输入流来进行写操作

  • AssetManager am =null;
  • am = getAssets();
  • InputStream is = am.open("filename");

补充一下:在未知目录下有哪些文件,该去和获取这些文件的名称并把文件拷贝到目标目录中呢?(用于内置文件但不知道文件名称,需要筛选出想要的文件然后拷贝到目标目录中,推荐内置在assets文件夹中)
1.res/raw目录:
通过反射的方式得到R.java里面raw内部类里面所有的资源ID的名称,然后通过名称获取资源ID的值来读取我们想要的文件。
2.assets目录:
getAssets().list("");来获取assets目录下所有文件夹和文件的名称,再通过这些名称再读取我们想要的文件。

更多相关文章

  1. Android APK包文件解析
  2. Android Project from Existing Code 生成 R 文件错误、失败等问
  3. Android轻便易用的文件选择器ExFilePicker
  4. android播放rtsp文件
  5. Android sdk manager无法启动之swt.jar文件没有指定
  6. 关于AVD启动失败的问题--找不到文件篇

随机推荐

  1. 详解SQL Server数据库架构和对象、定义数
  2. 如何快速删掉SQL Server登录时登录名下拉
  3. 浅述SQL Server的语句类别 数据库范式 系
  4. Android(安卓)View 仿iOS SwitchButton [
  5. Android创建本地服务器笔记
  6. Kotlin初体验
  7. Android(安卓)环境搭建
  8. Android(安卓)开发四大天王 四大组件
  9. Android下的POS打印机调用
  10. Android监听键盘显示和隐藏