[A3]deview 2012 network binder

2,007 views
1,885 views

Published on

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,007
On SlideShare
0
From Embeds
0
Number of Embeds
986
Actions
Shares
0
Downloads
72
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

[A3]deview 2012 network binder

  1. 1. 2.1
  2. 2.  
  3. 3.  Motives
  4. 4.  2.2
  5. 5.  
  6. 6.  Service
  7. 7.  Requirements
  8. 8.  3.1
  9. 9.  
  10. 10.  It
  11. 11.  Should
  12. 12.  Be
  13. 13.  …⋯
  14. 14.  3.2
  15. 15.  
  16. 16.  Key
  17. 17.  Technical
  18. 18.  Ideas
  19. 19.  3.3
  20. 20.  Technical
  21. 21.  Issues
  22. 22.  3.4
  23. 23.  
  24. 24.  Future
  25. 25.  Works
  26. 26.   4.1
  27. 27.  
  28. 28.  Remote
  29. 29.  Content
  30. 30.  Provider
  31. 31.   4.2
  32. 32.  
  33. 33.  Remote
  34. 34.  Intent
  35. 35.  
  36. 36. ■  플랫폼
  37. 37.  Biz
  38. 38.  영역에서
  39. 39.  고객에게
  40. 40.  새로운
  41. 41.  가치를
  42. 42.  제공하고
  43. 43.  세계적
  44. 44.  수준의
  45. 45.  경쟁력을
  46. 46.  가진
  47. 47.  플랫폼
  48. 48.  사업을
  49. 49.  수행하고자
  50. 50.  2011년
  51. 51.  10월
  52. 52.  SK텔레콤으로부터
  53. 53.  분할하여
  54. 54.  신설한
  55. 55.  회사
  56. 56.  ■  Contents
  57. 57.  Delivery
  58. 58.  /
  59. 59.  LBS
  60. 60.  /
  61. 61.  New
  62. 62.  Media
  63. 63.  /
  64. 64.  Commerce
  65. 65.  
  66. 66.  Ad
  67. 67.  /
  68. 68.  Communication
  69. 69.  
  70. 70.  SNS
  71. 71.  /
  72. 72.   Music
  73. 73.  /
  74. 74.  Internet
  75. 75.  
  76. 76.  Finance
  77. 77.  Portal
  78. 78.  /
  79. 79.  RD
  80. 80.  등
  81. 81.  다양한
  82. 82.  사업
  83. 83.  영역에서
  84. 84.  가치를
  85. 85.  창출
  86. 86.  ■  대표적
  87. 87.  서비스는…⋯
  88. 88.  ■  더
  89. 89.  많은
  90. 90.  정보는…⋯
  91. 91.   •  홈
  92. 92.  페이지:
  93. 93.  
  94. 94.  http://www.skplanet.co.kr/
  95. 95.   •  인재
  96. 96.  채용:
  97. 97.  http://www.skplanet.co.kr/Recruit/Vision.aspx
  98. 98.  
  99. 99. ■  Binder
  100. 100.  -
  101. 101.  The
  102. 102.  facility
  103. 103.  to
  104. 104.  provide
  105. 105.  bindings
  106. 106.  to
  107. 107.  functions
  108. 108.  and
  109. 109.  data
  110. 110.  from
  111. 111.  one
  112. 112.  execution
  113. 113.  e nvironment
  114. 114.  to
  115. 115.  another
  116. 116.  ■  Basic
  117. 117.  Usage
  118. 118.   •  Create
  119. 119.  AIDL
  120. 120.   •  Implement
  121. 121.  Remote
  122. 122.  Interface
  123. 123.  (Method)
  124. 124.   •  Create
  125. 125.  and
  126. 126.  return
  127. 127.  Stub
  128. 128.  Object
  129. 129.  in
  130. 130.  onBind()
  131. 131.  method
  132. 132.  in
  133. 133.  Service
  134. 134.   •  Request
  135. 135.  bindService()
  136. 136.  and
  137. 137.  get
  138. 138.  Remote
  139. 139.  Interface
  140. 140.  through
  141. 141.  onServiceConnected()
  142. 142.  callback
  143. 143.   •  Use
  144. 144.  Remote
  145. 145.  Interface
  146. 146.  just
  147. 147.  like
  148. 148.  local
  149. 149.  Interface
  150. 150.  ■  Basic
  151. 151.  Concept
  152. 152.   •  Communication
  153. 153.  Model
  154. 154.   -  Cllient/Server
  155. 155.   -  Proxy/Stub
  156. 156.   •  Transaction
  157. 157.   -  Request
  158. 158.  and
  159. 159.  reply
  160. 160.   •  Parcel
  161. 161.  and
  162. 162.  marshalling/unmarshalling
  163. 163.  
  164. 164. IRemoteSvc.aidl
  165. 165.   interface IRemoteSvc { void foo(); }
  166. 166.  Client
  167. 167.   Proxy
  168. 168.   IRemoteSvc.java
  169. 169.   Stub
  170. 170.   Service
  171. 171.   IRemoteSvc.Stub.Proxy
  172. 172.   implements
  173. 173.   IRemoteSvc.Stub
  174. 174.   public
  175. 175.  void
  176. 176.  foo()
  177. 177.  {
  178. 178.   public
  179. 179.  void
  180. 180.  foo()
  181. 181.  {
  182. 182.  
  183. 183.  //
  184. 184.  …⋯
  185. 185.  
  186. 186.  mRemote.transact();
  187. 187.   }
  188. 188.   }
  189. 189.   public
  190. 190.  interface
  191. 191.  IRemoteSvc
  192. 192.  extends
  193. 193.  android.os.Iinterface
  194. 194.  {
  195. 195.  
  196. 196.  public
  197. 197.  static
  198. 198.  abstract
  199. 199.  class
  200. 200.  Stub
  201. 201.  extends
  202. 202.  android.os.Binder
  203. 203.  implements
  204. 204.  IRemoteSvc
  205. 205.  {
  206. 206.  
  207. 207.  
  208. 208.  public
  209. 209.  static
  210. 210.  IRemoteSvc
  211. 211.  asInterface(android.os.IBinder
  212. 212.  obj)
  213. 213.  {
  214. 214.  …⋯
  215. 215.  }
  216. 216.  
  217. 217.  
  218. 218.  public
  219. 219.  boolean
  220. 220.  onTransact(int
  221. 221.  code,
  222. 222.  Parcel
  223. 223.  data,
  224. 224.  Parcel
  225. 225.  reply,
  226. 226.  int
  227. 227.  flags)
  228. 228.  {
  229. 229.  …⋯
  230. 230.  }
  231. 231.  
  232. 232.  
  233. 233.  
  234. 234.  
  235. 235.  
  236. 236.  private
  237. 237.  static
  238. 238.  class
  239. 239.  Proxy
  240. 240.  implements
  241. 241.  IRemoteSvc
  242. 242.  {
  243. 243.  
  244. 244.  
  245. 245.  
  246. 246.  public
  247. 247.  void
  248. 248.  foo()
  249. 249.  {
  250. 250.  
  251. 251.  
  252. 252.  
  253. 253.  
  254. 254.  //
  255. 255.  mRemote
  256. 256.  ==
  257. 257.  IBinder
  258. 258.  
  259. 259.  
  260. 260.  
  261. 261.  
  262. 262.  mRemote.transact();
  263. 263.  
  264. 264.  
  265. 265.  
  266. 266.  }
  267. 267.  
  268. 268.  
  269. 269.  }
  270. 270.  
  271. 271.  }
  272. 272.   }
  273. 273.  
  274. 274. Activity
  275. 275.  Manager
  276. 276.  Service
  277. 277.   ③
  278. 278.  PKGMgr
  279. 279.  Lookup
  280. 280.   Client
  281. 281.   Proxy
  282. 282.   ④
  283. 283.  execute
  284. 284.   Stub
  285. 285.   Service
  286. 286.   ⑧
  287. 287.  new
  288. 288.  IRemoteSvc.Stub.Proxy
  289. 289.  
  290. 290.  attach
  291. 291.   implements
  292. 292.   IRemoteSvc.Stub. Proxy
  293. 293.   IRemoteSvc.Stub
  294. 294.   public
  295. 295.  void
  296. 296.  foo()
  297. 297.  {
  298. 298.  
  299. 299.  //
  300. 300.  …⋯
  301. 301.   ②
  302. 302.  IActivityManager.bindService()
  303. 303.   }
  304. 304.  ①
  305. 305.  bindService(“IRemoteSvc”)
  306. 306.   ⑥
  307. 307.  return
  308. 308.  IRemoteService.Stub
  309. 309.  (Binder)
  310. 310.   ⑦
  311. 311.  return
  312. 312.  IBinder
  313. 313.  (BinderProxy)
  314. 314.   Main
  315. 315.  T hread
  316. 316.   Android
  317. 317.  Framework
  318. 318.   Android
  319. 319.  Framework
  320. 320.   ⑤
  321. 321.  Create
  322. 322.  
  323. 323.  Bind
  324. 324.  Se rvice
  325. 325.   Binder
  326. 326.   IActivityManager
  327. 327.   IServiceConnection
  328. 328.   Binder
  329. 329.   Thread
  330. 330.   User
  331. 331.  Space
  332. 332.   Kernel
  333. 333.  Space
  334. 334.   Binder
  335. 335.  
  336. 336. public
  337. 337.  boolean
  338. 338.  onTransact(int
  339. 339.  code,
  340. 340.  Parcel
  341. 341.  data,
  342. 342.  Parcel
  343. 343.  reply,
  344. 344.  int
  345. 345.  flags)
  346. 346.  {
  347. 347.  
  348. 348.  switch(code)
  349. 349.  {
  350. 350.  
  351. 351.  case
  352. 352.  TRANSACTION_foo:
  353. 353.  
  354. 354.  
  355. 355.  data.enforceInterface(DESCRIPTOR);
  356. 356.  
  357. 357.  
  358. 358.  this.foo();
  359. 359.  
  360. 360.  }
  361. 361.   }
  362. 362.   Activity
  363. 363.  Manager
  364. 364.  Service
  365. 365.   Client
  366. 366.   Proxy
  367. 367.   Stub
  368. 368.   Service
  369. 369.   ①
  370. 370.  call
  371. 371.  foo()
  372. 372.   IRemoteSvc.Stub. ⑥
  373. 373.  Call
  374. 374.  foo()’s
  375. 375.  Implementation
  376. 376.   Proxy.foo()
  377. 377.   IRemoteSvc.Stub. public
  378. 378.  void
  379. 379.  foo()
  380. 380.  {
  381. 381.   ②
  382. 382.  Parcelizing
  383. 383.   ③
  384. 384.  Call
  385. 385.  BinderProxy.transact()
  386. 386.   onTransact()
  387. 387.  
  388. 388.  //
  389. 389.  …⋯
  390. 390.   }
  391. 391.   ⑤
  392. 392.  De-Parcelizing
  393. 393.   ④
  394. 394.  Binder.onTransact()
  395. 395.   Main
  396. 396.  T hread
  397. 397.   Android
  398. 398.  Framework
  399. 399.   Android
  400. 400.  Framework
  401. 401.   Binder
  402. 402.   Binder
  403. 403.  IActivityManager
  404. 404.   IServiceConnection
  405. 405.   Thread
  406. 406.   User
  407. 407.  Space
  408. 408.   Kernel
  409. 409.  Space
  410. 410.   Binder
  411. 411.   public
  412. 412.  void
  413. 413.  foo
  414. 414.  ()
  415. 415.  {
  416. 416.  
  417. 417.  Parcel
  418. 418.  _data
  419. 419.  =
  420. 420.  Parcel.obtain();
  421. 421.  
  422. 422.  Parcel
  423. 423.  _reply
  424. 424.  =
  425. 425.  Parcel.obtain();
  426. 426.  
  427. 427.  _data.writeInterfaceToken(DESCRIPTOR);
  428. 428.  
  429. 429.  mRemote.transact(Stub.TRANSACTION_foo,
  430. 430.  _data,
  431. 431.  _reply,
  432. 432.  0);
  433. 433.   }
  434. 434.  
  435. 435. ■  Binder는
  436. 436.  단말
  437. 437.  서비스
  438. 438.  간
  439. 439.  연동의
  440. 440.  핵심이
  441. 441.  되는
  442. 442.  기술임
  443. 443.  ■  Binder를
  444. 444.  통해
  445. 445.  서로
  446. 446.  다른
  447. 447.  App.들이
  448. 448.  자신의
  449. 449.  Local
  450. 450.  Interface에
  451. 451.  접근하듯이
  452. 452.  서로간에
  453. 453.  서비스
  454. 454.   연동을
  455. 455.  할
  456. 456.  수
  457. 457.  있음
  458. 458.  ■  그러나,
  459. 459.  만약
  460. 460.  다른
  461. 461.  디바이스에
  462. 462.  있는
  463. 463.  서비스와
  464. 464.  연동하고자
  465. 465.  한다면...
  466. 466.   •  일단
  467. 467.  서버를
  468. 468.  만들고...
  469. 469.   •  서로
  470. 470.  다른
  471. 471.  디바이스가
  472. 472.  서버에
  473. 473.  특정
  474. 474.  ID를
  475. 475.  만들어
  476. 476.  등록하여
  477. 477.  서로를
  478. 478.  찾을
  479. 479.  수
  480. 480.  있도록
  481. 481.  해줘야
  482. 482.  하고...
  483. 483.   •  서버와
  484. 484.  단말
  485. 485.  간,
  486. 486.  단말과
  487. 487.  단말
  488. 488.  간
  489. 489.  프로토콜을
  490. 490.  설계해야
  491. 491.  하고...
  492. 492.   •  또
  493. 493.  배터리
  494. 494.  문제가
  495. 495.  있을지도
  496. 496.  모르니,
  497. 497.  서비스를
  498. 498.  제공하는
  499. 499.  디바이스
  500. 500.  상의
  501. 501.  서비스는
  502. 502.  Push를
  503. 503.  받도록
  504. 504.  해 야
  505. 505.  할
  506. 506.  듯
  507. 507.  하고...
  508. 508.   •  등등...
  509. 509.  ■  복잡하다!!
  510. 510.  ■  서로
  511. 511.  다른
  512. 512.  디바이스
  513. 513.  상에서도
  514. 514.  Binder를
  515. 515.  이용
  516. 516.  할
  517. 517.  수
  518. 518.  있으면
  519. 519.  편하겠네
  520. 520.   Network
  521. 521.  Binder
  522. 522.  
  523. 523. ■  네트워크
  524. 524.  의존성
  525. 525.  최소화
  526. 526.   •  모든
  527. 527.  네트워크
  528. 528.  환경(Cellular
  529. 529.  /
  530. 530.  WiFi,
  531. 531.  Behind
  532. 532.  the
  533. 533.  Firewall
  534. 534.  /
  535. 535.  Router,
  536. 536.  Private
  537. 537.  IP,
  538. 538.  etc)에서
  539. 539.  서비스
  540. 540.   제공
  541. 541.  가능해야
  542. 542.  함
  543. 543.  ■  모든
  544. 544.  Android
  545. 545.  디바이스
  546. 546.  지원(주1)
  547. 547.   •  기
  548. 548.  출시된
  549. 549.  Android
  550. 550.  디바이스에서도,
  551. 551.  Android
  552. 552.  Framework
  553. 553.  변경
  554. 554.  없이
  555. 555.  서비스
  556. 556.  제공
  557. 557.  가능해야
  558. 558.  함
  559. 559.  ■  원격
  560. 560.  서비스
  561. 561.  검색
  562. 562.  방법
  563. 563.  제공
  564. 564.   •  원격
  565. 565.  디바이스를
  566. 566.  Identify하고,
  567. 567.  또한
  568. 568.  원격
  569. 569.  디바이스
  570. 570.  내의
  571. 571.  서비스를
  572. 572.  Identify
  573. 573.  할
  574. 574.  수
  575. 575.  있는
  576. 576.  방법
  577. 577.  제공
  578. 578.  ■  개발
  579. 579.  환경의
  580. 580.  투명성
  581. 581.  보장
  582. 582.   •  기존
  583. 583.  Binder
  584. 584.  개발
  585. 585.  환경(AIDL,
  586. 586.  Auto-generated
  587. 587.  Proxy/Stub
  588. 588.  code,
  589. 589.  Binder-related
  590. 590.  API)을
  591. 591.  그대로
  592. 592.  이용할
  593. 593.  수
  594. 594.  있어야
  595. 595.  함
  596. 596.  ■  최소
  597. 597.  노력,
  598. 598.  최대
  599. 599.  효과
  600. 600.   •  Network
  601. 601.  Binder를
  602. 602.  위한
  603. 603.  추가
  604. 604.  개발
  605. 605.  환경은
  606. 606.  One
  607. 607.  Package로
  608. 608.  제공되어
  609. 609.  적용이
  610. 610.  최대한
  611. 611.  간단해야
  612. 612.  함
  613. 613.  ■  보안
  614. 614.   •  자기
  615. 615.  단말
  616. 616.  접근
  617. 617.  /
  618. 618.  타인
  619. 619.  단말
  620. 620.  접근에
  621. 621.  대한
  622. 622.  보안
  623. 623.  정책
  624. 624.  제공
  625. 625.  가능해야
  626. 626.  함
  627. 627.   (주1)
  628. 628.  전화번호를
  629. 629.  가지는
  630. 630.  단말에
  631. 631.  국한함
  632. 632.  
  633. 633. ■  Security
  634. 634.   •  자기
  635. 635.  단말
  636. 636.  접근
  637. 637.   -  자기
  638. 638.  단말
  639. 639.  등록
  640. 640.  (SMS
  641. 641.  인증)
  642. 642.   •  타인
  643. 643.  단말
  644. 644.  접근
  645. 645.   -  Remote
  646. 646.  Binding
  647. 647.  요청
  648. 648.  시
  649. 649.  서비스
  650. 650.  제공
  651. 651.  관련
  652. 652.  사용자
  653. 653.  동의
  654. 654.  얻도록
  655. 655.  함
  656. 656.  ■  Device
  657. 657.  Look-up
  658. 658.   •  전화
  659. 659.  번호에
  660. 660.  기반
  661. 661.   •  URI
  662. 662.  Scheme
  663. 663.  이용하여
  664. 664.  원격
  665. 665.  디바이스
  666. 666.  표현
  667. 667.   •  URI
  668. 668.  Scheme
  669. 669.   -  Scheme
  670. 670.  name:
  671. 671.  binder
  672. 672.   -  Authority
  673. 673.   •  userInfo:
  674. 674.  전화
  675. 675.  번호
  676. 676.   •  Hostname:
  677. 677.  @skplanet.co.kr
  678. 678.   •  Ex)
  679. 679.  binder://821098765432@skplanet.co.kr
  680. 680.  ■  Service
  681. 681.  Look-up
  682. 682.   •  기존
  683. 683.  Inteface(
  684. 684.  bindService()
  685. 685.  API)와
  686. 686.  최대한
  687. 687.  유사해야
  688. 688.  함
  689. 689.  
  690. 690. ■  Remote
  691. 691.  Service
  692. 692.  Export
  693. 693.   •  AndroidManifest.xml
  694. 694.  ■  Remote
  695. 695.  Service
  696. 696.  Binding
  697. 697.  Request
  698. 698.   •  Client
  699. 699.  
  700. 700. ■  Remote
  701. 701.  Service
  702. 702.  Creation
  703. 703.   •  Server
  704. 704.  ■  Remote
  705. 705.  Service
  706. 706.  Call
  707. 707.   •  Client
  708. 708.  
  709. 709. ■  Hooking
  710. 710.  Binding
  711. 711.  Request
  712. 712.  
  713. 713.  Serializing
  714. 714.  Remote
  715. 715.  Method
  716. 716.  Call
  717. 717.   •  IRemoteSvc.Stub.Proxy
  718. 718.  를
  719. 719.  통한
  720. 720.  원격
  721. 721.  메소드
  722. 722.  호출은
  723. 723.  결국,
  724. 724.  호출
  725. 725.  시
  726. 726.  전달된
  727. 727.  인자를
  728. 728.  Parcel은
  729. 729.  담은
  730. 730.  후
  731. 731.  시스템에서
  732. 732.  생 성해
  733. 733.  준(onServiceConnected)
  734. 734.  IBinder
  735. 735.  객체(mRemote)의
  736. 736.  transact()
  737. 737.  메소드를
  738. 738.  호출하여
  739. 739.  Binder에
  740. 740.  전달하는
  741. 741.  것임
  742. 742.  
  743. 743.  시스템이
  744. 744.  반환하는
  745. 745.  IBinder
  746. 746.  객체를
  747. 747.  My
  748. 748.  Own
  749. 749.  Implementation으로
  750. 750.  바꿔
  751. 751.  줄
  752. 752.  수
  753. 753.  있다면,
  754. 754.  transact()로
  755. 755.  들어오는
  756. 756.   인자(code,
  757. 757.  data,
  758. 758.  reply,
  759. 759.  flags)를
  760. 760.  직접
  761. 761.  Serialize하여
  762. 762.  원격
  763. 763.  디바이스에
  764. 764.  네트워크로
  765. 765.  전송
  766. 766.  가능
  767. 767.  
  768. 768.  Custom
  769. 769.  Binder
  770. 770.  개 발
  771. 771.  /
  772. 772.  Custom
  773. 773.  Bind
  774. 774.  기능
  775. 775.  제공
  776. 776.   •  원격
  777. 777.  디바이스에서는
  778. 778.  AIDL이
  779. 779.  생성해준
  780. 780.  Stub
  781. 781.  상의
  782. 782.  onTransact()
  783. 783.  메소드가
  784. 784.  클라이언트의
  785. 785.  IBinder.transact()
  786. 786.  에
  787. 787.  전달 된
  788. 788.  인자를
  789. 789.  동일하게
  790. 790.  받아
  791. 791.  De-Parcelizing
  792. 792.  하여
  793. 793.  실제
  794. 794.  foo()
  795. 795.  함수를
  796. 796.  호출해
  797. 797.  줌
  798. 798.  
  799. 799.  클라이언트에서
  800. 800.  전달받은
  801. 801.  transact( )
  802. 802.  인자(code,
  803. 803.  data,
  804. 804.  reply,
  805. 805.  flags)만
  806. 806.  그대로
  807. 807.  Input으로
  808. 808.  넣어서
  809. 809.  IRemoveSvc.Stub.onTransact()
  810. 810.  에
  811. 811.  넣어주면
  812. 812.  그냥
  813. 813.  실 행되지
  814. 814.  않을까?
  815. 815.   Client
  816. 816.   Proxy
  817. 817.   Stub
  818. 818.   Service
  819. 819.   ①
  820. 820.  call
  821. 821.  foo()
  822. 822.   ③
  823. 823.  Call
  824. 824.  BinderProxy.transact()
  825. 825.   IRemoteSvc.Stub. ⑥
  826. 826.  Call
  827. 827.  foo()’s
  828. 828.  Implementation
  829. 829.   Proxy.foo()
  830. 830.   ④
  831. 831.  Binder.onTransact()
  832. 832.   IRemoteSvc.Stub. public
  833. 833.  void
  834. 834.  foo()
  835. 835.  {
  836. 836.   Binder
  837. 837.   ②
  838. 838.  Parcelizing
  839. 839.   onTransact()
  840. 840.  
  841. 841.  //
  842. 842.  …⋯

×