《第一行代碼》第三版之我的第一行Android代碼(一)

1.1.Android簡介
1.1.1.Android系統架構

       自下而上:Linux內核層(爲硬件提供底層驅動。eg:顯示驅動、音頻驅動等)、系統運行時層(C/C++庫和android運行時庫,前者有Sqlite和OpenGL等,後者有ART虛擬機和核心庫等)、應用框架層(系統API,譬如ActivityManager、WindowManager、ContentProvider)、應用層(應用程序,譬如聯繫人、短信、自己開發的app等)。
       2020.3月逐漸推出Android 11版本。5.0使用ART虛擬機代替DVM虛擬機,提出Material Design來優化界面設計,5.0以上佔比超過85%。
1.1.2.Android應用開發特色
     (1)四大組件:Activity、Service、BroadcastReceiver、ContentProvider。Activity是應用程序顯示的界面;Service後臺默默運行,即使用戶退出app;BroadcastReceiver使得app接受各處廣播消息,也可以向外發出消息;ContentProvider可以使得app之間的數據共享。譬如:讀取聯繫人;
    (2)豐富系統控件:Android界面系統控件和自定義控件。
    (3)SQLite數據庫:輕量級、運算速度極快的嵌入式關係型數據庫。支持SQL語法和系統API。
    (4)強大多媒體:音樂、視頻、錄音、拍照等。
1.2.搭建開發環境
       JDK(java運行環境、工具集合、基礎類庫)+SDK(android開發工具包)+Android studio
1.3.創建Android項目
1.3.1.文件結構解析


1.build:編譯自動生成的文件
2.gradle:gradle wrapper配置文件
3..gitignore:哪些文件排除在版本控制之外
4.Build.gradle:項目全局gradle腳本
5.Grale.properties:全局gradle配置文件,配置相關屬性
6.gradlew和gradlew.bat:命令行界面執行gradle命令
7.Local.properties:本機SDK路徑
8.Setting.gradle:制定項目所有引入的模塊,目前只有app模塊
9.app目錄:項目代碼、資源
   9.1.build:系統自動生成文件
   9.2.libs:第三方jar包
   9.3.androiTest:Android test自動化測試用例
   9.4.Java:所有java代碼放置地方,MainActivity.java
   9.5.res:圖片、佈局、字符串等
   9.6.AndroidManifest.xml:項目配置文件,譬如四大組件的定義
   9.7.Test:unit test自動化測試用例
   9.8.Build.gradle:app模塊的gradle構建樣本,項目構建相關配置
   9.9.Progurad-reles.pro:執行項目混淆規則
10.res目錄:圖片、佈局、字符串等


  10.1.drawable:圖片
  10.2.Mipmap:圖標(不同後綴更好兼容設備)
  10.3.Vaules:字符串、樣式、顏色等。以下爲values的內容


     通過R.string.app_name或者@string/app_name獲得該字符串的引用。
1.3.2.詳解build.gradle文件
     最外層目錄的build.gradle

//Gradle是基於Groovy領域特定語言(DSL)來進行項目設置的。
buildscript {
    ext.kotlin_version = '1.3.71'
    //閉包聲明瞭兩個代碼倉庫
    repositories {
        google() //google擴展依賴庫
        jcenter()//第三方開源庫

    }
    //使用classpath聲明瞭兩個插件
    dependencies {
        //Gradle插件的目的是構建android項目,與AS版本一致
        classpath 'com.android.tools.build:gradle:3.6.3'
        //Kotlin插件
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

     app目錄的build.gradle

apply plugin: 'com.android.application'//應用程序模塊,也可以設置爲庫模塊
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'//kotlin模塊和擴展功能
//項目構建的各個屬性
android {
    compileSdkVersion 28  //指定項目編譯版本
    buildToolsVersion "29.0.3"  //Android10.0SDK編譯
    //項目更多細節配置
    defaultConfig {
        applicationId "com.example.myapplication"//應用唯一標識符
        minSdkVersion 21///項目最低兼容版本,最低兼容5.0
        targetSdkVersion 28//目標版本,在該版本充分測試,啓用新特性,9.0
        versionCode 1 //項目版本號
        versionName "1.0"//項目版本名
        //啓用Junit測試用例
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    //生成安裝文件的相關配置
    buildTypes {
    //一般一個release包(正式版安裝文件配置),一個debug包(測試版安裝文件配置)。
        release {
            minifyEnabled false//是否對項目混淆
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            //選擇混淆規則
        }
    }

}
//指定項目所有依賴關係。本地依賴(jar包或者目錄)、庫依賴(項目中的庫模塊)和遠程依賴(jcenter倉庫開源項目)。
dependencies {
    //implementation fileTree本地依賴,libs目錄底下的所有jar包  
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    //implementation遠程依賴聲明,標準遠程庫格式,androidx.appcompat:爲域名部分,appcompat爲工程名,1.0.2是版本號
    //Gradle構建時會檢查本地是否有庫緩存,沒有會自動聯網下載並添加到項目構建路徑
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.core:core-ktx:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    //implementation project是庫依賴,譬如一個庫名叫help,可以聲明爲(implementation project('help'))
    //聲明測試用例庫的
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

1.4.日誌工具
       Android中日誌工具類是log。五個級別:log.v(verbose,瑣碎的、意義最小的信息)、log.d(debug,調試信息)、log.i(info,重要信息,譬如分析用戶數據行爲信息)、log.w(warn,警告信息,潛在風險需要修復)、log.e(error,錯誤信息)。譬如:Log.d("MainActivity1","onCreate Create")。一個tag是傳入當前類名,一個msg是打印具體內容。打印內容包括時間、進程號、類名和內容等。Logv可以看所有log信息。Logd可以看debug及以上級別的信息,依次類推。
      System.out.println相較於log,日誌開關不可控、沒有級別劃分、不能添加日誌標籤。有四個過濾器。Show only selected applications顯示當前選中程序的日誌;firebase是開發者工具和基礎架構平臺,不用管。No filter沒有過濾器,所有日誌都會顯示;edit fileter config自定義過濾器。

         

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章