android高效入門>深入學習 書籍介紹 (上)

By | 2016-06-12

最新將出版的新書 「android高效入門>深入學習」,是我經過規劃後設計的Android書籍,使用Android Studio 2.0為開發環境,開發出符合Android 6.0規範的應用程式。近年來,Android 從 5.0 開始到目前的 6.0 版,所做的改變幅度非常大,加入的新元件與機制數量很多,而且可以感受到未來它會繼續以更創新的方式不斷地推出新功能、新機制。此時,筆者感到新世代變化帶來的衝擊,應該以更不一樣的方法學習,來因應未來的改變,並利用新的學習方法,看能不能迎頭趕上甚至超越目前快速進步的軟體革命。

本書中的學習路徑的規劃,是筆者經過五年的教學經驗所產生的方法與步驟,可能與其他書籍不同,希望讀者能夠在這些情境、需求、範例、案例中得到較高的學習效率與成果,非常歡迎與期待讀者們的意見與回饋,希望能夠教學相長。

第零章的目的是導引讀者一開始就能順利使用本書的範例,由GitHub網站中取得各章節當下的專案版本。內容如下:

Chapter 0 範例程式碼的使用

  • 0-1  Git 版本控制系統
  • 0-2  GitHub 網站
  • 0-3  GitHub 範例專案
  • 0-3-1 Git 工具軟體安裝
  • 0-3-2 由 Github 網站取得本書範例
  • 0-3-3 取得 Bmi 範例專案
  • 0-3-4 切換至特定版本
  • 0-3-5 卸離檔案庫
  • 0-4  書附範例專案
  • 0-5  協助與額外資訊

第一章為導論性質,協助瞭解Android系統與未來將會遇到的元件,最後加上一些Java語言的特性,對於不懂Java的讀者有些微的幫助,章節項目如下:

Chapter 1 Android 系統與應用程式介紹

  • 1-1  Android 版本演進
  • 1-2  Android 系統架構
  • 1-3  應用程式基礎
  • 1-4  應用程式元件
  • 1-4-1 Activity 活動
  • 1-4-2 Content Provider 內容提供器
  • 1-4-3 Broadcast Receiver 廣播接收器
  • 1-4-4 Service 服務
  • 1-5  應用程式宣告檔-AndroidManifestxml
  • 1-6  Android Studio 開發環境
  • 1-7  Java 基礎知識

第二章為建立開發環境做準備,介紹Android Studio軟體介面與相關軟體的目的,章節內容如下:

Chapter 2 環境建置與第一個專案

  • 2-1  基礎環境- JDK 與 Android SDK
  • 2-1-1 安裝 JDK
  • 2-2  整合開發工具- Android Studio
  • 2-2-1 Android SDK
  • 2-2-2 Android Studio
  • 2-2-3 補充安裝必要工具
  • 2-2-4 安裝注意事項
  • 2-3  無下載環境的快速安裝
  • 2-4  建立應用程式專案
  • 2-5  Android SDK 工具與模擬器
  • 2-5-1 SDK 管理器(SDK Manager)
  • 2-5-2 模擬器管理(AVD Manager)
  • 2-6  執行應用程式專案

第三章是Android開發過程最重要的項目,詳細說明專案的架構與每個元件的角色,並說明一個Activity活動的程式碼結構與功能,包括應用程式的資源與常使用到的Support、Compat類別庫。雖然本章內容較多,但應多花點時間實作與瞭解這些未來每天都會遇到的要件,章節內容如下:

Chapter 3 Android 專案架構與 Activity

  • 3-1  AndroidManifestxml 載運清單
  • 3-1-1 package 屬性
  • 3-1-2 application 元素的屬性
  • 3-1-3 activity 元素的屬性
  • 3-2  畫面配置-Layout
  • 3-2-1 XML 檔的原貌
  • 3-2-2 畫面配置檔中的元素
  • 3-3  Java 類別
  • 3-3-1 Activity 類別
  • 3-3-2 Activity 的子類別
  • 3-3-3 MainActivity 的 onCreate 方法
  • 3-4  資源
  • 3-4-1 R 類別
  • 3-4-2 圖檔-drawable
  • 3-4-3 畫面配置-layout
  • 3-4-4 選單-menu
  • 3-4-5 資料-values
  • 3-5  Android Support Library -支援函式庫
  • 3-5-1 Android Support v4 支援函式庫
  • 3-5-2 Android Support v7 支援函式庫
  • 3-5-3 appcompat v7 函式庫
  • 3-5-4 v7 cardview 函式庫
  • 3-5-5 v7 recyclerview 函式庫
  • 3-5-6 專案中導入函式庫

第四章為實作中最重要的一章,幾乎每個專案大都會用到這些知道與實作技巧,建議本章的內容都能從無到有直接實作出來,而且應該熟練技術與按鍵,因為它就是武功裏的內功。雖然本章實作內容很多,但仍是非常值得花心血去練習的,章節內容如下:

Chapter 4 Activity 設計

  • 4-1  版面配置 Layout
  • 4-1-1 版面配置設計畫面
  • 4-1-2 RelativeLayout
  • 4-1-3 LinearLayout
  • 4-1-4 元件的高度與寬度
  • 4-1-5 元件的間距-margin
  • 4-1-6 元件的對齊
  • 4-1-7 LinearLayout 中的權重 weight
  • 4-2  Bmi 專案功能設計
  • 4-2-1 Bmi 畫面設計-更換版面配置
  • 4-2-2 新增元件
  • 4-3  在 MainActivity 中取得畫面元件
  • 4-3-1 區域變數提昇為屬性
  • 4-3-2 抽取程式碼成為方法
  • 4-4  按鈕的事件處理
  • 4-4-1 使用 onClick 屬性
  • 4-5  使用浮動顯示-Toast 類別
  • 4-6  使用對話框-AlertDialog 類別
  • 4-6-1 AlertDialogBuilder 類別
  • 4-6-2 簡化寫法
  • 4-6-3 AlertDialogBuilder 的方法
  • 4-6-4 對話框按鈕
  • 4-7  多國語言
  • 4-7-1 建立版面字串資源
  • 4-7-2 建立語系資源檔-正體中文
  • 4-7-3 設定模擬器語系
  • 4-7-4 測試
  • 4-8  按鈕事件處理-匿名類別
  • 4-8-1 取得按鈕物件
  • 4-8-2 為按鈕物件註冊事件傾聽器
  • 4-8-3 在傾聽器的方法中實作程式碼

有能力實作出初階的APP後,接著要再補充更多有用的技能,第5章就是增強能加的要件之一,每一段內容的目的,都是為了要能得到比一般人更強的能力,章節內容如下:

Chapter 5 第二個 Activity

  • 5-1  產生第二個 Activity(方法、產生的檔案)
  • 5-1-1 更換合適的名稱
  • 5-1-2 一個 Activity 的組成要素
  • 5-2  使用 Intent 轉換 Activity
  • 5-3  使用 Intent 傳遞資料
  • 5-3-1 簡單資料
  • 5-3-2 顯示在畫面上
  • 5-3-3 複雜的資料-使用 Bundle 類別
  • 5-4  抽取字串成為資源
  • 5-4-1 手動加入字串資源
  • 5-4-2 程式中使用字串資源
  • 5-4-3 使用 Android Studio 抽離字串資源
  • 5-5   Activity 的生命週期
  • 5-5-1 一般情境
  • 5-5-2 暫停情境
  • 5-5-3 切換 Activity 情境
  • 5-5-4 覆寫 Callback 方法
  • 5-5-5 測試情境
  • 5-6  Atm 專案之登入功能
  • 5-6-1 主畫面- MainActivity
  • 5-6-2 新增登入畫面-LoginActivity
  • 5-6-3 元件的 onClick 屬性
  • 5-6-4 登入判斷
  • 5-7  轉換 Activity 取得結果
  • 5-7-1 定義功能常數
  • 5-7-2 呼叫 startActivityForResult
  • 5-7-3 在功能畫面結束之前設定返回值
  • 5-7-4 回到主功能的 onActivityResult 方法

第6章主要是要介紹由Android 5.0開始釋出的實感設計元件,屬於比較輕量學習的章節,內容如下:

Chapter 6 Material Design 實感設計

  • 6-1  具浮動按鈕的 Activity
  • 6-1-1 產生活動
  • 6-1-2 Layout 的配置
  • 6-1-3 類別程式碼說明
  • 6-1-4 執行結果
  • 6-2  SnackBar 提示訊息元件
  • 6-2-1 設定 Action

第7章除了介紹如何儲存輕量資料與選單設計外,還包括了adb開發工具,它很重要,輔以一個實務案例做為範例,章節內容如下:

Chapter 7 存取設定資料

  • 7-1  偏好設定 SharedPreferences
  • 7-1-1 寫入資料
  • 7-1-2 讀取設定檔內的資料
  • 7-1-3 手機內部儲存方式
  • 7-2  使用 ADB 登入模擬器
  • 7-2-1 ADB 執行檔
  • 7-2-2 設定系統環境變數
  • 7-2-3 使用 adb 登入模擬器
  • 7-3  實務練習-記住登入帳號
  • 7-3-1 儲存登入帳號
  • 7-3-2 填入已儲存帳號
  • 7-3-3 執行結果
  • 7-3-4 檢視 APP 執行後產生的設定檔
  • 7-4  選單 Menu
  • 7-4-1 設計選單功能
  • 7-4-2 選單的事件處理

第8章為元件的重頭戲,目的是瞭解並熟悉清單元件,除此外,各類Adapter的活用,才是本章的重點目的。本章的內容很多多,但它非常重要,章節內容如下:

Chapter 8 清單元件

  • 8-1  Adapter
  • 8-1-1 Adapter 家族
  • 8-1-2 Android SDK 的資源
  • 8-2  清單-ListView
  • 8-3  下拉選單-Spinner
  • 8-3-1 準備字串陣列資料
  • 8-3-2 加入 Spinner 元件
  • 8-3-3 使用 ArrayAdapter
  • 8-3-4 選擇項目的事件處理
  • 8-3-5 取得選擇的項目
  • 8-4  格狀清單-GridView
  • 8-4-1 GridView 設計主功能
  • 8-4-2 事件處理-實作傾聽者介面
  • 8-5  客製化功能表-GridView
  • 8-5-1 準備功能圖示檔案
  • 8-5-2 準備資料
  • 8-5-3 更改圖示檔名使其符合功能意義
  • 8-5-4 設計項目版面配置(layout)檔
  • 8-5-5 繼承 BaseAdapter 類別
  • 8-5-6 實作方法
  • 8-5-7 使用 IconAdapter
  • 8-5-8 功能項目事件處理

第9章介紹資料庫的設計、新增與查詢,包括SQLiteOpenHelper類別,以一個實務範例做為全章內容的主軸,若能在實作完成後再自行加入功能,會得到事半功半的效果,章節內容如下:

Chapter 9 SQLite 資料庫

  • 9-1  準備活動
  • 9-1-1 建立活動
  • 9-1-2 畫面配置
  • 9-1-3 實作必要程式碼
  • 9-2  SQLiteOpenHelper 類別
  • 9-2-1 建立應用程式的 SQLiteOpenHelper 類別
  • 9-2-2 SQLiteDatabase 類別
  • 9-2-3 建立資料表格的時機 -onCreate
  • 9-2-4 應用程式升級-onUpgrade
  • 9-2-5 使用 SQLiteOpenHelper
  • 9-3  新增資料
  • 9-3-1 insert 方法的 nullColumnHack
  • 9-3-2 執行程式
  • 9-4  驗證與除錯
  • 9-5  查詢資料
  • 9-5-1 Cursor
  • 9-5-2 rawQuery 方法
  • 9-5-3 query 方法
  • 9-6  實務範例
  • 9-6-1 使用 SimpleCursorAdapter
  • 9-6-2 客製化的欄位配置
  • 9-6-3 SQLiteOpenHelper 的 Singleton 設計

第10章結合了內容供應者與權限兩大內容,在Android 6.0之前,權限的加入非常簡單,只是在6.0之後就不是如此罷了。建議多花點時間實作本章,以面對未來在Android程式中會出現更多的新功能。本章內容在後續會與第9章的內容融合與練習,章節內容如下:

Chapter 10 內容供應者與權限機制

  • 10-1  存取內容供應者
  • 10-1-1 合約類別
  • 10-1-2 ContentResolver -內容查找器
  • 10-1-3 Content URI -內容 URI
  • 10-2  Permission 權限
  • 10-2-1 一般權限與危險權限
  • 10-2-2 執行中要求權限
  • 10-2-3 向使用者請求權限
  • 10-2-4 當使用者允許或拒絕權限
  • 10-3  查詢聯絡人
  • 10-3-1 權限
  • 10-3-2 查詢
  • 10-3-3 Cursor 介面
  • 10-3-4 顯示聯絡人清單
  • 10-3-5 顯示聯絡人的電話
  • 10-3-6  客製化 SimpleCursorAdapter
  • 10-4  更新聯絡人
  • 10-4-1 新增聯絡人
  • 10-4-2 更新聯絡人
  • 10-4-3 刪除聯絡人

後續章節介紹:
android高效入門>深入學習 書籍介紹 (下)

相關文章:

Category: Android 標籤:, ,

About Hank Tom

專長為程式語言、雲端服務開發,Linux系統管理, 任職:利拓科技 技術長,海林行動科技 技術總監 輔仁大學 兼任助理教授 , 為 Android高效入門>深度學習、CentOS 7建置、管理與伺服器架設實戰、Java網路程式設計、雲端網頁程式設計-Google App Engine應用實作 等書作者

23 thoughts on “android高效入門>深入學習 書籍介紹 (上)

  1. ryan

    您好,
    我在android高效入門>深入學習這本書,實作到0-9頁時,出現Build Tools的問題?
    我跟著書上所說按下Install Build Tools 24.0.0.rc2 and sync project,可是並未解決問題?
    出現錯誤訊息如下:
    All packages are not available for download!
    The following packages are not available:
    – Package id build-tools;24.0.0-preview
    請問這個問題如何解決呢?
    謝謝!

    Reply
    1. Hank Tom Post author

      這個問題是Build Tool工具在24.0.0-rc2與rc3的bug,請試著:
      展開專案中的Gradle Scripts,開啟build.gradle(Module:app)檔案,再將buildToolVersion的值改為:
      buildToolsVersion “24.0.0”
      再試著Sync Project。

      Reply
  2. peter

    您好
    我依照書中步驟建立模擬器後,一啟動模擬器,就會發生錯誤
    Hax is enabled
    Hax ram_size 0x60000000
    HAX is working and emulator runs in fast virt mode.
    audio: Failed to create voice `goldfish_audio_in’
    qemu-system-x86_64.exe: warning: opening audio input failed
    adb_server_notify: Failed to establish connection to ADB server
    console on port 5554, ADB on port 5555
    emulator: ERROR: SDKCtl multi-touch: Invalid packet signature 50545448 for packet type 808465440, size 825110831
    pure virtual method called
    terminate called without an active exception
    This application has requested the Runtime to terminate it in an unusual way.
    Please contact the application’s support team for more information.
    請問這要如何解決?
    謝謝!!

    Reply
    1. Hank Tom Post author

      看錯誤訊息是因為無法連線回本機adb的5554/5555 port,可以檢查看看機器的防火牆設定(Windows/Linux/Mac),可試著先關閉防火牆。

      Reply
      1. peter

        感謝您的回覆
        我機器的防火牆是關閉的狀態。

        Reply
        1. Hank Tom Post author

          有幾個方法可以試看看:
          A) 檢查有無Avast這類防護軟體
          B) 重啟Android Studio與模擬器
          C) 在Android Studio中取消、再勾選 Tools/Android/Enable ADB Integration
          D) 手動執行Android SDK/platform-tools/adb.exe kill-server與 adb.exe start-server

          Reply
          1. peter

            A -> 已將防毒軟體卸載
            B、C、D 方法皆試過,還是無法啟動模擬器

            模擬器設定如下

            Name: Nexus_5_API_23

            CPU/ABI: Google APIs Intel Atom (x86)

            Path: C:\Users\0913634\.android\avd\Nexus_5_API_23.avd

            Target: google_apis [Google APIs] (API level 23)

            Skin: nexus_5

            SD Card: 100M

            hw.dPad: no

            runtime.network.speed: full

            hw.accelerometer: yes

            hw.device.name: Nexus 5

            vm.heapSize: 256

            hw.device.manufacturer: Google

            hw.gps: yes

            image.androidVersion.api: 23

            hw.audioInput: yes

            image.sysdir.1: system-images\android-23\google_apis\x86\

            tag.id: google_apis

            hw.camera.back: none

            hw.mainKeys: no

            AvdId: Nexus_5_API_23

            hw.camera.front: none

            hw.lcd.density: 480

            runtime.scalefactor: auto

            avd.ini.displayname: Nexus 5 API 23

            hw.gpu.mode: auto

            hw.device.hash2: MD5:2fa0e16c8cceb7d385183284107c0c88

            hw.ramSize: 1536

            hw.trackBall: no

            hw.battery: yes

            hw.sdCard: yes

            tag.display: Google APIs

            runtime.network.latency: none

            hw.keyboard: yes

            hw.sensors.proximity: yes

            disk.dataPartition.size: 800M

            hw.sensors.orientation: yes

            avd.ini.encoding: UTF-8

            hw.gpu.enabled: yes

          2. Hank Tom Post author

            能試看看再新增一個64位元的模擬器嗎? (Google APIs Intel Atom (x86_64))
            看會不會出現同樣的錯誤訊息

  3. peter

    新增了Google APIs Intel Atom (x86_64)模擬器,還是會出現一樣的錯誤訊息 -_-

    Reply
    1. peter

      改用了第三方模擬器Genymotion,卻可以正常運作,這是不是Android Studio的 BUG ?

      Reply
      1. Hank Tom Post author

        其實,Reproduce重製錯誤後比較能夠追蹤錯誤,如果你可以提供目前機器的資訊,或是如何重現這個錯誤的步驟與方法,會比較有機會找到原因,如作業系統版本、JDK版本與32/64bit,以及是否有安裝Intel HAM驅動程式,安裝的執行檔或是用書中壓縮檔等。
        也可能找到最後,結果卻是… bug也說不定,開發過程有時是辛苦的,祝你能夠繼續順利學習。

        Reply
        1. peter

          我是使用WIN10 專業版64bit , jdk-8u91-windows-x64
          CPU : i5-4690 3.50GHz
          RAM : 8G
          沒有安裝Intel HAM驅動程式
          Android Studio 是網路下載的最新2.1.2版本
          至於AVD產生方法則是按照書中步驟產生

          Reply
  4. peter

    裝好 Intel HAXM 但還是無法啟動模擬器

    Reply
    1. Hank Tom Post author

      這個錯誤訊息是第一次看到,我也很好奇,因為訊息中有呼叫到多點觸控,而一般來說,建立模擬器不會自動啟動mult-touch,如下最後一行:
      HAX is working and emulator runs in fast virt mode.
      audio: Failed to create voice `goldfish_audio_in’
      qemu-system-x86_64.exe: warning: opening audio input failed
      adb_server_notify: Failed to establish connection to ADB server
      console on port 5554, ADB on port 5555
      emulator: ERROR: SDKCtl multi-touch: Invalid packet signature 50545448 for packet type 808465440, size 825110831
      我看了一下模擬器的原始碼 (https://android.googlesource.com/platform/external/qemu/+/emu-master-dev/android/sdk-controller-socket.c)
      出錯的地方如下圖:
      http://litotom.com/wp-content/uploads/2016/07/emulator_Invalid-packet-signature.png
      它是去與模擬器通訊,試著取得多點觸控的連線,因封包不對而錯誤,提供參考。

      Reply
      1. peter

        所以這算是BUG 嗎?
        因為我本機上的防火牆和防毒軟體都全部關閉了。

        Reply
        1. Junior M

          您好,想請問一下你啟動模擬器的方式,是從AVD Manager 啟動模擬器,還是執行某支特定APP時啟動模擬器?

          Reply
          1. peter

            是從AVD Manager 啟動模擬器

  5. peter

    您好,我在研讀完第14章後,想要應用在開發QR CODE reader上,我在 buildl.gradle 檔案中加入第三方函式庫
    repositories {
    jcenter()
    }

    dependencies {
    compile fileTree(include: [‘*.jar’], dir: ‘libs’)
    compile ‘com.android.support:appcompat-v7:24.1.0’
    compile files(‘libs/junit-4.12.jar’)
    compile ‘com.journeyapps:zxing-android-embedded:3.0.1@aar’
    compile ‘com.google.zxing:core:3.2.0’
    }
    同步時,卻會顯示
    Failed to resolve: com.google.zxing:core:3.2.0
    Failed to resolve: com.journeyapps:zxing-android-embedded:3.0.1
    請問這是什麼原因?

    Reply
    1. Hank Tom Post author

      有關ZXing lib的問題,可能要請您去找一下相關的資料哦,幾年前弄過,還留在腦袋中的不多了。

      Reply
  6. jagger

    Hank老師您好~
    我參照您的Anfroid高效入門使用Anfroid Studio 2開發Anfroid 6.0APP
    其中針對Firebase的E-mail登入認證
    我也有將SHA1碼匯出到GOOGLE拿到JSON再放到目錄結構APP內
    我出現了以下的錯誤訊息:
    Error:Execution failed for task ‘:app:transformResourcesWithMergeJavaResForDebug’.
    > com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/LICENSE
    File1: C:\Users\David\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-databind\2.2.2\3c8f6018eaa72d43b261181e801e6f8676c16ef6\jackson-databind-2.2.2.jar
    File2: C:\Users\David\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-core\2.2.2\d20be6a5ddd6f8cfd36ebf6dea329873a1c41f1b\jackson-core-2.2.2.jar
    File3: C:\Users\David\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-annotations\2.2.2\285cb9c666f0f0f3dd8a1be04e1f457eb7b15113\jackson-annotations-2.2.2.jar
    請教老師 我剛從哪個地方下手

    Reply
    1. Hank Tom Post author

      由log看來,你另外也導入了Jackson類別庫,錯誤是因為Jackson有重覆的版權宣告檔案,請參考14-3-4中的方法,在build.gradle中的packagingOptions加入exclude語法。

      Reply

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *