Android开发之道(4)程序框架基础

1、程序框架

 

   对于一个最简单的HelloWorld应用,程序的文件结构如下:

 

    

 

    可以看到有5个目录:src源文件目录、gen目录、assets目录、bin目录、res目录。另外还在根目录下有三个文件,分别是AndroidManifest.xmlproguard.cfgproject.properties。下面分别介绍它们的作用。

 

1)源文件目录src:这个不需要多做解释,源文件都包含在这个目录下。

2)索引文件目录gengen就是generated的缩写,其中的文件都是在建立项目的时候自动生成的,其中有R.java文件。它是一个只读文件,其中定义了项目中所有资源的索引。

3)资源文件目录des:该目录包含程序图标drawable(如drawable-hdpidrawable-ldpidrawable-mdpi中的ic_lancher.png),布局文件layout(如main.xml),常量values(如strings.xml)。

4)可执行文件目录bin:包括apk文件、dex文件和ap_文件,还包括不被封装到可执行文件中的一些资源(比如图片等)。

5assets目录。

 

2、具有资源索引功能的R.java文件

 

 

  1. package com.sinosuperman.android;  
  2.   
  3. public final class R {  
  4.   
  5.     // indices for attributes  
  6.         public static final class attar {  
  7.     }  
  8.   
  9.     // indices for drawable files  
  10.     public static final class drawable {  
  11.         public static final int ic_launcher = 0x7f020000;  
  12.     }  
  13.   
  14.     // indices for layout files  
  15.     public static final class layout {  
  16.         public static final int main = 0x7f030000;  
  17.     }  
  18.   
  19.     // indices for strings  
  20.     public static final class string {  
  21.     public static final int app_name = 0x7f040001;  
  22.     public static final int hello = 0x7f040000;  
  23.     }  
  24. }  


3、程序框架

 

    Android应用程序中的AndroidManifest.xml文件定义了整个程序的框架,最简单的HelloWorld的框架如下:

 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.sinosuperman.android"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0"  
  6.   
  7.     <uses-sdk android:minSdkVersion="8" />  
  8.   
  9.     <application  
  10.         android:icon="@drawable/ic_launcher"  
  11.         android:label="@string/app_name"  
  12.         <activity  
  13.             android:name=".HelloWorldActivity"  
  14.             android:label="@string/app_name" >  
  15.             <intent-filter>  
  16.                 <action android:name="android.intent.action.MAIN" />  
  17.                 <category android:name="android.intent.category.LAUNCHER" />  
  18.             </intent-filter>  
  19.         </activity>  
  20.     </application>  
  21.   
  22. </manifest>  


    根节点manifest包含package中所有内容,package属性的值是com.sinosuperman.android。根节点manifest包含两个子节点,分别是uses-sdkapplicationuses-sdkandroid:minSdkVersion属性表明运行改程序所需的最低版本的Android SDK8application节点有两个属性,分别是android:iconandroid:label,表示应用图标和应用名称,它还包含一个子节点,是activity,它是应用程序默认启动的activityactivity节点有两个属性,android:nameactivity的名称,android:label是应用名称。application的子节点是intent-filter,它又包含两个子节点,分别是actioncategoryactionandroid:name属性是android.intent.action.MAINcategoryandroid:name属性是android.intent.category.LAUNCHER


    可见一个最基本的AndroidManifest.xml文件有5层节点,第一层是manifest,第二层是uses-sdkapplicationappcalition下面有第三层的activityactivity下面有第四层的intent-filterintent-filter下面有第五层的actioncategory。可以发现除了manifestxmlns:androidpackage属性外,其他各属性均是在android名字空间(namespace)下的。

 

4、常量

 

    Android应用中,所有的常量都是通过res/values/strings.xml来定义的,该文件如下:

 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <string name="hello">Hello World, HelloWorldActivity!</string>  
  4.     <string name="app_name">HelloWorld</string>  
  5. </resources>  


    这个文件中定义了两个资源(resources),分别是两个名为helloapp_namestringsR.java中的String内部类里面有两个int成员,它们以索引的形式,分别指向res/values/strings.xml中的这两个string节点。如何使用这些常量呢?

 

  1. Resources res = this.getContext().getResources();  
  2. String appname = ((String) res.getString(R.string.app_name));  
  3. String hello = ((String) res.getString(R.string.hello));  



5、布局文件

 

    Android应用程序中的布局由res/layout/main.xml文件指定,如下是HelloWorld应用的布局文件:

 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="file_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <TextView  
  8.         android:layout_width="fill_parent"  
  9.         android:layout_height="wrap_content"  
  10.         android:text="@string/hello" />  
  11.   
  12. </LinearLayout>  


    从名字我们就可以看出来,这是一个线性排版的布局。其android:layout_widthandroid:layout_height属性指定了该布局所使用的长和宽,file_parent表示在与上层所在容器的内层尺寸相同。android:orientation属性指定组件的排列方式,vertical表示垂直排列,horizontal表示水平排列。

    LinearLayout有一个TextView子节点,它用来配置文本标签组件。它的宽属性设置的是fill_parent,高属性是wrap_content,表示随着文字栏位的不同而改变这个视图的高度。android:text指定了显示的内容,这里设置的是常量资源中的hello,即“Hello World, HelloWorldActivity!”

 

6、程序源文件

 

接好程序框架、资源文件和布局文件后,我们就可以开始着手了解源文件了。如下是AndroidHello World应用的源文件:

 

  1. package com.sinosuperman.android;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.widget.TextView;  
  6.   
  7. public class HelloWorldActivity extends Acitity {  
  8.     /* Called when the activity is first created. */  
  9.     @Override  
  10.     public void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         TextView tv = new TextView(this);  
  13.         tv.setText("Hello World!!!");  
  14.         setContentView(tv);  
  15.     }  
  16. }  


   我们来简单解释一下这个程序。我们所创建的HelloWorldActivity类,继承了Activity类,重载了它的onCreate方法。该方法有一个Bundle类型的参数savedInstanceState。该方法中,先调用ActivityonCreate,然后创建一个TextView组件,再用setContentView来设置它为布局中要显示的组件。

 

7proguard.cfg


   简单说,proguard.cfgProGuard来提供防止你的应用被反编译的机制。ProGuard是一个开源项目,其主页是:http://proguard.sourceforge.net/ 通过一些编码混淆、重命名等方式。另外ProGuard还可以缩小你的代码量、移除无用代码。一方面为了给予你的应用一个合理的身材,又防止反编译你的代码,使用ProGuard提供的保护机制是非常有必要的。

  

   应用在创建之初,会自动创建proguard.cfg文件。但是它只考虑了最普遍的情况,你要根据你自己的应用来写proguard.cfg配置。由于HelloWorld应用的简单,这里不详述。后续会介绍proguard.cfg的写法。


8project.properties


   简单的HelloWorld应用中,该文件如下:

 

  1. # This file is automatically generated by Android Tools.  
  2. # Do not modify this file -- YOUR CHANGES WILL BE ERASED!  
  3. #  
  4. # This file must be checked in Version Control Systems.  
  5. #  
  6. # To customize properties used by the Ant build system use,  
  7. "ant.properties", and override values to adapt the script to your  
  8. # project structure.  
  9.   
  10. # Project target.  
  11. target=android-8  


   这可以看到它标示了应用开基于的Android版本。注视中提示对这个文件的修改不会其作用,该文件由Android开发工具自动产生,可以创建Java开发者熟悉的ant.properties来管理你的开发项目。通过target变量,来对应用进行Android开发版本控制。

 

9assets目录


   Android项目中的assets目录与res类似,最大的区别是res目录会为资源生成索引使用的ID,assets不会。

 

   到这里,就简要分析完了HelloWorld程序 : )

 

www.aidsex.cn

原文地址:https://www.cnblogs.com/rollrock/p/2343292.html