第一天

1,學(xué)習(xí)目標(biāo)
    a, android的發(fā)展歷史,以及android和java的關(guān)系
    b,掌握android開發(fā)環(huán)境搭建
    c,創(chuàng)建第一個android apk
    d,android 工程結(jié)構(gòu)分析
    c,android的調(diào)試方法的使用

2,學(xué)習(xí)內(nèi)容
     android的發(fā)展歷史和特點(diǎn):
    
     特點(diǎn)
        1.手機(jī)OS
        2.嵌入式電子設(shè)備 廣泛采用android系統(tǒng)   以前 wince ,qt
        3.google移動開發(fā)平臺   競爭對手:IOS,WP 半封閉
        4.最大特點(diǎn):開源免費(fèi)  
        

3, android開發(fā)環(huán)境搭建:
        1.下載JDK---提供java代碼編譯和運(yùn)行的環(huán)境
        2.下載android SDK ---提供android應(yīng)用程序所必須的開發(fā)包,文檔,例子等等
        3.下載 Eclipse IDE ---提供程序編寫和編譯的集成開發(fā)環(huán)境
        4.下載 ADT Eclipse插件 ---提供android應(yīng)用程序的必要工具,比如打包,數(shù)字驗證等
        google 為方便開發(fā)者集成了工具包 adt-bundle-windows-x86 開發(fā)工具包 2,3,4
5,版本
    食物版本:   API版本
    1.x     
    2.x
    3.x
    4.x     
    5.0 (最新版本api22-- lollipop 棒棒糖)

7,建立一個helloworld
    0,MiniMum Required SDK:最低支持的android api版本,低于這個版本的android手機(jī)不能安裝你的應(yīng)用 
          Target SDK:你的應(yīng)用最高支持android api版本
      Compile With:哪個版本的android SDK(1.5~4.2)編譯你的工程,也就是最適合的,
            最原生支持你的應(yīng)用的android版本。
      Theme :這個隨意,主題選擇 
    1,apk產(chǎn)生的過程
        .java->.class->.dex->.apk                                                                                                                                                                                                                                                                                                           
        1) 所有的資源文件,都會被aapt進(jìn)行處理。解析的結(jié)果最后會被aapt通過一個R.java保存一個二進(jìn)制樹的索引,編程時可通過這個R.java文件進(jìn)行XML的訪問。
        2) 所有的Java文件,都會被JDK里的javac工具編譯成bin目錄下按源代碼包結(jié)構(gòu)組織的.class文件(.class是標(biāo)準(zhǔn)的Java可解析執(zhí)行的格式),
            比如我們這個例子里生成的bin/classes/com/hello/*.class文件。然后這些文件,會通過SDK里提供的一個dx工具轉(zhuǎn)換成classes.dex文件。
            這一文件,就是會被Dalvik 虛擬機(jī)所解析執(zhí)行的
        3) 最后我們得到的編譯過的二進(jìn)制資源文件和classes.dex可執(zhí)行文件,會通過一個apkbuilder工具采用zip壓縮算法打包到一個文件里,
            生成了我們所常見的.apk文件。
        4) 最后.apk文件,會通過jarsigner工具進(jìn)行校驗,這一校驗值會需要一個數(shù)字簽名。如果我們申請了Android開發(fā)者帳號,這一數(shù)字簽名就是
        Android所分發(fā)的那個數(shù)字證書;如果沒有,我們則使用debug模式,使用本地生成的一個隨機(jī)的數(shù)字證書,這一文件位于
        ~/.android/debug.keystore。
        
        
8,如何android設(shè)備運(yùn)行程序
    1)ADT 模擬器
    2)真實(shí)設(shè)備 裝驅(qū)動

9,apk文件包含了什么? 通過壓縮包文件都可以看到??
    AndroidManifest.xml 清單文件
    classes.dex  //代碼的二進(jìn)制,android虛擬機(jī)執(zhí)行的不是*.class代碼而是dex文件,由dx工具產(chǎn)生
    resources.arsc//編譯后的二進(jìn)制資源文件
    res
    META-INF  //數(shù)字簽名信息 


10,工程結(jié)構(gòu)分析
     APK文件其實(shí)是zip格式,但后綴名被修改為apk,通過UnZip解壓后,可以看到Dex文件,Dex即Android Dalvik執(zhí)行程序
    src:源文件
    gen:ADT插件幫我們自動生成的文件,里面包括一個重要文件R.java
    android.jar:Java 歸檔文件,包含構(gòu)建應(yīng)用程序所需的所有的Android SDK 庫(如Views、Controls)和APIs 
        有了這個,就可以import各種包和類了
    assets: 資源目錄,放一些html,txt mp3、視頻類文件等等
    res:放資源文件,比如圖片,布局文件和字符串,菜單等文件
        drawable-x:包含一些你的應(yīng)用程序可以用的圖標(biāo)文件(*.png、*.jpg)
        layout:布局文件,每一個activity都有對應(yīng)的布局文件xml,控制這個activity各種控件的位置和大小
        values:軟件上所需要顯示的各種文字。可以存放多個*.xml文件,還可以存放不同類型的數(shù)據(jù)。
            比如arrays.xml、colors.xml、dimens.xml、styles.xml  string.xml, 鍵值對在R.java中會生成id
    Androidmanfest.xml:Android工程的系統(tǒng)清單文件,控制應(yīng)用的圖標(biāo),名稱,訪問權(quán)限等屬性并配置四大組件
    default.properties:記錄項目中所需要的環(huán)境信息,比如Android的版本等。
    libs:   android-support-v4,保證來高版本sdk開發(fā)的向下兼容性

    R.java是根據(jù)res目錄下的資源信息而自動創(chuàng)建的文件,Android程序開發(fā)過程中為你統(tǒng)一管理資源,添加ID、
        有了這個文件,在代碼中就可以訪問各種資源
        
    包括四個靜態(tài)內(nèi)部類,靜態(tài)類的名字都與res中的一個名字對應(yīng),即R類定義該項目所有資源的索引
        drawable:圖片類,添加一張圖片就產(chǎn)生一個類
        layout:布局類,對應(yīng)layout中的界面文件
        string:字符串類

11,xml文件--eXtensible Markup Language)即可擴(kuò)展標(biāo)記語言,很類似 HTML
    一種簡單的數(shù)據(jù)存儲文檔描述語言,語法簡單,采用樹形數(shù)據(jù)結(jié)構(gòu),語法更加嚴(yán)格從而保證數(shù)據(jù)的安全和唯一
    XML 的設(shè)計宗旨是存儲或傳輸數(shù)據(jù),而非顯示數(shù)據(jù),html主要用于顯示
    1)封閉 xxx自定義
        <xxx 屬性1=值1 屬性2=值2  ...  />
    2)開放
        <xxx 屬性1=值1 屬性2=值2  ...  >
                <xxx 屬性1=值1 屬性2=值2  ...  />
        </xxx>
    3)區(qū)分大小寫
    比如:
        書
            四大名著
                三國
                西游
                紅樓
        xml的例子:
            <book>
                <four_books>
                        <sanguo  category="Class">
                                <title lang="en">Three Kingdoms </title> 
                                <author>羅</author> 
                                <year>985</year> 
                                <price>30.00</price> 
                        </sanguo>
                </four_books>
            </book> 

        xml文件僅僅是純文本而已,XML 被設(shè)計用來結(jié)構(gòu)化、存儲以及傳輸信息,XML 不會做任何事情
        <?xml version="1.0" encoding="utf-8"?>  <!-- 第一行是 XML 聲明。它定義 XML 的版本 (1.0) 和所使用的編碼 -->
        <note>
                <to>George</to>
                <from>John</from>
                <heading>Reminder</heading>
                <body>Don't forget the meeting!</body>
        </note>
        上面的這條便簽具有自我描述性。它擁有標(biāo)題以及留言,同時包含了發(fā)送者和接受者的信息。
        但是,這個 XML 文檔仍然沒有做任何事情。它僅僅是包裝在 XML 標(biāo)簽中的純粹的信息,這些信息必須由程序員按照
        一定的方式進(jìn)行解析
    
12,android工程中主要的xml文件:  
    androidmanifest.xml 清單文件 告訴系統(tǒng)我有哪些東西,可以參考Android SDK文檔中解釋
    <!-- 必須包含一個<application>元素并且指定xlmns:android和package屬性 -->
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
        <!-- xlmns:android指定了Android的命名空間 -->
        package="com.test"       //包名,也是一個應(yīng)用進(jìn)程的默認(rèn)名稱,一般會以應(yīng)用的域名來作為包名
        android:versionCode="1"   //給設(shè)備程序識別版本用的,必須是一個整數(shù)值代表app更新過多少次
        android:versionName="1.0" > //給用戶查看版本用的,需要具備一定的可讀性,比如“1.0.0”這樣的

        <uses-sdk android:minSdkVersion="9" /> //指定Android應(yīng)用中所需要使用的SDK的版本,最小能夠運(yùn)行的api版本
        
        <application  //應(yīng)用配置的根標(biāo)記,位于<manifest>下層  容器:放android程序組件 四大組件
            android:icon="@drawable/ic_launcher"  //應(yīng)用圖標(biāo)
            android:label="@string/app_name" >  //應(yīng)用名,安裝后在系統(tǒng)中的名字
            <activity   //代表定義的Activity的子類
                android:name=".MyhelloActivity" //類名
                android:label="@string/app_name" >  //窗口的標(biāo)題

                android:theme="@style/AppTheme" > 
                //主題  若改成:android:theme="@android:style/Theme.Dialog" 就會變成對話框形式的activity

                <intent-filter>  //過濾器,該程序組件能干什么
                <action android:name="android.intent.action.MAIN" /> //應(yīng)用啟動的入口,多個activity存在時先啟動該activity

                <category android:name="android.intent.category.LAUNCHER" /> //表示該程序可以顯示在桌面上
                </intent-filter>
            </activity>
        </application>

    </manifest>
    ============================================================================

    layout_hello.xml:
        <TextView
                android:id="@+id/textView1"    //給這個控件設(shè)置一個id號碼,在代碼中就可以找到
                                        //自動的在R.java中產(chǎn)生一個id號碼
                                        //  class R{              class id{      textView1 =0x70e0e0e0e           }  }
                                        //在代碼中就可以直接找到該控件
                                        //  R.id.textView1
                android:layout_width="wrap_content"  //  該控件的寬度, 控件的大小是隨著內(nèi)容變化的
                android:layout_height="wrap_content"  //  該控件的高度
                android:text="@string/hello_world" /> //該控件的顯示內(nèi)容
    values/strings.xml
            <resources>
                <string name="test">好奇紙尿褲</string>
            </resources>
            在其他的地方去使用:
                1,另外的xml文件中會使用:
                    布局xml:
                          <TextView
                            android:id="@+id/tv1"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="@string/test" />  //在這個地方引用
                2,在代碼中用到:在Activity子類中采用調(diào)用
                    String  str = getResources().getString(R.string.test);

    values/dimens.xml: 表示大小尺寸的資源
            <dimen name="mySize">32dp</dimen>
            在其他的地方:
                1,另外的xml文件中會使用:
                    布局xml:
                         <TextView
                            android:id="@+id/tv1"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:textSize="@dimen/mySize"
                            android:text="@string/test" />
    
    values/styles.xml
                <style name="myStyle">
                    <item name="android:textColor">#22ff22</item>
                    <item name="android:textSize">32dp</item>   
                </style>
            使用:
            <TextView
                android:id="@+id/tv1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                style="@style/myStyle"
                android:text="@string/test" />
    menu/hello.xml
            <menu xmlns:android="http://schemas.android.com/apk/res/android" >

                    <item
                    android:id="@+id/action_settings"
                    android:orderInCategory="100"
                    android:showAsAction="never"
                    android:title="@string/action_settings"/>

                    <item
                    android:id="@+id/item2"
                    android:title="@string/test"/>
            </menu>
在Android中打印調(diào)試信息:
    1, java中System.out
    2,  Log函數(shù)
        private final String TAG = "HelloActivity";
        Log.i(TAG, "str = " + str);
========================================================================
14,如果Activity要操作UI組件對象?
    MVC模式
        1.UI  交給main.xml完成
        2.業(yè)務(wù)邏輯 交給activity子類重寫onCreate()
        3.程序組件有哪些交清單
    MVC架構(gòu)起始于一個GUI(graphical user interface designpatter,圖型用戶界面設(shè)計原型)原型,其目的是
    實(shí)現(xiàn)動態(tài)程序設(shè)計,使日后對于程序修改及擴(kuò)展更加便利,并使某些程序代碼可重復(fù)利用。另外通過對復(fù)雜度的
    簡化,使程序結(jié)構(gòu)更加直觀。
    軟件系統(tǒng)通過對自身基本部份分離的同時也給予各部分應(yīng)有的功能,如同一所大公司一樣,將工作區(qū)分做到專業(yè)化,
    專業(yè)人員可以通過自身的專長分組:
        View -視圖層能夠?qū)崿F(xiàn)數(shù)據(jù)有目的的顯示,視圖需要訪問它監(jiān)視的數(shù)據(jù)模型(Model)
                    美工或UI設(shè)計人員可以獨(dú)立進(jìn)行圖形接口設(shè)計及美化。
        Model -數(shù)據(jù)模型”(Model)用于封裝與應(yīng)用程序的業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù)以及對數(shù)據(jù)的處理方法
                    模型不關(guān)心它會被如何顯示或是如何被操作,比如數(shù)據(jù)庫專家進(jìn)行數(shù)據(jù)管理和數(shù)據(jù)庫的實(shí)現(xiàn)算法
        Controller -控制器起到不同層面間的組織作用,用于控制應(yīng)用程序的流程
    

    在Android中,程序設(shè)計師利用Java撰寫程序邏輯及架構(gòu),
    美工設(shè)計則使用xml來撰寫用戶界面,
    數(shù)據(jù)庫人員則針對SQL數(shù)據(jù)庫進(jìn)行設(shè)計及優(yōu)化。

------------------------------------------------------------------------------------------------------------
資源文件的簡單使用:
res:
    strings.xml: 一:是為了國際化  二:為了減少應(yīng)用的體積,降低數(shù)據(jù)的冗余
            定義字符串
                    <string name="hello_world">Hello world!</string>
            獲取對應(yīng)的值:
                    1,  在Activity中使用
                                String appName=(String) this.getResources().getString(R.string.hello_world); 
                    2,在其他xml中,比如布局文件
                                android:text="@string/hello_world"
    arrays.xml定義數(shù)組
            定義:
            <!--通用的array-->
                 <array name="common">
                    <item>@drawable/ic_launcher</item>
                    <item>@drawable/ic_launcher</item>
                    <item>@drawable/ic_launcher</item>
                    <item>@drawable/ic_launcher</item>
                    <item>@drawable/ic_launcher</item>
                  </array>
                <string-array name="countries"> 
                    <item >中國</item>  
                    <item >美國</item>  
                </string-array> 
            獲取:
                java代碼:
                    
                    
---------------------------------------------------------------------------------------------------------------
   adb和ddms的使用, E:\adt-bundle-windows-x86-20130522\sdk\platform-tools放進(jìn)環(huán)境變量
    adb:
        adb device 顯示當(dāng)前有效的avd或是真實(shí)機(jī)器
        adb push上傳文件至SD卡
            adb push 001.jpg /sdcard(復(fù)制文件到/sdcard目錄下)
            adb push pictures /sdcard(復(fù)制pictures目錄到/sdcard目錄下)
            adb shell (進(jìn)入命令行模式)
                #cd /sdcard(進(jìn)入/sdcard目錄)
                #ls (列出SD卡中的文件)
        adb pull /sdcard/001.jpg .(下載/sdcard的文件到PC)

        adb install filename.apk(安裝filename.apk)
        adb install-r filename.apk(保留已設(shè)定數(shù)據(jù),重新安裝filename.apk)
        adb uninstall package (移除 APK)
        adb uninstall -k package(移除程序時,保留數(shù)據(jù))
            注意package名稱不是安裝APK套件時的文件名,可以去/data/data或data/app目錄查看
    logcat的使用

    DDMS調(diào)試環(huán)境:Dalvik Debug Monitor Service
        設(shè)備面板:當(dāng)前運(yùn)行的模擬器,模擬器內(nèi)的所有進(jìn)程信息.
        信息輸出面板:類似java控制臺
        線程跟蹤面板:
        Heap內(nèi)存跟蹤面板
        模擬器控制面板
        文件管理面板
  
   Android SDK包全覽和查詢方法
    sdk/docs/reference

    
3,總結(jié)

1, 配置sdk
2,編寫第一個Helloworld
3,創(chuàng)建avd
4,使用logcat查看調(diào)試信息和DDMS控制臺
5,修改各種xml文件
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容