編輯:Android開發實例
前面通過android 入門之二【android 體系架構】和android入門之三【應用程序組成】從大的結構框架和應用級別了解了下android,這裡將從應用工程的角度來了解一個典型的應用工程的文件組成是什麼樣的以及這些文件的作用和在 android應用中扮演的角色,這裡從一個最簡單最典型的應用“HelloWorld”應用去逐個的分析android應用工程中各個文件夾或者文件的內容。
前面已經講過了android開發環境的搭建(android 入門之一【開發環境搭建】),這裡使用第一節搭建的環境來創建第一個android應用程序。
打開Eclipse依次選擇”File->New->Project...”彈出如下圖對話框:
在對話框中選擇Android下的”Android Project“,然後”Next“,彈出下面的對話框:
在Project name 中填寫項目的名稱“HelloWorld”,
在Contents中選擇“Create new project in workspace”表示要新建一個項目,
第二項“Create project from existing source” 表示從已有的代碼中創建項目,一般用於導入已經存在的項目到當前的工作窗口中。
再選擇Use default loaction。
“Create project from existing sample” 表示創建android的示例項目,如果選自則會在項目中將android的示例導入到當前創建的項目中。
在Build Taget中選擇android的版本,這裡選擇android 2.0。
在屬性框中,填寫應用的名稱:“HelloWorld”,
Package name 為:“com.andorid.helloworld”
Activity 為:main
Min SDK Version:5,這個5表示當前Andorid SDK的版本。
以上參數填寫完成後“Finish“,HelloWorld項目就創建完成了。
將上面創建好的Helloworld項目中的文件夾逐一展開如下圖所示
src 目錄下放置的是Java源文件,這個文件中可以創建若干的Java包,在包中可以創建應用的處理邏輯,應用的Activity都會放在這個目錄下,上圖中的“main.java”就是在創建項目的時候創建的一個Activity,在Activity中可以編寫控制View的邏輯。核心的控制邏輯都都會寫在這裡,看看“main.java”中都有什麼:
1: package com.android.helloworld;
2:
3: import android.app.Activity;
4: import android.os.Bundle;
5:
6: public class main extends Activity {
7: /** Called when the activity is first created. */
8: @Override
9: public void onCreate(Bundle savedInstanceState) {
10: super.onCreate(savedInstanceState);
11: setContentView(R.layout.main);
12: }
13: }
代碼解釋:
第一行表示包的名稱。
3,4行代碼導入Android的包,相當於.net 中的using語句引入命名空間。
6到13行是main類的主體,main類繼承自Activity,android中所有的用戶界面展示的類都直接或間接繼承自Activity。
8到12行是一個重要的函數,這個函數重寫Actitity中的onCreate,每一個繼承自Activity的子類都要重寫該方法來初始化界面,和asp.net中Page_Load事件相似,可以在這個方法中初始化界面上的元素,8行中“Override”表示方法的“重寫”是Java的關鍵字,11行設置了main這個Activity要展示的用戶界面的配置文件,”R.layout.main”是一個資源的常量,這個資源是對 main.xml的一個間接引用,當程序啟動時將main.xml文件中的內容展示給用戶。
這個目錄下放的是當前工程使用的android SDK.上圖中表示當前項目引用的是Android SDK 2.0,不同版本的SDK這個文件的名會不同。
gen目錄下的Java包中有一個“R.java”文件,這個文件是由Eclipse自動生成的,開發者不用去修改和維護裡面的內容,但是這個文件卻非常有用,它和另一個文件夾res緊密相連,對res下資源的操作都會導致R.java文件的重新編譯,R.java 中定義的常量類也是間接幫助Activity完成對資源的應用,android這樣設計的好處是,使得復雜的資源通過專門的類來管理而使得程序中的代碼變得整齊,強壯,不會出現一些“弱類型的字符串”而變成強類型(這裡借用了.net中的術語),減少程序出錯和減少bug。
基本的R.java的代碼如下:
1: /* AUTO-GENERATED FILE. DO NOT MODIFY.
2: *
3: * This class was automatically generated by the
4: * aapt tool from the resource data it found. It
5: * should not be modified by hand.
6: */
7:
8: package com.android.helloworld;
9:
10: public final class R {
11: public static final class attr {
12: }
13: public static final class drawable {
14: public static final int icon=0x7f020000;
15: }
16: public static final class layout {
17: public static final int main=0x7f030000;
18: }
19: public static final class string {
20: public static final int app_name=0x7f040001;
21: public static final int hello=0x7f040000;
22: }
23: }
這個目錄中通常放置一些原生的資源,它會在android打包的時候原封不動的一起打包,安裝時會直接解壓到對應的assets目錄中。這裡同常放置一些項目中用到的多媒體資源等。注意:在醒目打包的時候刪除掉項目中沒有引用到的資源,因為這會占用設備資源同時也會“撐大”應用apk包
這個目錄中放置的是android要用到的各種資源
drawale—*dpi 文件夾中放置一些圖片資源項目ico等
layout 中放置項目布局的XML文件,所有UI布局的xml文件都放置這個文件夾中,並且每創建一個資源R.java中都會創建一個資源常量。android的 UI是通過xml來描述的,它將UI展示和邏輯控制分離這也是android的一個有點,針對不同的分辨率的適配也是相當容易的,不用去改動業務邏輯只需要重新創建一套適應的xml布局就可以了。
main.xml文件內容:
1: <?xml version="1.0" encoding="utf-8"?>
2: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3: android:orientation="vertical"
4: android:layout_width="fill_parent"
5: android:layout_height="fill_parent"
6: >
7: <TextView
8: android:layout_width="fill_parent"
9: android:layout_height="wrap_content"
10: android:text="@string/hello"
11: />
12: </LinearLayout>
這個文件中的內容就是android UI布局的描述,針對android的UI布局後面會專門用篇幅來介紹,這裡不做過多的解釋。
這個目錄中放置的是一些字符串,數組,顏色,樣式,動畫等資源,好的程序設計習慣是將界面中所用到的信息資源以單獨文件形式存儲,這樣好處是易於管理,易於維護,更重要的原因是在多語言處理的時候會非常方便,我想Google在當時設計android的時候一定充分考錄到了這些因素,所以才使得多語言變得簡單,values目錄下的資源也是通過Eclipse來維護其和R.java的對應關系,Activity 不需要引用直接的資源而是通過引用R.java中的常量,這一點非常巧妙,也為我們編程帶來了極大的便利,string.xml中的文件內容:
1: <?xml version="1.0" encoding="utf-8"?>
2: <resources>
3: <string name="hello">Hello World, main!</string>
4: <string name="app_name">HelloWorld</string>
5: </resources>
這個文件中定義了兩個變量“hello” 和“app_name”,hello的值”Hello World,main !”表示在界面中顯示這樣一個問候語,它的引用在main.xml文件中:android:text="@string/hello",這個"@string/hello“是引用資源的常用的寫法,以@+文件名+資源的名稱。app_name的值“HelloWorld”表示項目的名稱。在R.java的定義如下:
1: public static final class string {
2: public static final int app_name=0x7f040001;
3: public static final int hello=0x7f040000;
4: }
這裡將文件名string.xml轉化成一個string 靜態類,文件中的資源名被轉化成了一個靜態的整型常量。
Values 目錄中的每一個文件都會轉化成R.java中的一個靜態類,文件中的每一個資源都會轉化成R.java中對應靜態類的靜態整型常量,這樣Activiy中通過一個解析器就可以獲取到對應的資源。
這個文件是整個項目的配置資源,裡面配置的內容包括,Activity,訪問權限等等,這個文件相當於asp.net中的web.config文件。
AndroidManifest.xml文件的內容:
1: <?xml version="1.0" encoding="utf-8"?>
2: <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3: package="com.android.helloworld"
4: android:versionCode="1"
5: android:versionName="1.0">
6: <application android:icon="@drawable/icon" android:label="@string/app_name">
7: <activity android:name=".main"
8: android:label="@string/app_name">
9: <intent-filter>
10: <action android:name="android.intent.action.MAIN" />
11: <category android:name="android.intent.category.LAUNCHER" />
12: </intent-filter>
13: </activity>
14:
15: </application>
16: <uses-sdk android:minSdkVersion="5" />
17:
18: </manifest>
這個文件中7到13行配置了項目中的UI包、用到的Activity以及項目啟動的主界面為“.main”(這main就是src目錄下的那個main.java文件的類名)16行配置了使用android SDK的版本。
這個文件中記錄了android項目運行時的環境信息以及Android SDK的版本信息,文件的內容如下:
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: # "build.properties", and override values to adapt the script to your
8: # project structure.
9:
10: # Indicates whether an apk should be generated for each density.
11: split.density=false
12: # Project target.
13: target=android-5
咋一看好像android中的資源引用關系很復雜,其實只要理順它們之間的關系就不難理解了,並且這個架構非常的靈活,尤其在對語言和多分辨率的支持為開發者做了很多工作,不用在去為了適配不同語言和不同分辨路的機型而搞的焦頭爛額。
轉自:http://www.cnblogs.com/vaiyanzi/archive/2010/05/22/1741306.html
前面文章講解了Android的藍牙基本用法,本文講得深入些,探討下藍牙方面的隱藏API。用過Android系統設置(Setting)的人都知道藍牙搜索之後可以建立
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個
先給大家展示效果圖: package com.example.walkerlogin1; import android.app.Activity; im
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個