当前位置: 代码迷 >> Android >> Android学习札记05-项目的目录结构与安装及启动过程分析
  详细解决方案

Android学习札记05-项目的目录结构与安装及启动过程分析

热度:13   发布时间:2016-05-01 11:28:24.0
Android学习笔记05---项目的目录结构与安装及启动过程分析
1.a.src文件夹:用来存放java源文件;
  b.gen文件夹:开发工具自动创建的文件,有一个R文件,用来登陆资源id,在编译器编译的时    候自动生成的,可以通过资源id,引用资源
  c.res是软件引用的文字,图片等等
  d.res-->drawable-hdpi-->这个文件夹:专门用来放图片资源,当把图片放入这个文件夹
    的时候,就会为这个图片在R文件中生成一个资源id;
  e.由于手机屏幕有大小,所以提供了:drawable-hdpi,drawable-ldpi,drawable-mdpi
    三个不同的大小图片,android操作系统会根据手机屏幕的分辨率,来选择不同的文件夹
  f.laylout文件夹:中的main.xml指的是定义系统的界面
    values文件夹:strings.xml放了应用中用到的文字,为了实现国际化
2.a.在strings.xml中添加:
    <resources>
    <string name="hello">Hello World, MainActity!</string>
    <string name="app_name">HelloWorldTest</string>
    <string name="credream">创梦网络</string>
    </resources>
  b.在R文件中可以看到多了:
       public static final class string {
        public static final int app_name=0x7f040001;
        public static final int credream=0x7f040002;//多了这一行
        public static final int hello=0x7f040000;
    }
--------------------------------------------
3.a.当字体有很多的时候,为了不让string.xml过于大
    那么可以新建一个Android xml文件credream.xml,创建的时候,要加上后缀.xml
  b.在credream.xml添加了以下:
     <?xml version="1.0" encoding="utf-8"?>
     <resources>
     <string name="lidewei">李德伟</string>
     </resources>
  c.在R文件中会生成:
    public static final int lidewei=0x7f040000;
----------------------
4.在layout中存放的界面文件main.xml
  下面再创建一个界面文件:
  右键新建android xml文件,adduser.xml,选择layout  
  a.res\layout\addUser.xml: Invalid file name: must contain only [a-z0-9_.]
    1.res\layout\addUser.xml: Invalid file name: must contain only [a-z0-9_.]
    出现这个的原因是,文件名不可以包含大写字母
  b.res/anim/文件夹:动画定义的xml文件;
  c.res/xml文件夹:在Actity中使用getResource().getXML()读取该目录下的XML
    资源文件
  c.res/raw/文件夹:该目录用于存放使用到的原始文件,如音效文件等,编译软件时,这些数      据不会被编译,他们被直接加入到程序安装包里,为了再程序中使用这些资源,你可以调用
    getResources().openRawResource(ID),参数ID形式,R.raw.somefilename
----------------------------------
5.a.assets文件夹:用来存放资源文件;在这里放入文件,不会在R文件中生成资源ID,需要使用
    文件路径来访问这里面的内容
  b.default.properties文件:是eclipse用的文件,通过这个文件可以告诉eclipse,这个程序
    适用于什么android版本
  c.AndroidManifest.xml文件,清单文件,在清单文件中除了列出了应用的功能外
    还列出了,自己应用使用了系统的什么服务,比如发短信服务,打电话服务;
  d.以后开发的各种组件(Activity,ContentProvider,BroadcastReceiver,Service)需要在      该文件中进行配置,如果应用使用到了系统内置的应用(如电话服务,互联网服务,短信服      

务,GPS服务等等)还要在该文件中声明使用权限
-----------------------------------
6.AndroidManifest.xml文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.credream.app"  //包名,唯一标示一个应用
      android:versionCode="1"     //开发的软件的版本号,和版本名称
      android:versionName="1.0">  //版本名称

    <application android:icon="@drawable/icon//指定应用的图标,drawable
     指的是R文件中的drawable,指的是访问R文件中的drawable内部类中的icon常量
     ,更换图标可以把一个图片的资源id赋予="@drawable/的后面,"              android:label="@string/app_name">//这个属性用于指定应用的名称,指定应用strings.xml     中的

app_name指定的名称
        <activity android:name=".MainActity"//.代表当前应用所在包,取得是类的名字,
   如果这个类,在应用的包下,可以省略点.但是如果在应用包的子包下面需要加点,建议不管   在哪里都加点,避免出错
                  android:label="@string/app_name">//指的是窗口的标题
            <intent-filter>//指意图过滤器,对数据进行过滤,用来匹配意图,意图代表了            一个想法
                <action android:name="android.intent.action.MAIN//这个字符串已经被安卓系统赋予了一个功能,就是把应用添加到启动列表中,如果没有这两项的话,应用是不会出现在

程序的启动列表中的,这两个参数只能使用在一个activity中" />
//动作的名称            
    <category android:name="android.intent.category.LAUNCHER" />
//动作的类别
            </intent-filter>
        </activity>//activity可以指定多个,因为一个activity代表一个窗口,那么可以有多个窗口
    </application>//</application>应用有关的
    <uses-sdk android:minSdkVersion="8" />//指定应用最低支持的版本
</manifest> 
-------------------------------
7.清单文件是在软件安装的时候被操作系统读取的;安装的时候,操作系统读取这个文件,然后
  注册,相当于在windows下,安装软件的时候,注册进注册表一样
---------------------
8.a.编译器工作原理--->.java-->.class-->android虚拟机格式-->.dex...在/项目/bin/下
    --->把dex.打包(签名)-->使用默认的密钥签名,这个密钥在:windows -->perference-    >android--->Build-->右侧Default debug keystone就是密钥的位置-->签完名之后就把    这

个文件 --->打包成apk格式的.
  b.然后当运行的时候,eclipse adt插件会自动的调用adb.exe 执行 adb install 
    c:\xxx.apk
--------------------------------
9.a.当点击应用图标-->找到一个MainActivity-->然后创建一个进程,然后创建一个线程(主      线程),在这个,线程里面对MainActivity这个类进行实例化,在实例化的时候,会首先在配     

置文件中读取这个类的名称:然后:使用反射MainActity .class.newInstance();来实例      化这个MainActivity这个类--操作系统会把应用有关的信息(context)放在Activity中,
    然后---调用oncreate-- public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    --->把它放在一个任务栈中;
   b.setContentView(R.layout.main);在窗口中显示软件界面-->只想layout文件夹下的     main.xml
-------------------------------
10.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"//
    android:orientation="vertical"//指定了摆放的方向
    android:layout_width="fill_parent"//填充窗口的宽和高
    android:layout_height="fill_parent"//
    >
<TextView//类似于java中的label标签:  用来显示的
    android:layout_width="fill_parent" //textView的宽度和父窗口的宽度一样
    android:layout_height="wrap_content" //高度指的是包裹内容,就是说显示的内容有      //多少,显示控件就有多高
    android:text="@string/hello"//显示文字的意思,使用的是Strings.xml文件中,hello,    //显示的资源
    />
</LinearLayout>//指的是线性布局,线性布局
---------------------------------------
10.线性布局:摆放方式有两种:
   a.以垂直方式摆放或者
   b.以水平方式摆放
  2.对于控件的宽度和高度也可以自己设置:
    <TextView//类似于java中的label标签:  用来显示的
    android:layout_width="20dp" //textView的宽度和父窗口的宽度一样
    android:layout_height="wrap_content" //高度指的是包裹内容,就是说显示的内容有      //多少,显示控件就有多高
    android:text="@string/hello"//显示文字的意思,使用的是Strings.xml文件中,hello,    //显示的资源
    />
-------------   
  a.高度和宽度的单位有:1.dip或者是dp(device independent pixels)设备独立像素
    这个和设备硬件有关,一般为了支持WVGA,HVGA,和QVGA推荐使用这个,不依赖像素
  b.sp(scaled pixeis -best for text size)比例像素
------------------
除了以上两个还有两个不太常用的:
  in(inches)英寸 
  mm(millimeters)毫米
  pt(points)点,1/72英寸
------------------------
为了适应不同分辨率,不同的像素密度,推荐使用dip,文字使用sp
注意:android:layout_width="fill_parent"
     fill_parent和match_parent作用是一样的
-------------------------------
12.软件的启动过程:
    当点击应用图标-->找到一个MainActivity-->然后创建一个进程,然后创建一个线程(主      线程),在这个,线程里面对MainActivity这个类进行实例化,在实例化的时候,会首先在配     

置文件中读取这个类的名称:然后:使用反射MainActity .class.newInstance();来实例      化这个MainActivity这个类--操作系统会把应用有关的信息(context)放在Activity中,
    然后---调用oncreate-- public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    --->把它放在一个任务栈中;然后会调用
     setContentView(R.layout.main);//这里调用了layout,下的
      //main.xml,这里用到的是线性布局
      //有线性布局,相对布局,表格布局.frame.layout(帧布局)
      //线性布局的两种方法:

  相关解决方案