Android基础(一)项目目录结构与简要说明

本文详细介绍了Android项目的各个组成部分,包括src、gen、Android2.2、assets、res等文件夹的功能与用途,以及它们之间的相互关系。同时,还提供了如何访问assets和res/raw文件夹中的资源的具体示例。

我是一个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);   

例子:

  1. package wyf.wpf;                            //声明包语句  
  2. import java.io.InputStream;                 //引入相关包  
  3. import org.apache.http.util.EncodingUtils;  //引入相关包  
  4. import android.app.Activity;                //引入相关包  
  5. import android.os.Bundle;                   //引入相关包  
  6. import android.widget.TextView;             //引入相关包  
  7.   
  8. public class Sample_4_2 extends Activity {  
  9.     public static final String ENCODING = "UTF-8";  //常量,代表编码格式  
  10.     TextView tv1;                                   //TextView的引用  
  11.     TextView tv2;                                   //TextView的引用  
  12.     @Override  
  13.     public void onCreate(Bundle savedInstanceState) {  
  14.         super.onCreate(savedInstanceState);  
  15.         setContentView(R.layout.main);          //设置显示屏幕  
  16.         tv1 = (TextView)findViewById(R.id.tv1);  
  17.         tv2 = (TextView)findViewById(R.id.tv2);  
  18.         tv1.setText(getFromRaw("test1.txt"));       //将tv1的显示内容设置为Resource中的raw文件夹的文件  注意有的文件需要格式处理
  19.         tv2.setText(getFromAsset("test2.txt"));     //将tv2的显示内容设置为Asset中的文件  
  20.     }  
  21.     //方法:从resource中的raw文件夹中获取文件并读取数据  
  22.     public String getFromRaw(String fileName){  
  23.         String result = "";  
  24.         try{  
  25.             InputStream in = getResources().openRawResource(R.raw.test1);   //从Resources中raw中的文件获取输入流  
  26.             int length = in.available();                                    //获取文件的字节数  
  27.             byte [] buffer = new byte[length];                              //创建byte数组  
  28.             in.read(buffer);                                                //将文件中的数据读取到byte数组中  
  29.             result = EncodingUtils.getString(buffer, ENCODING);             //将byte数组转换成指定格式的字符串     
  30.             in.close();                                                     //关闭输入流  
  31.         }  
  32.         catch(Exception e){  
  33.             e.printStackTrace();                                            //捕获异常并打印  
  34.         }  
  35.         return result;  
  36.     }  
  37.     //方法:从asset中获取文件并读取数据  
  38.     public String getFromAsset(String fileName){  
  39.         String result="";  
  40.         try{  
  41.             InputStream in = getResources().getAssets().open(fileName);     //从Assets中的文件获取输入流  
  42.             int length = in.available();                                    //获取文件的字节数  
  43.             byte [] buffer = new byte[length];                              //创建byte数组  
  44.             in.read(buffer);                                                //将文件中的数据读取到byte数组中  
  45.             result = EncodingUtils.getString(buffer, ENCODING);             //将byte数组转换成指定格式的字符串  
  46.         }  
  47.         catch(Exception e){  
  48.             e.printStackTrace();                                            //捕获异常并打印  
  49.         }  
  50.         return result;  
  51.     }  
  52. }  

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/动画

转载于:https://www.cnblogs.com/fear/p/3329481.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值