我是一个android菜鸟,文章仅仅是为了总结以前所看所学的知识,可能有错误,还望博友多多指教,引用的内容我都给出了链接,请原文作者莫怪,以后我将继续把链接放在最顶端,以示对原作者的尊敬,以后的文章也将如此,特此声明:
附1:http://blog.youkuaiyun.com/chenzheng_java/article/details/6205182# 主干
附2:http://chaowen0668.iteye.com/blog/1046766 assets与res/raw异同
HelloWorld项目的目录结构
1.1、src文件夹
1.2、gen文件夹
1.3、Android 2.2文件夹
1.4、assets
1.5、res文件夹
1.6、AndroidManifest.xml
1.7、default.properties
1.1、 src文件夹
顾名思义,就是存放android项目中编写的java源代码的地方。(写代码的地方)
初建项目时,我们的HelloWorld.java类继承了Activity类。一般我们都会实现其中的onCreate()方法。
1.2、 gen文件夹(强调一遍,没事不要改R.java文件)
gen文件夹后面跟着这句介绍[Generated Java Files翻译:java文件生成的] 主要包含一个R.java文件,这个文件是由系统自动维护的,不允许人为的修改,否则将会出现很多让你郁闷的错误。
R.java是一个android资源的索引文件,里面定义了大量的静态内部类和静态常量,静态类的名称都和res文件夹下的文件夹一一对应的< R.javaàres文件夹对应>。注意:res文件夹下的xml文件如果配置有问题R.java会出错或消失不见。如图
既然都是索引文件,那么该文件的作用和数据库中索引作用肯定也是差不多。它可以帮助我们快速的定位文件,此外,编译器还会检查R.java中定义的资源是否被使用了,如果没有被使用,那么打成安装包的时候,会自动过滤掉那些没被使用的资源,这样可以大大的节约空间。
有的gen文件夹下还包含BuildConfig.java文件
在早先的版本中没有这个文件,是Android ADT更新后来添加,它的作用是自我调试代码,在BuildConfig()方法中只有一句:public final static boolean DEBUG = true代码;含义:BuildConfig.java文件 打开android项目调试(Debug)开关。
1.3、 Android 2.1文件夹
一个android开发的jar包。有了它才可以调用android自己的API,安装好了android sdk初始创建项目时就自动生成的。
1.4、 asset文件夹
该文件夹下通常会存放一些资源文件,例如mp3/视频文件/数据库原文件等等。这个文件被称为原生文件夹,意思就是存放在这里的文件在打包成安装包时,会原样打包,不进行压缩等各种处理。这和res文件夹下的文件是不一样的,res下的资源文件会进行压缩处理的。主要的目的,实际上还是为了节约空间。
Res文件夹下的raw文件夹---res/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");
或:InputStream is = getResources().getAssets().open(filename);
例子:
- package wyf.wpf; //声明包语句
- import java.io.InputStream; //引入相关包
- import org.apache.http.util.EncodingUtils; //引入相关包
- import android.app.Activity; //引入相关包
- import android.os.Bundle; //引入相关包
- import android.widget.TextView; //引入相关包
- public class Sample_4_2 extends Activity {
- public static final String ENCODING = "UTF-8"; //常量,代表编码格式
- TextView tv1; //TextView的引用
- TextView tv2; //TextView的引用
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main); //设置显示屏幕
- tv1 = (TextView)findViewById(R.id.tv1);
- tv2 = (TextView)findViewById(R.id.tv2);
- tv1.setText(getFromRaw("test1.txt")); //将tv1的显示内容设置为Resource中的raw文件夹的文件 注意有的文件需要格式处理
- tv2.setText(getFromAsset("test2.txt")); //将tv2的显示内容设置为Asset中的文件
- }
- //方法:从resource中的raw文件夹中获取文件并读取数据
- public String getFromRaw(String fileName){
- String result = "";
- try{
- InputStream in = getResources().openRawResource(R.raw.test1); //从Resources中raw中的文件获取输入流
- int length = in.available(); //获取文件的字节数
- byte [] buffer = new byte[length]; //创建byte数组
- in.read(buffer); //将文件中的数据读取到byte数组中
- result = EncodingUtils.getString(buffer, ENCODING); //将byte数组转换成指定格式的字符串
- in.close(); //关闭输入流
- }
- catch(Exception e){
- e.printStackTrace(); //捕获异常并打印
- }
- return result;
- }
- //方法:从asset中获取文件并读取数据
- public String getFromAsset(String fileName){
- String result="";
- try{
- InputStream in = getResources().getAssets().open(fileName); //从Assets中的文件获取输入流
- int length = in.available(); //获取文件的字节数
- byte [] buffer = new byte[length]; //创建byte数组
- in.read(buffer); //将文件中的数据读取到byte数组中
- result = EncodingUtils.getString(buffer, ENCODING); //将byte数组转换成指定格式的字符串
- }
- catch(Exception e){
- e.printStackTrace(); //捕获异常并打印
- }
- return result;
- }
- }
1.5、 res文件夹
主要有三个子文件夹,drawable_?dpi、layout、values
drawable_?dpi:很多人疑问为什么这个文件夹下会分出来三个子文件夹,drawable_hdpi高分辨率、drawable_ldpi低分辨率、drawable_mdpi一般分辨率,实际上这和我们在asset中提到的文件优化压缩有关,android会对三个文件夹下的文件使用不同的压缩优化算法。这样就既保证了我们对某些图片较高分辨率的要求,也保证了这些资源不会占用太多的空间。
layout存放布局文件。包括主布局文件和一般的组件布局文件。横屏:layout-land-800*600;
竖屏:layout-port-800*600;注意:分辨率大数字(800)写在前面。
values下可以存放很多.xml文件,例如arrays.xml、colors.xml、dimens.xml、styles.xml,strings.xml当然这些xml文件的名称都是随意取得。
例子:values/strings.xml下文件内容
<resources>
<string name="app_name">TestHandler02</string>
<string name="menu_settings">Settings</string>
<string name="hello_world">计数:</string>
</resources>
layout/activity_main.xml下文件内容
<TextView
android:id="@+id/tv_textView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
引用了strings.xml文件中string标签 name=hello_world的内容
1.6、 AndroidManifest.xml
清单文件或叫做工程文件,用来组件的注册,控制权限,显示方式,app图标等等功能,清单文件是有顺序的执行的,可以看做main函数的开始,可以看做组件纽带。以后会细讲。
1.7、 default.properties
记录了项目运行的环境信息,例如android的版本要求等。
项目的总配置文件,记录应用中所使用的各种组件。这个文件列出了应用程序所提供的功能,在这个文件中,你可以指定应用程序使用到的服务(如电话服务、互联网服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Activity。
AndroidManifest.xml将包含如下设置:application permissions、Activities、intent filters等。
另外的目录文件夹
1.8、 bin
1.9、 libs
1.10、 res/menu
1.11、 res/动画