APK安装过程

复制APK安装包到data/app目录下,解压并扫描安装包,把dex文件(Dalvik字节码)保存到dalvik-cache目录,并data/data目录下创建对应的应用数据目录,Android系统在sdcard上为每一个应用分配了存储路径:/sdcard/Android/data/$(应用的包路径),该路径可以通过 context.getExternalFilesDir 得到,一般应用卸载的时候,该目录也会随之被删除。

Android资源文件分为两类:

第一种是res目录下存放的可编译的资源文件,编译时,系统会自动在R.java中生成资源文件的ID,所以访问这种资源比较简单,通过在程序中调用R.id.filenam  e即可。

另一种是assets目录下存放的原始资源文件,因为系统在编译的时候不会编译assets下的资源文件,所以我们不能通过R.id.filename的方式访问它们。那我么能不能通过该资源的绝对路径去访问它们呢?因为apk安装之后会放在/data/app/**.apk目录下,assets被绑定在apk里,以apk形式存在,并不会解压到/data/data/YourApp目录下去,所以我们无法直接获取到assets的绝对路径,因为它们根本就没有独立存在。

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则可以有目录结构(在其目录下可以再建文件夹)

3.读取res/raw下的文件资源,通过以下方式获取输入流:InputStream is=getResources().openRawResource(R.id.filename); 读取assets下的文件资源,通过以下方式获取输入流:InputStream is =getResources()..getAssets().open("filename");

AssetManager管理对assets文件夹资源的访问

查看官方API可知,AssetManager提供对应用程序的原始资源文件进行访问;这个类提供了一个低级别的API=1,它允许你以简单的字节流的形式打开和读取和应用程序绑定在一起的原始资源文件。主要用到list()及open()方法。

finalString[]        list(Stringpath)     返回指定路径下的所有文件及目录名,path是相对路径,是assets子目录。

finalInputStream     open(String fileName)      使用 ACCESS_STREAMING模式打开assets下的指定文件,fileName是相对路径,是assets子目录。

finalInputStream      open(String fileName,int accessMode)   使用显示的访问模式打开assets下的指定文件。

下面这个类,主要功能是通过递归方式,实现对assets下的某个子目录文件读取操作,并复制到指定路径。

package com.study.asset;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import com.study.mylog.MyLog;

import android.content.Context;

import android.content.res.AssetManager;

public class AssetsCopy{

private Context mContext;

public AssetsCopy(Context context){

mContext = context;

}

public boolean CopyFiles(String oldPath, String newPath) throws IOException{

boolean isCopy = true;

AssetManager mAssetManger = mContext.getAssets();

String[] fileNames=mAssetManger.list(oldPath);// 获取assets目录下的所有文件及有文件的目录名

if (fileNames.length > 0) {//如果是目录,如果是具体文件则长度为0

File file = new File(newPath);

file.mkdirs();//如果文件夹不存在,则递归

for (String fileName : fileNames) {

if(oldPath=="") //assets中的oldPath是相对路径,不能够以“/”开头

CopyFiles(fileName,newPath+"/"+fileName);

else

CopyFiles(oldPath+"/"+fileName,newPath+"/"+fileName);

}

}else {//如果是文件

InputStream is = mAssetManger.open(oldPath);

FileOutputStream fos = new FileOutputStream(new File(newPath));

byte[] buffer = new byte[1024];

int byteCount=0;

while((byteCount=is.read(buffer))!=-1) {//循环从输入流读取 buffer字节

fos.write(buffer, 0, byteCount);//将读取的输入流写入到输出流

}

fos.flush();//刷新缓冲区

is.close();

fos.close();

}

return isCopy;

}

}

java assetmanager_Android学习--Assets资源文件读取及AssetManager介绍相关推荐

  1. Android中从assets资源中读取图片文件并保存到内部存储器并加载显示在ImageView中

    场景 Android系统为每个新设计的程序提供了/assets目录,这个目录保存的文件可以打包在程序里./res和/assets的不同点是,android不为/assets下的文件生成ID.如果使用/ ...

  2. JNI读取assets资源文件

    源自:http://www.rosoo.net/a/201112/15459.html assets目录底下的文件会被打包到一个apk文件里,这些资源在安装时他们并没被解压,使用时是直接从apk中读取 ...

  3. 【Android 安装包优化】Android 应用中 7zr 可执行程序准备 ( Android Studio 导入可执行 7zr 程序 | 从 Assets 资源文件拷贝 7zr 到内置存储 )

    文章目录 一.Android Studio 导入可执行 7zr 程序 二.从 Assets 资源文件拷贝 7zr 到内置存储空间 三.参考资料 一.Android Studio 导入可执行 7zr 程 ...

  4. IntelliJ IDEA 中的Java Web项目的资源文件复制新增如何更新到部署包中?

    文章目录 resources目录下的文件复制新增 webapp目录的文件复制新增 IntelliJ IDEA 中的Java Web项目的资源文件如果复制新增,正常的重新部署.重启服务器.update ...

  5. 360安全卫士Dat资源文件读取工具

    360安全卫士Dat资源文件读取工具 下载地址: http://download.csdn.net/source/904700

  6. properties 资源文件读取

    1.   在source中添加资源文件 resource.properties #FTP 相关配置 #FTP 的ip地址 FTP_ADDRESS=192.168.88.142 FTP_PORT=21 ...

  7. maven处理和java平级的资源文件

    maven 将资源文件放在java目录 今天把项目转到用maven来管理,配置下来,遇到的小问题还不少,不过都一一解决了.其中觉得比较重要的一点就是web项目打包的时候的那些资源文件,配置文件等等,如 ...

  8. 可视化反编译APK工具,查看部分JAVA代码与全部资源文件。

    ###前言 APK是安卓安装包,里面主要就是两大部分 资源文件,主要是图片与布局. dex文件,也就是各种代码转换成的Android可执行文件. 如果直接ZIP打开混淆打包过的APK的话,会出现dex ...

  9. 【IntelliJ IDEA】从资源文件读取出来就中文乱码的解决方法

    在application.properties资源文件中设置两个自定义的属性以及属性值: com.sxd.name = "德玛西亚" com.sxd.want = "王者 ...

最新文章

  1. 机器学习入门(01)— 感知机概念、实现、局限性以及多层感知机
  2. 佳能80d有人脸识别吗_国家地理2020年旅行者最推荐相机Top10,有你喜欢的吗?
  3. 【Noip模拟By yxj】
  4. [Kaggle] Sentiment Analysis on Movie Reviews(BERT)
  5. [转载] 微服务安全和治理
  6. java标签居住对齐_java期末复习(八)
  7. (译)C#/.NET中的委托与事件
  8. dxf文件预览打开编辑相关控件推荐
  9. Jquery页面跳转
  10. python用什么编译器-15款Python编辑器的优缺点,别再问我quot;选什么编辑器”啦
  11. jwt (JSON Web Token)官方说明
  12. Spring Boot_打造企业级微信点餐系统_汇总贴
  13. Creator开源游戏、插件、教程、视频汇总
  14. wlan无线网络密码破解
  15. 基于华为云服务的人脸识别功能实现
  16. html制作横向菜单,CSS 横向菜单的制作
  17. Dev-C++5.11游戏创作之躺平发育
  18. iOS App构建版本
  19. MATLAB 像素画绘制APP
  20. Matlab解决脚本中中文乱码问题

热门文章

  1. (附源码)node.js+mysql+node基于微信小程序的校园失物招领小程序 毕业设计072343
  2. 未来计算机手机化,未来10年手机和电脑的竞争力
  3. python 读取文件函数
  4. Window10 清除应用和功能中的已卸载软件
  5. 兰兰酱日常分享小妙招~~CSDN消除水印
  6. win10电脑如何使用本地账户登录
  7. 重磅!5G手机密集发布, vivo NEX 3有何看点
  8. 办公家具厂家浅析国内办公家具的行业前景
  9. 键盘事件keypress 和 keydown、keyup 的用法与区别
  10. 上海将筹建数据交易所,数据价值已演进至新的阶段?