安卓资源
界面(资源)和代码分离
无论是Web应用程序,还是PC客户端应用程序,以及移动客户端应用程序,它们都无一例外地将代码与界面分离,并且界面都是通过描述性的文字来描述的,这种描述性的文字越来越倾向于使用XML格式。
Android应用程序资源的分类
Android应用程序资源可以分为两大类,分别是assets和res
assets类资源放在工程根目录的assets子目录下,它里面保存的是一些原始的文件,可以以任何方式来进行组织。
这些文件最终会被原装不动地打包在apk文件中。
如果我们要在程序中访问这些文件,那么就需要指定文件名来访问,需要用AssetManager以字节流的形式读取文件。
1)先在Activity里面调用getAssets() 来获取AssetManager引用。
2)再用AssetManager的open(String fileName, int accessMode) 方法则指定读取的文件以及访问模式就能得到输入流InputStream。
3)然后就是用已经open file 的inputStream读取文件,读取完成后记得inputStream.close() 。
4)调用AssetManager.close() 关闭AssetManager。
例:
public String getFromAssets(String fileName){
try {
InputStreamReader inputReader = new InputStreamReader( getResources().getAssets().open(fileName) );
BufferedReader bufReader = new BufferedReader(inputReader);
String line="";
String Result="";
while((line = bufReader.readLine()) != null)
Result += line;
return Result;
} catch (Exception e) {
e.printStackTrace();
}
}
res类资源放在工程根目录的res子目录下,它里面保存的文件大多数都会被编译,并且都会被赋予资源ID。
这样我们就可以在程序中通过ID来访问res类的资源。
其中 --raw 这类资源以任意格式的文件保存在res/raw目录下,它们和assets类资源一样,都是原装不动地打包在apk文件中的。
不过它们会被赋予资源ID,这样我们就可以在程序中通过ID来访问它们。
Resources res = getResources();
InputStream is = res .openRawResource(R.raw.filename);
安卓打包
.apk文件
- META-INF文件夹,里面存放应用程序的签名
- res文件夹,里面的xml文本文件都被编译为二进制文件
- AndroidManifest.xml,编译后
- classes.dex
- resources.arsc 相当于资源检索表
eclipse的默认签名:C:\Users\Administrator\.android下的debug.keystore文件
apk文件安装与卸载、安卓的系统自带应用目录与注册表
1)
安卓系统自带应用的目录
/system/app/下
用户安装的应用目录
/data/app/下
这些目录下都存放这xxx.apk文件
2)安卓安装与卸载软件
- 拷贝xxx.apk到/data/app/xxx-1.apk
- 在/data/data/目录下创建一个文件夹,名称为当前应用程序的包名
卸载与其相反
3)安卓系统的注册表
/data/system/netstats/
packages.list
packages.xml
安卓资源与打包过程详细
http://blog.csdn.net/luoshengyang/article/details/8738877
http://blog.csdn.net/luoshengyang/article/details/8744683
http://blog.csdn.net/luoshengyang/article/details/8791064
http://blog.csdn.net/luoshengyang/article/details/8806798