Java电子书:第一行代码 Android 第2版 格式 pdf 电子书 PDF 电子书 Java吧 java8.com! V/ S0 y; z5 Z% ?- y
7 _4 l0 a* A4 ~1 }% e0 d- l
. y: ]/ h' Y# u5 q编号:mudaima-P0220【Java吧 java8.com】/ ?% l, k* p! n
- a% {$ v5 a+ P/ _% i! g1 V" s5 ]! D4 x' F, }
/ W# N# d) ^! p E" y% t" @* g' zJava电子书目录:第1章 开始启程——你的行Android代码 1
8 m" t3 x1 i7 k: g9 }, R# `3 L1.1 了解全貌——Android王国简介 2
0 F! u: r7 K& ?5 o2 n1.1.1 Android系统架构 2- d$ _- O; Q A0 ?
1.1.2 Android已发布的版本 38 o* N8 Q( ^. I) I$ N# s
1.1.3 Android应用开发特色 4
: q: j+ {' R& J+ @( ^1.2 手把手带你搭建开发环境 5
" p7 P: j2 o! D0 y1.2.1 准备所需要的工具 5 ?( A1 e( W8 w' W/ ]
1.2.2 搭建开发环境 5% @0 }' D* c* z% x: d
1.3 创建你的个Android项目 94 e& Z2 y1 l! C9 Y. X- w& H
1.3.1 创建HelloWorld项目 9
& |8 B0 s. `; |4 V# f1.3.2 启动模拟器 12" ?9 i A8 u# N; L* X; D7 `
1.3.3 运行HelloWorld 15
! a' x, A n4 h0 e& g1.3.4 分析你的个Android程序 165 z- g2 \0 N0 @# x# U0 G a
1.3.5 详解项目中的资源 22& S! {9 b! q: d7 A6 \8 f, R
1.3.6 详解build.gradle文件 23
! U+ c$ h. g( A, Q' ]- `: {& h. V* W* q1.4 前行——掌握日志工具的使用 26; C( @+ D! b T* D; _
1.4.1 使用Android的日志工具Log 26
# q, t d3 o: S b0 c- Q1.4.2 为什么使用Log而不使用System.out 27! E- }0 h6 K, r( b, h4 J
1.5 小结与点评 29
: s$ M" O+ p2 H% d第2章 先从看得到的入手——探究活动 307 P% ?7 `, l, X) ~+ M: }5 p2 ~
2.1 活动是什么 30' E" e- [9 @6 c. {
2.2 活动的基本用法 301 [7 v' f+ y6 C- O% g$ _8 E" x5 X
2.2.1 手动创建活动 31) Q8 ?/ R0 W7 D) s: L# V c0 H
2.2.2 创建和加载布局 32
a# k5 m1 ~ p, J3 N% ^2.2.3 在AndroidManifest文件中注册 35
7 [& f9 A$ Q& n0 c4 X& H, C4 Q2.2.4 在活动中使用Toast 370 A3 b6 e3 v2 B! O
2.2.5 在活动中使用Menu 388 b/ a3 g$ R$ H( `) w6 H' B' D! h' N
2.2.6 销毁一个活动 401 f+ N8 y2 H- i \, i
2.3 使用Intent在活动之间穿梭 41
* ~9 Q5 ^' T' E0 E y& o m! S) }2.3.1 使用显式Intent 41
9 {* s7 l6 Z8 I- e2.3.2 使用隐式Intent 44
2 T& H1 o: B' e" u, B" d9 v# a2.3.3 更多隐式Intent的用法 46. Z1 N7 m0 Q7 v8 M5 N# L* A- q
2.3.4 向下一个活动传递数据 50
) c: C# t- z9 g$ Z2.3.5 返回数据给上一个活动 517 ?# J) A0 t) r( e2 O$ k, [5 o
2.4 活动的生命周期 53
" f4 q2 o$ x. j+ R' G0 [( d& v2.4.1 返回栈 53
# [1 f$ p8 o/ v2.4.2 活动状态 54/ J% f, w% B' m' `! M9 F1 G
2.4.3 活动的生存期 55* S8 S) B; b8 k V
2.4.4 体验活动的生命周期 56, O. t& j9 }( g/ u, g+ e6 g7 B1 ^
2.4.5 活动被回收了怎么办 626 I5 T1 q1 @4 ^; X
2.5 活动的启动模式 63
9 c$ n, t) ^, ^: z# V) ]$ I" t2.5.1 standard 643 H! ^+ j. W. S) @
2.5.2 singleTop 659 A" q$ D3 ]$ T1 C3 Q) x
2.5.3 singleTask 67
- p4 n$ ~3 U& m: Z8 W8 u2.5.4 singleInstance 68
# k' s- ~) K6 ?; U' e+ ~# j" A2.6 活动的实践 71! _( q; p3 y! J% u+ ?0 A: R' y
2.6.1 知晓当前是在哪一个活动 71" N& E: x: k. u1 S& U
2.6.2 随时随地退出程序 72, D$ M W2 [" {' H
2.6.3 启动活动的写法 74
- h% f3 O/ V! o- p: \7 E2.7 小结与点评 75% {1 g( n3 ~& h0 A3 V d' k8 C* g
第3章 软件也要拼脸蛋——UI开发的点点滴滴 76) d4 e8 b/ i: Y1 h M3 E" Z" ^
3.1 如何编写程序界面 76
1 D9 S( H) e% S; p( M5 Y4 l+ A; S L3.2 常用控件的使用方法 773 s& b% f2 `- ^ `" L0 v
3.2.1 TextView 77- _) i7 _" {: r! O' f. s! [3 i; _5 k
3.2.2 Button 80* H4 i$ p" A' p0 a6 _2 R* B1 h3 I
3.2.3 EditText 82
) _- G2 i3 K2 U. x6 L/ q3.2.4 ImageView 86$ e/ `- D- Y; y8 o
3.2.5 ProgressBar 88
. e- |0 s" _ k$ _( K+ p3.2.6 AlertDialog 91" c! v6 `5 G+ [8 q5 F
3.2.7 ProgressDialog 93
7 h: l6 P& Q7 _; c3.3 详解4种基本布局 94; [* }, ^6 \7 @5 [1 ~
3.3.1 线性布局 94
! A& k5 S! ~" C3 Q) ^3.3.2 相对布局 100& Y# a: ^$ A1 I* m" H) T
3.3.3 帧布局 103( x" f. a/ c0 @- m
3.3.4 百分比布局 105
* I5 H: p9 V8 D/ z3.4 系统控件不够用?创建自定义控件 108
4 m# s* s; ]7 m3.4.1 引入布局 1090 L- t/ h6 D5 l4 K/ C. {- T
3.4.2 创建自定义控件 1119 o/ F$ N$ |: w7 C8 J
3.5 常用和难用的控件——ListView 113
2 } c/ E3 d& |5 A3.5.1 ListView的简单用法 114
3 R6 ?+ S$ J5 V: @ ~3.5.2 定制ListView的界面 115
4 `+ m8 {/ P R0 I( }5 {3.5.3 提升ListView的运行效率 119
: r$ G; u4 _0 k# Z3.5.4 ListView的点击事件 120
# `" x" v: J [6 d3.6 更强大的滚动控件——RecyclerView 122! V# m2 n. P; C' d
3.6.1 RecyclerView的基本用法 122& H* L+ P# i0 {2 d& w
3.6.2 实现横向滚动和瀑布流布局 125" c8 D1 u4 n4 ]: ?
3.6.3 RecyclerView的点击事件 130: V) ]( N) e7 [) P5 W9 H
3.7 编写界面的实践 132
4 T3 z6 S' H0 {. i3.7.1 制作Nine-Patch图片 132
4 `5 H+ ], A9 M5 E6 E/ f, P, q3.7.2 编写精美的聊天界面 135
& V- N0 h: z8 q4 t( ~3.8 小结与点评 141
& `, w- e h* X8 {+ T第4章 手机平板要兼顾——探究碎片 142: V) \+ S0 {$ C
4.1 碎片是什么 142
* i7 Q- \* }0 ^# Y& j- V. e; M# s6 A, H4.2 碎片的使用方式 1441 p9 o% g! D7 T4 l6 {- |+ R" O
4.2.1 碎片的简单用法 1443 i" [, A8 X; x8 c
4.2.2 动态添加碎片 147* P* O+ Q1 Q8 L, x8 S* r
4.2.3 在碎片中模拟返回栈 1508 O' f" ~; ~- v6 E: J
4.2.4 碎片和活动之间进行通信 151
J3 d2 I2 H& x( c7 Q: c8 ?+ n4.3 碎片的生命周期 1513 |6 i5 ?4 A4 F5 R v% S, [
4.3.1 碎片的状态和回调 151" f+ x0 d7 }9 w. L! }
4.3.2 体验碎片的生命周期 153
* [$ O' d/ y; U% w% G7 x7 _4.4 动态加载布局的技巧 156- ~+ H( { k* p5 f) ?
4.4.1 使用限定符 156
/ s7 ?7 k, x, g+ q4.4.2 使用小宽度限定符 159
! A1 M. g6 \1 f! z# i2 w# z, Z F4.5 碎片的实践——一个简易版的新闻应用 160+ ^) H1 H" h5 W
4.6 小结与点评 169# q, w4 `, X5 s. R# `+ A
第5章 全局大喇叭——详解广播机制 170/ Y# r# K0 K1 U! @2 e* ?
5.1 广播机制简介 170, }# B* V* ? M
5.2 接收系统广播 1713 e3 {) S- y% N; g \; J# i
5.2.1 动态注册监听网络变化 171/ i- }& W$ \4 B2 g& O M/ r
5.2.2 静态注册实现开机启动 1743 v. x; b' {& m3 T
5.3 发送自定义广播 177
; @3 R3 b: I6 e% p3 `( S% `5 l5.3.1 发送标准广播 177& b1 P0 W' G, O/ S
5.3.2 发送有序广播 179
: z/ q2 @$ \4 N8 M5.4 使用本地广播 183
T/ Q# s N' J* w9 z6 r5.5 广播的实践——实现强制下线功能 1859 w3 M; I$ Y6 Z+ d
5.6 Git时间——初识版本控制工具 1926 _% [% D0 Y2 }% |0 A2 i2 f
5.6.1 安装Git 1920 t% r: W- Y3 o- z' a6 o
5.6.2 创建代码仓库 193' \/ R% [6 \% t" a5 |! t% e
5.6.3 提交本地代码 195
9 X3 f* ?5 U' o- p1 z5 c1 ~5.7 小结与点评 195
1 q7 }: [9 d( q; H# d0 P, o; q* q第6章 数据存储全方案——详解持久化技术 196* }7 X* g9 u* w# n
6.1 持久化技术简介 1963 L0 [, V6 h& G6 }3 ^; k5 `- {
6.2 文件存储 197
! `& p( l/ _8 K, y* q, j$ g6.2.1 将数据存储到文件中 197& m) O9 K/ y4 R8 J6 @
6.2.2 从文件中读取数据 201
4 _ I, O2 n* g) K# l7 g6.3 SharedPreferences存储 203
5 n$ p6 @, y' [( n( J6.3.1 将数据存储到SharedPreferences中 203/ v# f# C2 {8 T- P) {- {
6.3.2 从SharedPreferences中读取数据 206: m& O0 h: {' [* x7 T
6.3.3 实现记住密码功能 208
5 m; d& o6 K5 I8 ~( @6.4 SQLite数据库存储 211/ h7 [1 m7 Y& j/ L% i; r
6.4.1 创建数据库 2117 o) v. f: X4 h5 p% h% t
6.4.2 升级数据库 216* ?8 V& c4 N3 ~. t ~
6.4.3 添加数据 219" U7 O" w% V0 e+ I. e% t o: y; L
6.4.4 更新数据 222
; C# x. _8 R+ w! d; P/ y6.4.5 删除数据 224: J8 u) W) W# l* J3 O0 d
6.4.6 查询数据 2259 E, X, d; T a* m% N8 C7 T- L$ I
6.4.7 使用SQL操作数据库 228
( N! L) |: l+ ]$ r# a6.5 使用LitePal操作数据库 2291 \6 U) j+ M# w5 C
6.5.1 LitePal简介 229
r/ K) M+ k( o, @) ^6.5.2 配置LitePal 230/ q7 d. r. ~8 I4 F
6.5.3 创建和升级数据库 231
1 t; f, V" M S" \0 B; H6.5.4 使用LitePal添加数据 236
- B, A0 y2 m' x# _+ P6.5.5 使用LitePal更新数据 237
# R8 j* i9 q+ k: [4 }9 v. t6.5.6 使用LitePal删除数据 240, S& E. a$ z% d8 k
6.5.7 使用LitePal查询数据 241+ h% B5 t" d- U$ {
6.6 小结与点评 243
2 ]# g" K: n9 C w. a% e4 x第7章 跨程序共享数据——探究内容提供器 2442 n4 } ]4 \* ]. j
7.1 内容提供器简介 244
' y9 U h! u. X$ y7.2 运行时权限 245* Z; j) V* f/ {) [$ c
7.2.1 Android权限机制详解 245
; W7 e |, P" L8 Q7.2.2 在程序运行时申请权限 249
3 r: F! r$ z2 z: v' @ u7.3 访问其他程序中的数据 254
* ^) I* w* Q4 O3 @- r( n- x7.3.1 ContentResolver的基本用法 254
, k2 h7 ~% g+ G( B7.3.2 读取系统联系人 256! u& Z6 J9 e: M) H; L/ q& Z
7.4 创建自己的内容提供器 260$ X. N* T+ v& L) {5 Z
7.4.1 创建内容提供器的步骤 261
5 Q+ C, H5 d/ f* x3 V7.4.2 实现跨程序数据共享 2657 b2 ?; P0 H' n, j8 \
7.5 Git时间——版本控制工具进阶 275
$ J3 K$ _8 v3 l7 M: w1 L5 b7.5.1 忽略文件 275
7 U$ k% L$ z1 x' T1 X8 h7.5.2 查看修改内容 276- y6 Q2 N" M/ _/ u! |) \+ Y
7.5.3 撤销未提交的修改 278
- H, z+ x4 z! U! g b8 f. z2 p7.5.4 查看提交记录 279; g; ]/ O4 B: g) [
7.6 小结与点评 280, @3 j) [. V* s2 S/ Z+ ]
第8章 丰富你的程序——运用手机多媒体 281; o; y1 _9 C) d) d' }7 s
8.1 将程序运行到手机上 281: O3 o( j6 `$ u% a7 Z
8.2 使用通知 283$ h4 p0 `( a4 k
8.2.1 通知的基本用法 283
' d8 b8 x. w! r6 J/ ~- Z$ L7 i8.2.2 通知的进阶技巧 289: x. r+ K- u L# N. ]
8.2.3 通知的高级功能 2911 j+ w M- |6 U
8.3 调用摄像头和相册 293
5 F1 k: [7 z0 y8.3.1 调用摄像头拍照 294& x% @ A) ]: X6 h/ t
8.3.2 从相册中选择照片 298
1 Q6 F2 _% _3 e3 X. J+ g: a( b% g8.4 播放多媒体文件 3038 p# n8 z m9 y/ |! i: {4 T
8.4.1 播放音频 303% O. U2 {4 A! v/ ]) p2 w
8.4.2 播放视频 307& M" Q6 l7 h; D- `8 ?) C
8.5 小结与点评 311, m2 h, M( p- I- O
第9章 看看精彩的世界——使用网络技术 3123 K1 ^- ?* J- B% n8 J9 Q( N8 }8 x
9.1 WebView的用法 312
& z5 E, D) h# q$ j3 l9.2 使用HTTP协议访问网络 3147 Y$ T% [ Y2 L2 t+ k
9.2.1 使用HttpURLConnection 3153 }' _! b$ Y5 o1 }3 {
9.2.2 使用OkHttp 319
4 @* n% {' h- g$ Y! ~- Q! |6 T9.3 解析XML格式数据 321% C* V) h; m# Y: {& p
9.3.1 Pull解析方式 324
6 m5 N, [6 b+ s6 {( ~0 L( T9.3.2 SAX解析方式 326" y% v( c8 l J* |3 p
9.4 解析JSON格式数据 329
' X# n) P( J, p1 s# ?# C2 W( {9.4.1 使用JSONObject 330
+ z" o ^: V3 c# e1 p& D9.4.2 使用GSON 331% |7 W$ ?: r# L
9.5 网络编程的实践 334
. O/ D0 _5 ^, F7 T( o/ q, N9.6 小结与点评 3380 h* l$ D( s4 B' L" N2 F( @1 H
第10章 后台默默的劳动者——探究服务 339
, D% U4 N' w# H! P+ X& _& X10.1 服务是什么 339
8 {, s/ M: z( d) g6 p10.2 Android多线程编程 340) }0 M( @4 ~; W6 X& r
10.2.1 线程的基本用法 340
# y8 O( n8 D* u4 d/ T10.2.2 在子线程中更新UI 341
* x7 H* U% `4 D$ j% G$ r* P10.2.3 解析异步消息处理机制 345
1 N6 @ E8 l: |; _5 w8 o10.2.4 使用AsyncTask 347/ a. v! D; @; N; Z1 z/ O
10.3 服务的基本用法 349
- U2 e+ [; K! }, y10.3.1 定义一个服务 349
$ n/ r4 ], l3 I& z10.3.2 启动和停止服务 352
! _8 ?* L, \# I, I10.3.3 活动和服务进行通信 355
" }1 H6 V% @' A) v( d5 [10.4 服务的生命周期 359
% n- q: m6 p/ v% m. F& ]* t; ], Y6 Z- S10.5 服务的更多技巧 359 Q. f6 L. j$ F! o" q ]# N
10.5.1 使用前台服务 359
m; B9 s, [7 R7 W) M; o10.5.2 使用IntentService 361
# X p% k5 {( v% @ b2 M: d10.6 服务的实践——完整版的下载示例 3658 Z& w0 O! g' I5 ^
10.7 小结与点评 378
: t& b. a. [& k& X% j第11章 Android特色开发——基于位置的服务 379
1 b( [: o& ?2 f7 D: |. r11.1 基于位置的服务简介 379
" P5 H5 [4 u# e: m11.2 申请API Key 380
1 `- m- i0 y! ^7 \; |# b11.3 使用百度定位 384# n% y2 R4 N, ?* g6 v+ K
11.3.1 准备LBS SDK 3847 B) _. w, |9 r) d
11.3.2 确定自己位置的经纬度 3868 a( D! w4 n" q$ `- l( \3 ?7 M4 X
11.3.3 选择定位模式 391
- ]2 ? x: U; w% v8 V11.3.4 看得懂的位置信息 393
' v) M' Z: Y# E! [0 P( i11.4 使用百度地图 395
8 A% ~ {4 }1 T11.4.1 让地图显示出来 395
( t6 z+ s$ w4 i" ?. @11.4.2 移动到我的位置 397
M0 e$ p, T5 H8 Q; F11.4.3 让“我”显示在地图上 400( n+ N7 Z- P9 j. \4 p
11.5 Git时间——版本控制工具的高级用法 402) ^5 Z! Z! M$ a3 R+ a$ w4 v; Z( a
11.5.1 分支的用法 4030 k- D7 T2 K" \. \) i# B: V
11.5.2 与远程版本库协作 404
7 U# `3 j; l/ ]+ c7 X/ ] @- E0 G11.6 小结与点评 406 `5 E/ R/ {& e0 q3 k
第12章 的UI体验——MaterialDesign实战 407, ~( e& A' x# P" \
12.1 什么是Material Design 407' |( K9 \! z6 q* |, v
12.2 Toolbar 408
( _7 O+ ]# D/ D+ N4 V! z( A8 u/ k6 b12.3 滑动菜单 415* a& t4 i! [+ E3 D2 h w
12.3.1 DrawerLayout 415% d) F7 r2 N1 r, x
12.3.2 NavigationView 418# @, J# R! G% z* C+ A# ~* W
12.4 悬浮按钮和可交互提示 423
$ E+ s% h- J9 ?4 c5 p/ Y12.4.1 FloatingActionButton 424
5 V4 u9 d* n q12.4.2 Snackbar 427 Q7 q3 E( D3 T# V, u; U3 K: i
12.4.3 CoordinatorLayout 428
' J# ^( U/ Y5 O) {# Q; V12.5 卡片式布局 430- \- ]. U. B8 M& R( c" y7 a9 \1 G
12.5.1 CardView 431+ N% w3 R1 d6 Q/ }# V# ]
12.5.2 AppBarLayout 437
4 `. f( _) S: G12.6 下拉刷新 440
. ]" x$ m$ L9 y12.7 可折叠式标题栏 443 J9 ]$ e# h$ B* M9 Q; O
12.7.1 CollapsingToolbarLayout 443
# ]! r1 t9 W* ?$ ^; }12.7.2 充分利用系统状态栏空间 453
/ h' Y1 J2 y3 {) c$ X12.8 小结与点评 456
- k7 W5 }+ U1 K0 a" l第13章 继续进阶——你还应该掌握的高级技巧 4578 {( W! ?: S; Z0 {7 Q0 v+ |
13.1 全局获取Context的技巧 457 C' ]0 J; W2 S$ S6 a
13.2 使用Intent传递对象 461. f! n1 o$ J' L$ P% S
13.2.1 Serializable方式 461; Z1 p- x! g; Z# k: T( M. S+ _/ W
13.2.2 Parcelable方式 463
, w9 e8 P$ L, H' U$ {* w13.3 定制自己的日志工具 464
, d! C F) U$ [5 `13.4 调试Android程序 466+ h4 E( C5 T1 `) @
13.5 创建定时任务 469! H4 X, f6 L* G. Q# j
13.5.1 Alarm机制 469
8 r7 @$ R H& I9 ^8 a9 h13.5.2 Doze模式 4717 }5 @ R% T/ u Y
13.6 多窗口模式编程 472
1 I! }7 w- K; j# b2 v' i5 R. `13.6.1 进入多窗口模式 473
- H3 C; O4 C+ [0 J! _13.6.2 多窗口模式下的生命周期 475( v/ e+ S1 x; d, d5 C; j2 f% e
13.6.3 禁用多窗口模式 479/ ]" f0 L0 g# A" a/ g! W
13.7 Lambda表达式 481
& _2 m# }% u6 }; P* D13.8 总结 4856 k! ~! Y: x' v' a+ B
第14章 进入实战——开发酷欧天气 4863 ], E+ F' U* t; }- ^
14.1 功能需求及技术可行性分析 486- \5 o/ u/ |* f# r5 y# b
14.2 Git时间——将代码托管到GitHub上 489
3 t4 X. o- B6 e14.3 创建数据库和表 494
4 f" I* z0 R0 w/ `- z14.4 遍历全国省市县数据 4993 H. n0 {$ j6 u5 F q2 c1 h
14.5 显示天气信息 509- N/ L9 a t2 v' s% c
14.5.1 定义GSON实体类 509) y4 F- y" [( N3 c8 \: Z
14.5.2 编写天气界面 5148 {1 D* B, \! O9 [; N3 g
14.5.3 将天气显示到界面上 520' a) y7 o) ~' D/ g: ` Z: r4 H
14.5.4 获取必应每日一图 5262 L6 d8 _" ^% R" d: y+ ~
14.6 手动更新天气和切换城市 532
3 O7 [2 N& y2 H/ \. n14.6.1 手动更新天气 532. F& y7 f) s6 U0 Z: {4 g/ ?8 M
14.6.2 切换城市 535
8 f7 F7 U; r* {4 s* o, j2 q8 g: k( ]7 B14.7 后台自动更新天气 5401 O2 ?9 Z* {* f: J% P9 ?
14.8 修改图标和名称 542' z7 B1 G5 B, r- ?# J. u
14.9 你还可以做的事情 543
! e* q/ d/ _! I4 E$ q, \# l第15章 后一步——将应用发布到360应用商店 545
5 o3 m+ R* G( x" r5 f. C% y15.1 生成正式签名的APK文件 545 I% I$ f& U( r. ]+ C f5 \
15.1.1 使用Android Studio生成 546 E, ^# R. s' G
15.1.2 使用Gradle生成 5480 V9 v, B8 E2 E1 {$ w( D
15.1.3 生成多渠道APK文件 551( C/ f4 s+ R, ~
15.2 申请360开发者账号 554* m4 s! T$ @( X* A2 ]3 p
15.3 发布应用程序 556
& n% }# n9 y5 @! m15.4 嵌入广告进行盈利 5607 B* r4 f- u G G
15.4.1 注册腾讯广告联盟账号 560
3 M) T4 k9 H% {3 f4 h* k, d15.4.2 新建媒体和广告位 5629 K1 N# ~% q6 {9 |9 Z7 {; Q
15.4.3 接入广告SDK 564
e' @" K- y8 D X: K15.4.4 重新发布应用程序 569
9 v5 M+ @' X0 B& @6 l15.5 结束语 570 ( r6 U0 ?/ w, m. d
% a, d4 P% h: Z6 S; O百度云盘下载地址(完全免费-绝无套路):# _; F: e: g3 n3 \, Q$ y
|