1. 程式人生 > >1.0 安卓學習之開始啟程

1.0 安卓學習之開始啟程

文章目錄

前言

參考書:第一行程式碼
開發環境:AS


安卓歷史

  • 安卓公司被Google收購
  • 安卓OS基於Linux開發
  • 安卓作業系統2010年被Linux團隊從Linux核心主線中除名
  • 安卓OS程式碼開源,可自由使用和定製(如Flyme系統)
  • Google為安卓建立了完善的生態系統
  • 安卓5.0版本用ART執行環境替代了Dalvik虛擬機器,提升執行速度

安卓系統架構

分為四層架構,具體見書

  • Linux核心層
    安卓系統是基於Linux核心,該層為安卓裝置的各種硬體提供底層驅動
  • 系統執行庫層
    • 該層通過一些C++/C庫為安卓系統提供了主要的特性支援,如SQLite庫提供資料庫的支援
    • 該層還有安卓執行時的庫,包括一些核心庫,ART執行環境

      (使得每個APP執行在獨立的程序當中,擁有自己的Dalvik虛擬機器【相較於JVM,優化後更適合移動裝置】例項)
  • 應用框架層
    提供了建立APP的API
  • 應用層,例如各類APP

安卓四大元件

  • 活動:APP中看得到的東西都放在活動中
  • 服務:後臺執行,即使退出也可能在執行
  • 廣播接收器:允許應用接收或傳送廣播訊息,如電話,簡訊
  • 內容提供器:為APP間共享資料提供可能,如讀取電話簿的聯絡人

除了四大元件,還有SQLite資料庫(輕量級運算速度極快的嵌入式關係型資料庫),LBS(基於位置的服務),多媒體(音樂),系統控制元件(button等)


建立安卓專案

  • 公司域名:example.com
  • 安卓系統通過包名區分APP,所以要有唯一性
  • 最小版本SDK設定為API 15可覆蓋98%的移動裝置
  • 命名規範: 活動名HelloWorld 佈局名 hello_world_layout
  • tips
    • 錘子:編譯專案
    • 下拉列表:選擇執行哪個專案
    • 三角形:執行專案

Android專案結構

  • Gradle目錄下包含了gradle wrapper的配置檔案,使用該方式不需要提前將gradle下載好,而會自動根據本地的快取情況決定是否下載,預設不啟用該方式
  • Gitignore為版本控制檔案,將某些檔案排除在版本控制之外
  • Build. Gradle:專案全域性的gradle構建指令碼,不需修改(專案型別)
  • Gradle.properties是全域性的gradle配置檔案,在這裡配置的屬性會影響專案中所有的gradle編譯指令碼
  • local.properties指定安卓SDK的位置,會自動生成,除非改變位置,一般不修改
  • Settings. Gradle指定專案中所有引入的模組,自動完成,不需手動修改

APP目錄下內容

1) Libs:專案中使用到第三方包,將jar包放入該目錄下,則這些包自動新增到構建路徑中
2) AndroidManifest.xml:安卓專案的配置檔案 首先用於註冊四大元件,四大元件一定要註冊後才能使用,其次新增APP許可權
3) build.gradle:APP模組的構建指令碼,指定構建時配置
4)res目錄下包括drawable目錄(圖片),layout目錄(佈局),values目錄(字串,樣式,顏色),mipmap(應用圖示)
5)Build. Gradle:app模組的gradle構建指令碼,指定專案構建的相關配置

AndroidManifest.xml

<activity android:name=".MainActivity" android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

指定該活動為主活動,首先啟動的活動


android:icon="@mipmap/ic_launcher"//指定應用圖示
android:label="@string/app_name"  //指定應用名稱

活動基類

在這裡插入圖片描述

引用專案的字串

在這裡插入圖片描述

  • 引用其他資源,string同理可替換為drawable,mipmap
  • setContentView()方法為當前活動引入佈局

build.gradle檔案(兩個)

  • AS採用gradle構建專案
  • Gradle是專案構建工具
  • 該專案構建工具使用一種基於groovy的DSL(領域特定語言)來宣告專案配置,摒棄基於XML(如Ant和Maven)的各種繁瑣配置

外層檔案

  • 參考build.gradle

  • 不需要修改,除非新增全域性的專案構建配置

內層檔案

  • 參考build.gradle
  • 關於目標版本:該項指明的版本值表明你在該版本進行充分測試,則系統會為你APP引入該版本所對應的最新特性和功能,否則就不引入
  • 通過AS生成的APK檔案都是測試版APK檔案

repositories {
jcenter()
maven { url “https://maven.google.com” }
maven { url “https://jitpack.io” }
}
閉包中宣告jcenter()這行配置,jcenter()是程式碼託管倉庫,聲明後可以用該倉庫的開源專案


classpath ‘com.android.tools.build:gradle:2.2.2’
表示gradle來構建的是安卓專案


defaultConfig {
    applicationId "com.bestlucky.graph" 指定專案包名
    minSdkVersion 15
    targetSdkVersion 27
    versionCode 1  專案版本號
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

buildTypes {指定生成APK的配置
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ 專案混淆規則
} }

dependencies閉包

指定專案依賴關係,共三種

在這裡插入圖片描述

dependencies { 
        compile fileTree(dir: 'libs', include: ['*.jar'])
       //屬於本地依賴(本地的jar包或目錄)
       androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
        compile 'com.android.support:appcompat-v7:27.+'
    //屬於遠端依賴,對jcenter庫上的開源專案新增依賴關係
        compile 'com.github.PhilJay:MPAndroidChart:v3.0.2'    
        //屬於遠端依賴,對jcenter庫上的開源專案新增依賴關係
        testCompile 'junit:junit:4.12'
        //宣告測試用例庫
    }

安卓日誌工具Log

Log.v():列印最為瑣碎的、意義最小的日誌資訊。(verbose)

Log.d():列印除錯資訊。(debug)

Log.i():列印重要的日誌資訊。(info)

Log.w():列印一些警告資訊。(warn)

Log.e():列印程式中的錯誤資訊。(error)

Log.d(tag,msg);可以看見程序號
Logt+tab的快捷鍵,快速日誌記錄

總結與重點

  • 安卓系統架構四部分
  • APP目錄下內容(libs,res,AndroidManifest.xml,gitignore,build.gradle)

第二章:
1)活動是可以包含UI的元件,主要用於和使用者互動
Launcher activity:將當前活動設定為主活動
2)Backwards compatibility表示為專案啟用向下相容的模式
3)在XML中引用一個ID,使用@id/id_name的語法
定義一個ID,則為@+id/id_name
4) setContentView方法給當前活動載入一個佈局,引數為佈局檔案的ID(如R.layout.first_layout)
5) 專案中新增的任何資源都在R檔案中生成相應的資源ID
6) 所有活動在AndroidManifest.xml中註冊才能生效
活動的註冊宣告放在標籤內,通過標籤來對活動進行註冊(–:name指明哪個活動)
配置主活動通過標籤
Android:label:指定活動中標題欄的內容和APP名稱
7) 若APP中未宣告任何活動為主活動,則表示該程式作為第三方服務供其他應用在內部呼叫,如快捷支付服務
8) 靜態方法Maketext建立一個toast物件,該方法要求傳入三個引數,第一個引數為上下文,活動本身就是上下文物件
9) findViewById()獲取佈局檔案中元素例項
10) 重寫方法ctrl+O快捷鍵
11) Res下建立menu資料夾,作為選單(右上角小點)資原始檔,該資原始檔中標籤來建立具體的某個選單項
12) getMenuInflater().inflate(R.menu.main,menu);
getMenuInflater()得到MenuInflater物件,呼叫該物件的inflate方法,給當前活動建立選單,return true表示允許建立的選單顯示出來

11)public boolean onOptionsItemSelected(MenuItem item)///P40
重寫該方法,定義選單項的邏輯處理

13) 銷燬活動
Finish()方法銷燬當前活動,同按下back鍵,直接呼叫
14) INTENT是Android程式各元件互動的方式,可以指明元件需要執行的動作以及在各個元件間傳遞資料
15) 顯式intent:(指明具體的activity)
Intent構造器:第一個引數是啟動活動的上下文,第二個是要啟動的活動
隱式intent:
指定抽象的action和category資訊,系統分析幫我們找到活動,這些資訊在標籤中書寫,只有當限定條件都滿足才能響應intent
利用intent的另一個建構函式,把action的字串傳入,每個intent只能指定一個action卻能指定多個category
利用隱式intent啟動其他系統程式,setData()方法接收一個URL物件(字串傳遞到parse方法中解析產生),指定當前intent正在操作的資料
利用intent傳遞資料