Ⅰ android群英傳的目錄
第1章 Android體系與系統架構 1
1.1 Google生態系統 2
1.2 Android系統架構 2
1.2.1 linux 3
1.2.2 Dalvik與ART 3
1.2.3 Framework 3
1.2.4 Standard libraries 4
1.2.5 Application 4
1.3 Android App組件架構 4
1.3.1 Android四大組件如何協同工作 5
1.3.2 應用運行上下文對象 5
1.4 Android系統源代碼目錄與系統目錄 6
1.4.1 Android系統源代碼目錄 6
1.4.2 Android系統目錄 8
1.4.3 Android App文件目錄 11
第2章 Android開發工具新接觸 13
2.1 Android開發IDE介紹 14
2.1.1 Android Studio初體驗 14
2.1.2 Android Studio配置 15
2.2 Android Studio高級使用技巧 19
2.2.1 更新SDK 20
2.2.2 Android Studio常用界面 21
2.2.3 導入Android Studio工程 23
2.3 ADB命令使用技巧 24
2.3.1 ADB基礎 24
2.3.2 ADB常用命令 25
2.3.3 ADB命令來源 29
2.4 模擬器使用與配置 29
第3章 Android控制項架構與自定義控制項詳解 32
3.1 Android控制項架構 33
3.2 View的測量 34
3.3 View的繪制 37
3.4 ViewGroup的測量 38
3.5 ViewGroup的繪制 39
3.6 自定義View 39
3.6.1 對現有控制項進行拓展 40
3.6.2 創建復合控制項 43
3.6.3 重寫View來實現全新的控制項 51
3.7 自定義ViewGroup 54
3.8 事件攔截機制分析 59
第4章 ListView使用技巧 65
4.1 ListView常用優化技巧 66
4.1.1 使用ViewHolder模式提高效率 66
4.1.2 設置項目間分隔線 68
4.1.3 隱藏ListView的滾動條 68
4.1.4 取消ListView的Item點擊效果 68
4.1.5 設置ListView需要顯示在第幾項 69
4.1.6 動態修改ListView 69
4.1.7 遍歷ListView中的所有Item 71
4.1.8 處理空ListView 71
4.1.9 ListView滑動監聽 72
4.2 ListView常用拓展 74
4.2.1 具有彈性的ListView 75
4.2.2 自動顯示、隱藏布局的ListView 76
4.2.3 聊天ListView 79
4.2.4 動態改變ListView布局 85
第5章 Android Scroll分析 87
5.1 滑動效果是如何產生的 88
5.1.1 Android坐標系 88
5.1.2 視圖坐標系 88
5.1.3 觸控事件——MotionEvent 89
5.2 實現滑動的七種方法 91
5.2.1 layout方法 92
5.2.2 offsetLeftAndRight()與offsetTopAndBottom() 93
5.2.3 LayoutParams 93
5.2.4 scrollTo與scrollBy 94
5.2.5 Scroller 96
5.2.6 屬性動畫 98
5.2.7 ViewDragHelper 98
第6章 Android繪圖機制與處理技巧 106
6.1 屏幕的尺寸信息 107
6.1.1 屏幕參數 107
6.1.2 系統屏幕密度 107
6.1.3 獨立像素密度dp 107
6.1.4 單位轉換 108
6.2 2D繪圖基礎 110
6.3 Android XML繪圖 113
6.3.1 Bitmap 113
6.3.2 Shape 113
6.3.3 Layer 115
6.3.4 Selector 116
6.4 Android繪圖技巧 117
6.4.1 Canvas 117
6.4.2 Layer圖層 121
6.5 Android圖像處理之色彩特效處理 122
6.5.1 色彩矩陣分析 122
6.5.2 Android顏色矩陣——ColorMatrix 128
6.5.3 常用圖像顏色矩陣處理效果 131
6.5.4 像素點分析 134
6.5.5 常用圖像像素點處理效果 135
6.6 Android圖像處理之圖形特效處理 137
6.6.1 Android變形矩陣——Matrix 137
6.6.2 像素塊分析 142
6.7 Android圖像處理之畫筆特效處理 145
6.7.1 PorterDuffXfermode 145
6.7.2 Shader 149
6.7.3 PathEffect 153
6.8 View之孿生兄弟——SurfaceView 155
6.8.1 SurfaceView與View的區別 155
6.8.2 SurfaceView的使用 156
6.8.3 SurfaceView實例 159
第7章 Android動畫機制與使用技巧 162
7.1 Android View動畫框架 163
7.1.1 透明度動畫 163
7.1.2 旋轉動畫 163
7.1.3 位移動畫 164
7.1.4 縮放動畫 164
7.1.5 動畫集合 164
7.2 Android屬性動畫分析 165
7.2.1 ObjectAnimator 166
7.2.2 PropertyValuesHolder 168
7.2.3 ValueAnimator 168
7.2.4 動畫事件的監聽 168
7.2.5 AnimatorSet 169
7.2.6 在XML中使用屬性動畫 170
7.2.7 View的animate方法 170
7.3 Android布局動畫 171
7.4 Interpolators(插值器) 171
7.5 自定義動畫 172
7.6 Android 5.X SVG矢量動畫機制 175
7.6.1 標簽 175
7.6.2 SVG常用指令 176
7.6.3 SVG編輯器 177
7.6.4 Android中使用SVG 177
7.6.5 SVG動畫實例 181
7.7 Android動畫特效 188
7.7.1 靈動菜單 188
7.7.2 計時器動畫 190
7.7.3 下拉展開動畫 191
第8章 Activity與Activity調用棧分析 195
8.1 Activity 196
8.1.1 起源 196
8.1.2 Activity形態 196
8.1.3 生命周期 196
8.2 Android任務棧簡介 200
8.3 AndroidMainifest啟動模式 200
8.3.1 standard 201
8.3.2 singleTop 201
8.3.3 singleTask 201
8.3.4 singleInstance 202
8.4 Intent Flag啟動模式 203
8.5 清空任務棧 203
8.6 Activity任務棧使用 204
第9章 Android系統信息與安全機制 205
9.1 Android系統信息獲取 206
9.1.1 android.os.Build 206
9.1.2 SystemProperty 207
9.1.3 Android系統信息實例 208
9.2 Android Apk應用信息獲取之PackageManager 209
9.2.1 PackageManager 210
9.3 Android Apk應用信息獲取之ActivityManager 215
9.4 解析Packages.xml獲取系統信息 218
9.5 Android安全機制 220
9.5.1 Android安全機制簡介 220
9.5.2 Android系統安全隱患 222
9.5.3 Android Apk反編譯 223
9.5.4 Android Apk加密 226
第10章 Android性能優化 227
10.1 布局優化 228
10.1.1 Android UI渲染機制 228
10.1.2 避免Overdraw 229
10.1.3 優化布局層級 229
10.1.4 避免嵌套過多無用布局 229
10.1.5 Hierarchy Viewer 234
10.2 內存優化 236
10.2.1 什麼是內存 236
10.2.2 獲取Android系統內存信息 237
10.2.3 內存回收 238
10.2.4 內存優化實例 238
10.3 Lint工具 240
10.4 使用Android Studio的Memory Monitor工具 240
10.5 使用TraceView工具優化App性能 241
10.5.1 生成TraceView日誌的兩種方法 241
10.5.2 打開TraceView日誌 242
10.5.3 分析TraceView日誌 242
10.6 使用MAT工具分析App內存狀態 244
10.6.1 生成HPROF文件 244
10.6.2 分析HPROF文件 245
10.7 使用Dumpsys命令分析系統狀態 247
第11章 搭建雲端伺服器 248
11.1 移動後端服務介紹 249
11.2 使用Bmob創建移動後端服務 250
11.2.1 數據服務 251
11.2.2 推送服務 254
第12章 Android 5.X新特性詳解 257
12.1 Android 5.X UI設計初步 258
12.1.1 材料的形態模擬 258
12.1.2 更加真實的動畫 258
12.1.3 大色塊的使用 259
12.2 Material Design主題 260
12.3 Palette 261
12.4 視圖與陰影 263
12.5 Tinting和Clipping 265
12.5.1 Tinting(著色) 265
12.5.2 Clipping(裁剪) 267
12.6 列表與卡片 269
12.6.1 RecyclerView 269
12.6.2 CardView 275
12.7 Activity過渡動畫 276
12.8 Material Design 動畫效果 283
12.8.1 Ripple效果 283
12.8.2 Circular Reveal 285
12.8.3 View state changes Animation 288
12.9 Toolbar 293
12.10 Notification 296
12.10.1 基本的Notification 297
12.10.2 折疊式Notification 298
12.10.3 懸掛式Notification 300
12.10.4 顯示等級的Notification 301
第13章 Android實例提高 303
13.1 移動迷宮——拼圖游戲 304
13.1.1 准備工作 305
13.1.2 初始界面 307
13.1.3 拼圖界面 312
13.1.4 效果預覽與功能進階 324
13.2 魔幻矩陣——2048 325
13.2.1 2048概述 325
13.2.2 2048游戲分析 326
13.2.3 2048初始化工作 327
13.2.4 小方塊設計 328
13.2.5 全局設置 330
13.2.6 游戲面板設計 332
13.2.7 主程序設計 340
13.2.8 功能進階 341
13.3 實戰經驗總結 342
Ⅱ 有哪些是基於Android studio介紹的Android的基礎開發書籍
一.認識android的架構
Android其本質就是在標準的Linux系統上增加了Java虛擬機Dalvik,並在Dalvik虛擬機上搭建了一個JAVA的application framework,所有的應用程序都是基於JAVA的application framework之上。
android分為四個層,從高層到低層分別是應用程序層、應用程序框架層、系統運行庫層和linux核心層。
二.搭建環境
搭建開發環境
對國內的開發者來說最痛苦的是無法去訪問android開發網站。為了更好的認識世界,對程序員來說,會翻牆也是的一門技術,帶你去領略牆外的世界,好了,不廢話了, 國內開發者訪問(androiddevtools) 上面已經有了所有你要的資源,同時可以下載到我們的主角framework
但是這樣的搭建只能去閱讀源代碼,我們無法去更進一步去實現自己的rom,我們看到錘子的系統在早期的開放rom是自己從新實現了framework的代碼,現在看起來他成功了,所以我們還要去搭建android系統的源碼編譯環境。
搭建源碼編譯環境
三.開始主題
在一開始寫c程序的時候都有一個運行的入口,比如
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
//這里的main就是應用的入口
int main(int argc, const char * argv[]){
return 0;
}
在計算機網路原理中我們用socket實現一個伺服器端,不斷的接聽客戶端的訪問,而且他的代碼是這樣實現的:
#include <winsock2.h>
#pragma comment(lib, "WS2_32.lib")
#include <stdio.h>
void main()
{
WORD wVersionRequested;//版本號
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2, 2);//2.2版本的套接字
//載入套接字型檔,如果失敗返回
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
{
return;
}
//判斷高低位元組是不是2,如果不是2.2的版本則退出
if (LOBYTE(wsaData.wVersion) != 2 ||
HIBYTE(wsaData.wVersion) != 2)
{
return;
}
//創建流式套接字,基於TCP(SOCK_STREAM)
SOCKET socSrv = socket(AF_INET, SOCK_STREAM, 0);
//Socket地址結構體的創建
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//轉換Unsigned long型為網路位元組序格
addrSrv.sin_family = AF_INET;//指定地址簇
addrSrv.sin_port = htons(6000);
//指定埠號,除sin_family參數外,其它參數都是網路位元組序,因此需要轉換
//將套接字綁定到一個埠號和本地地址上
bind(socSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));//必須用sizeof,strlen不行
listen(socSrv, 5);
SOCKADDR_IN addrClient;//字義用來接收客戶端Socket的結構體
int len = sizeof(SOCKADDR);//初始化參數,這個參數必須進行初始化,sizeof
//循環等待接受客戶端發送請求
while (1)
{
//等待客戶請求到來;當請求到來後,接受連接請求,
//返回一個新的對應於此次連接的套接字(accept)。
//此時程序在此發生阻塞
SOCKET sockConn = accept(socSrv, (SOCKADDR*)&addrClient, &len);
char sendBuf[100];
sprintf(sendBuf, "Welcome %s to JoyChou",
inet_ntoa(addrClient.sin_addr));//格式化輸出
//用返回的套接字和客戶端進行通信
send(sockConn, sendBuf, strlen(sendBuf)+1, 0);//多發送一個位元組
//接收數據
char recvBuf[100];
recv(sockConn, recvBuf, 100, 0);
printf("%s\\n", recvBuf);
closesocket(sockConn);
}
}
他採用了一個while死循環去監聽客戶端的請求。
先上源代碼
public final class ActivityThread {
public static void main(String[] args) {
SamplingProfilerIntegration.start();
CloseGuard.setEnabled(false);
Environment.initForCurrentUser();
EventLogger.setReporter(new EventLoggingReporter());
Security.addProvider(new AndroidKeyStoreProvider());
final File configDir = Environment.getUserConfigDirectory(UserHandle.myUserId());
TrustedCertificateStore.setDefaultUserDirectory(configDir);
Process.setArgV0("<pre-initialized>");
Looper.prepareMainLooper();
//從中可以看到為app開辟了一個線程進入了looper之中
ActivityThread thread = new ActivityThread();
thread.attach(false);
if (sMainThreadHandler == null) {
sMainThreadHandler = thread.getHandler();
}
AsyncTask.init();
if (false) {
Looper.myLooper().setMessageLogging(new
LogPrinter(Log.DEBUG, "ActivityThread"));
}
Looper.loop();
throw new RuntimeException("Main thread loop unexpectedly exited");
}
}
看到源碼失望了,沒有一個while循環啊,其實用了他方法實現
//用一個looper的機制循環監聽響應
Looper.prepareMainLooper();
Looper.loop();
進一步深入代碼
public static void loop() {
final Looper me = myLooper();
if (me == null) {
throw new RuntimeException("No Looper; Looper.prepare() wasn't called on this thread.");
}
final MessageQueue queue = me.mQueue;
Binder.clearCallingIdentity();
final long ident = Binder.clearCallingIdentity();
// 在這里看到了一個循環監聽消息
for (;;) {
Message msg = queue.next(); // might block
if (msg == null) {
// No message indicates that the message queue is quitting.
return;
}
Printer logging = me.mLogging;
if (logging != null) {
logging.println(">>>>> Dispatching to " + msg.target + " " +
msg.callback + ": " + msg.what);
}
msg.target.dispatchMessage(msg);
if (logging != null) {
logging.println("<<<<< Finished to " + msg.target + " " + msg.callback);
}
// Make sure that ring the course of dispatching the
// identity of the thread wasn't corrupted.
final long newIdent = Binder.clearCallingIdentity();
if (ident != newIdent) {
Log.wtf(TAG, "Thread identity changed from 0x"
+ Long.toHexString(ident) + " to 0x"
+ Long.toHexString(newIdent) + " while dispatching to "
+ msg.target.getClass().getName() + " "
+ msg.callback + " what=" + msg.what);
}
msg.recycleUnchecked();
}
}
Ⅲ android studio 做ui界面都是用手工敲代碼嗎
基本都是手工敲代碼,這是沒辦法的辦法,androidstudio的拖拽控制項做的太爛,會把整個代碼層搞亂,以後如果要修改根本捋不明白,而且許多控制項屬性還是在代碼通過提示好找。不知道你使的是哪個版,顏色是在textcolor左側能選,但顏色主要是美工提供。
Ⅳ android軟體開發工程師的進階之路應該如何走
小明首先需要購買一本Android入門的書籍,為了更快地學習Android,小明業余時間也都用來一邊看書一邊照著書中的例子敲代碼,結果2周時間小明就把這本書學了一遍。看完這本書後,小明對Android的歷史、結構、代碼規范等都有了一個大概的了解,並且,小明已經可以寫出一些簡單的Activity了。這個時候在小明眼裡,Android開發很簡單很好玩,通過在xml中擺放一些按鈕文本框什麼的就可以做一些界面了。
小明開始跟著他的技術導師做需求,一些簡單的小需求小明自然是不在話下了。突然有一天來了一個需求,該需求要求小明在Activity中為一個button加一個動畫效果,小明慌了:「完全沒接觸過,書上也沒有講,怎麼辦呢?」小明冷靜了下,打開了網路搜索,輸入「Android 動畫」,打開前幾個鏈接,小明恍然大悟,照著網上的例子把需求給實現了。後來導師告訴他:「學好Android,官方文檔是必須看的,既全面又權威」。然後小明如獲至寶,花了一年時間把上面的guide和training都看了一遍,並且他還動手抄了幾個小例子。
有一天,小明又需要做一個動畫相關的需求,這可難不倒小明,它熟練地打開了www..com,輸入「Android 動畫」,突然他楞了一下:」總不能每次寫動畫都要網路一下吧!「,於是他在CSDN開了一個博客,把動畫相關的知識點都寫上去,為的是後面再寫動畫相關的代碼就不用網路去搜了,事實如何呢?後面再寫動畫相關的代碼,小明的確不用再去網路搜了,因為通過寫一篇動畫博客,他把動畫相關的細節都已經記住了,這樣他就可以不用再去參考任何文檔了,後來小明還學會了把一些瑣碎的不方便放在博客上的東西寫到了印象筆記上面,什麼時候忘了10秒鍾以內都可以快速找回來,而不是花10分鍾去再次搜索一遍。
這里總結一下,Android入門的時候,需要有一本入門書,好好學習書中的內容,同時花一年時間把Android官方文檔中的training和guide看一遍,同時通過寫博客和記筆記的方式來做總結,建議讓自己的每篇博客都有價值些。通過一年時間的學習,相信每個人都可以達到中級工程師的水平。
技術要求:
- 基本知識點
比如四大組件如何使用、如何創建Service、如何進行布局、簡單的自定義View、動畫等常見技術
- 書籍推薦
《第一行代碼 Android》、《瘋狂Android》
中級工程師
小明經過一年的努力學習終於成為Android中級工程師了,月薪變成了17k。到了中級工程師,已經可以在公司里干很多體力活了,但是一些很重要的任務小明還不能一個人承擔起來,這個時候小明需要學習的內容就很多了,如下所示:
- AIDL:熟悉AIDL,理解其工作原理,懂transact和onTransact的區別;
- Binder:從Java層大概理解Binder的工作原理,懂Parcel對象的使用;
- 多進程:熟練掌握多進程的運行機制,懂Messenger、Socket等;
- 事件分發:彈性滑動、滑動沖突等;
- 玩轉View:View的繪制原理、各種自定義View;
- 動畫系列:熟悉View動畫和屬性動畫的不同點,懂屬性動畫的工作原理;
- 懂性能優化、熟悉mat等工具
- 懂點常見的設計模式
學習方法
閱讀進階書籍,閱讀Android源碼,閱讀官方文檔並嘗試自己寫相關的技術文章,需要有一定技術深度和自我思考。在這個階段的學習過程中,有2個點是比較困擾大家的,一個是閱讀源碼,另一個是自定義View以及滑動沖突。
如何閱讀源碼呢?這是個頭疼的問題,但是源碼必須要讀。閱讀源碼的時候不要深入代碼細節不可自拔,要關注代碼的流程並盡量挖掘出對應用層開發有用的結論。另外仔細閱讀源碼中對一個類或者方法的注釋,在看不懂源碼時,源碼中的注釋可以幫你更好地了解源碼中的工作原理,這個過程雖然艱苦,但是別無他法。
如何玩轉自定義View呢?我的建議是不要通過學習自定義view而學習自定義view。為什麼這么說呢?因為自定義view的種類太多了,各式各樣的絢麗的自定義效果,如何學的玩呢!我們要透過現象看本質,更多地去關注自定義view所需的知識點,這里做如下總結:
- 搞懂view的滑動原理
- 搞懂如何實現彈性滑動
- 搞懂view的滑動沖突
- 搞懂view的measure、layout和draw
- 然後再學習幾個已有的自定義view的例子
- 最後就可以搞定自定義view了,所謂萬變不離其宗
大概再需要1-2年時間,即可達到高級工程師的技術水平。我個人認為通過《Android開發藝術探索》和《Android群英傳》可以縮短這個過程為0.5-1年。注意,達到高級工程師的技術水平不代表就可以立刻成為高級工程師(受機遇、是否跳槽的影響),但是技術達到了,成為高級工程師只是很簡單的事。
技術要求:
- 稍微深入的知識點
AIDL、Messenger、Binder、多進程、動畫、滑動沖突、自定義View、消息隊列等
- 書籍推薦
《Android開發藝術探索》、《Android群英傳》
高級工程師
小明成為了夢寐以求的高級工程師,月薪達到了20k,還拿到了一丟丟股票。這個時候小明的Android水平已經不錯了,但是小明的目標是資深工程師,小明聽說資深工程師月薪可以達到30k+。
為了成為Android資深工程師,需要學習的東西就更多了,並且有些並不是那麼具體了,如下所示:
- 繼續加深理解」稍微深入的知識點「中所定義的內容
- 了解系統核心機制:
1. 了解SystemServer的啟動過程
2. 了解主線程的消息循環模型
3. 了解AMS和PMS的工作原理
4. 能夠回答問題」一個應用存在多少個Window?「
5. 了解四大組件的大概工作流程
6. …
- 基本知識點的細節
1. Activity的啟動模式以及異常情況下不同Activity的表現
2. Service的onBind和onReBind的關聯
3. onServiceDisconnected(ComponentName className)和binderDied()的區別
4. AsyncTask在不同版本上的表現細節
5. 線程池的細節和參數配置
6. …
- 熟悉設計模式,有架構意識
學習方法
這個時候已經沒有太具體的學習方法了,無非就是看書、看源碼和做項目,平時多種總結,盡量將知識融會貫通從而形成一種體系化的感覺。同時這個階段對架構是有一定要求的,架構是抽象的,但是設計模式是具體的,所以一定要加強下設計模式的學習。關於設計模式的學習,最近一本新書推薦給大家《Android 源碼設計模式解析與實戰》,既可以學習設計模式,又可能體會到Android源碼中的設計思想,我最近也在閱讀此書。
技術要求:
- 稍微深入的知識點
- 系統核心機制
- 基本知識點的細節
- 設計模式和架構
- 書籍推薦
《Android開發藝術探索》、《Android 源碼設計模式解析與實戰》、《Android內核剖析》
資深工程師
這個階段的程序員也許並沒有太具體的學習路線了。
Ⅳ android群英傳和神兵利器的區別
應該是補充的,看原作者的描述:
《Android群英傳:神兵利器》——看上去好像是第一本書的續集,但實際上,這本書的內容,在我寫《Android群英傳》的時候就已經寫了不少了,礙於出版社的篇幅限制與主題的統一,很多內容並沒有放到《Android群英傳》中。
由於第一本書上市後,受到各位開發者的抬愛,銷售情況還算理想,所以出版社一直希望我能出一本續集,因此,我便萌生了想要把這本書補全的想法。
一開始,我一直在思考,開發者到底需要怎樣的書,作為一個一線的開發者,我的經歷還是比較豐富的,頭銜比較長——自學者、業余開發者、私活開發者、佈道師、職業開發者。從一開始的自學,到利用業余時間開發,甚至接一些小的項目,到成為在線教育講師、最終成為專職開發者,我經歷了大部分Android開發者都未必經歷的全的過程。這也成為我的一筆寶貴財富,讓我可以體會各個不同階段的開發者的痛點和瓶頸。
Ⅵ android群英傳 百度雲
http://download.csdn.net/download/yuzhong2012/9095209
Ⅶ 有專門講xamarin android的書嗎
第一行代碼——Android
Android群英傳
Android開發藝術探索
App研發錄
Android 源碼設計模式解析與實戰
Ⅷ 安卓群英傳和安卓開發藝術探索先讀哪個
藝術探索比群英傳難一些,不過講的更細致些。從簡單開始就先看群英傳吧!或者你查一下這兩本書的目錄,看看哪本更適合自己。