안드로이드 오픈소스 어플리케이션 블록 2
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

안드로이드 오픈소스 어플리케이션 블록 2

on

  • 4,890 views

이전 안드로이드 어플리케이션 블록에 이은 추가 오픈소스의 아키텍처, 동기, 사용법등을 정리한 자료입니다. ...

이전 안드로이드 어플리케이션 블록에 이은 추가 오픈소스의 아키텍처, 동기, 사용법등을 정리한 자료입니다.


또한 위 블록을 통해 실제 안드로이드 어플리케이션을 리펙토링하는 사례를 설명 드립니다.

nipa 소프트웨어 공학센터 모바일 참조 모델로 만든 것이며, 추후 더 자세한 문서로 작성한 것들을 공개하도록 하겠습니다.

Statistics

Views

Total Views
4,890
Views on SlideShare
2,906
Embed Views
1,984

Actions

Likes
11
Downloads
76
Comments
2

11 Embeds 1,984

http://arload.wordpress.com 1711
http://plus.url.google.com 106
http://www.hanrss.com 87
http://feedly.com 54
https://arload.wordpress.com 14
http://222.112.8.34 7
http://m.arload.wordpress.com 1
http://wordpress.com 1
http://digg.com 1
http://webcache.googleusercontent.com 1
http://www.feedspot.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

안드로이드 오픈소스 어플리케이션 블록 2 Presentation Transcript

  • 1. ! 안드로이드
  • 2.   오픈소스
  • 3.    어플리케이션
  • 4.   블럭
  • 5.   2
  • 6. NHNNEXT
  • 7.    손영수 LG전자
  • 8.    오유환 GumiKorea
  • 9.    김현종 메타빌드
  • 10.    주윤회 KT
  • 11.    진성주 딜라이트룸
  • 12.    신재명 말랑스튜디오
  • 13.    김영호
  • 14. http://www.slideshare.net/
 arload/ss-15706807 3 
  • 15.   
  • 16. http://goo.gl/QEKgaM
  • 17. 갈수록
  • 18.   증가하는
  • 19.   모바일
  • 20.   Traffic 2010 2013 2011 2014 2012 2015 6253991 3805989 2197563 236676 546050 1162950 1 Cisco
  • 21.   (2012),
  • 22.   Cisco
  • 23.   Visual
  • 24.   Networking
  • 25.   Index 단위
  • 26.   TB/월
  • 27. 어플리케이션
  • 28.   블럭이란..
  • 29. Android
  • 30.   Application
  • 31.   Block UI Network Common BaaS UI Pattern (Un)Marshaller Logging User Behavior UI Binding Actionbar (Un)Marshller + Dispatcher DI User Log + Crash Log Hybrid SNS Lightweight DI Notification Open Source BaaS
  • 32. Android
  • 33.   Application
  • 34.   Block UI UI Pattern Network Common BaaS Testting Release Engineering UI Binding (Un)Marshaller Logging User Behavior MonkeyRunner Maven Actionbar Hybrid Aquery SNS Volley (Un)Marshller + Dispatcher DI Lightweight DI User Log + Crash Log Notification Robotium Jenkins Otto Open Source BaaS UrQA Git, Gitflow, Jgitflow
  • 35. Welcome
  • 36.   to
  • 37.   my
  • 38.   Journey!
  • 39. 1장.
  • 40.   Aquery
  • 41.    ! ! Light-weight
  • 42.   library
  • 43.   for
  • 44.   
  • 45.    Async
  • 46.   task
  • 47.   &
  • 48.   manipulating
  • 49.   UI
  • 50. 복잡한
  • 51.   안드로이드
  • 52.   코딩을
  • 53.    
  • 54.   쉽고
  • 55.   간단하게
  • 56.   하자!
  • 57.    ! 1.Less
  • 58.   code(UI
  • 59.   manipulation)
  • 60.    2.Asynchronous
  • 61.   task
  • 62.    3.Image
  • 63.   loading
  • 64.    4.Authentication
  • 65. 
  • 66.   1.
  • 67.   Less
  • 68.   code(UI
  • 69.   manipulation) write-less/do-more
  • 70. 
  • 71.   2.
  • 72.   Async
  • 73.   callback(Json) Facebook
  • 74.   이름
  • 75.   가져오기
  • 76. 
  • 77.   2.
  • 78.   Async
  • 79.   callback(Bitmap,File) Bitmap File
  • 80. 2.
  • 81.   Synchronous
  • 82.   call(Block) Fetching
  • 83.   “Obama
  • 84.   news”
  • 85.   data
  • 86. 3.
  • 87.   Image
  • 88.   loading Load
  • 89.   image Cache
  • 90.   control
  • 91.    Down
  • 92.   sampling
  • 93.    Fallback
  • 94.   image
  • 95.    Preloading
  • 96.    Progress
  • 97.    Animation
  • 98.    Rounded
  • 99.   corner
  • 100. 3.
  • 101.   Image
  • 102.   loading Cache
  • 103.   control
  • 104.    ! Caching
  • 105.   적용
  • 106.   여부
  • 107.   control가능
  • 108.   
  • 109. 3.
  • 110.   Image
  • 111.   loading Down
  • 112.   sampling
  • 113.    (Handling
  • 114.   huge
  • 115.   image)
  • 116.    ! -2의
  • 117.   배수로
  • 118.   sampling
  • 119.    -200~399
  • 120.   px의
  • 121.   width
  • 122. 3.
  • 123.   Image
  • 124.   loading Fallback
  • 125.   Image
  • 126.    ! image
  • 127.   loading
  • 128.   실패시
  • 129.   control가능
  • 130.    (default
  • 131.   이미지
  • 132.   혹은
  • 133.   visibility
  • 134.   설정)
  • 135. 3.
  • 136.   Image
  • 137.   loading Preloading
  • 138.    ! 낮은
  • 139.   해상도
  • 140.   이미지부터
  • 141.   loading..
  • 142. 3.
  • 143.   Image
  • 144.   loading progress
  • 145.    ! Image
  • 146.   loading
  • 147.   완료까지
  • 148.   자동
  • 149.   progress
  • 150.   설정
  • 151. 3.
  • 152.   Image
  • 153.   loading Rounded
  • 154.   corner
  • 155.    ! 코드상에서
  • 156.   이미지를
  • 157.   Rounded
  • 158.   corner처리
  • 159.    (성능이슈로
  • 160.   작은
  • 161.   이미지에서만
  • 162.   적합)
  • 163. 4.
  • 164.   Authentication Google,
  • 165.   Twitter,
  • 166.   Facebook
  • 167.   auth
  • 168.   지원
  • 169.    ! Supported
  • 170.   google
  • 171.   service
  • 172. 4.
  • 173.   Authentication Facebook
  • 174.   SSO
  • 175. Architecture
  • 176. Aquery
  • 177.   사용하기 https://code.google.com/p/android-query/
  • 178. Aquery
  • 179.   사용하기 다운받은
  • 180.   jar
  • 181.   파일
  • 182.   lib에
  • 183.   추가
  • 184. 2장.
  • 185.   Volley
  • 186. Listview
  • 187.   +
  • 188.   메타데이터
  • 189.   UI
  • 190.   
  • 191. 기존의
  • 192.   문제점.. • • • • 쓰레드풀
  • 193.   관리
  • 194.    화면
  • 195.   회전시
  • 196.   호출
  • 197.   취소
  • 198.    ImageView의
  • 199.   재활용
  • 200.    네트워크
  • 201.   정보
  • 202.   캐싱
  • 203.    ! 다양한
  • 204.   버전에서
  • 205.   높은
  • 206.   성능으로
  • 207.   버그없이!
  • 208. 전형적인
  • 209.   Flow 1. 2. 3. 4. 목록조회
  • 210.   API
  • 211.   호출
  • 212.    결과
  • 213.   데이터
  • 214.   파싱
  • 215.    ListView에
  • 216.   display
  • 217.    각
  • 218.   item의
  • 219.   이미지주소로
  • 220.   이미지
  • 221.    요청
  • 222.    5. 이미지
  • 223.   디코딩
  • 224.   후
  • 225.   ImageView에
  • 226.    display
  • 227. 샘플
  • 228.   어플리케이션
  • 229. 일반적인
  • 230.   구현 Adapter
  • 231.   loads
  • 232.   data
  • 233.   from
  • 234.   getView()
  • 235.   
  • 236. 일반적인
  • 237.   구현
  • 238.   ­–
  • 239.   loadMoreData()
  • 240. 일반적인
  • 241.   구현
  • 242.   ­–
  • 243.   Back
  • 244.   in
  • 245.   getView()
  • 246. 일반적인
  • 247.   구현
  • 248.   ­–
  • 249.   LoadImage
  • 250.   Task
  • 251. Problems
  • 252.   &
  • 253.   solutions
 
 
 
 일반적인
  • 254.   방법
 vs
 Volley
  • 255.   사용
 
  • 256.   

  • 257. Problems 모든
  • 258.   네트워크
  • 259.   요청이
  • 260.   Serial
  • 261.   하게
  • 262.   처리됨
  • 263. Problems 화면
  • 264.   회전시
  • 265.   데이터
  • 266.   네트워크에서
  • 267.   reload
  • 268. Problems View의
  • 269.   재활용을
  • 270.   방해하는
  • 271.   AsyncTask
  • 272. Problems Froyo
  • 273.   에서의
  • 274.   호환성
  • 275.   문제
  • 276. Volley를
  • 277.   이용한
  • 278.   방법 Setup
  • 279. Volley를
  • 280.   이용한
  • 281.   방법 loadMoreData()
  • 282. Volley를
  • 283.   이용한
  • 284.   방법 ImageLoader를
  • 285.   통한
  • 286.   이미지로딩
  • 287. Volley를
  • 288.   이용한
  • 289.   방법 NetworkImageView
  • 290.   사용
  • 291. Volley
  • 292.   사용하기 1. Clone
  • 293.    ! ! 2. 코드
  • 294.   import
  • 295.    ! ! 3. Volley.newRequestQueue(context)
  • 296. 3장.
  • 297.   Otto
  • 298. BroadcastReceiver/Intent vs • Uses
  • 299.   standard
  • 300.   Java
  • 301.   classes
  • 302.   as
  • 303.   events
 • 보다
  • 304.   편리한
  • 305.   API
  • 306.   제공
  • 307.    ! • Intent
  • 308.   전송을
  • 309.   준비하기
  • 310.   위한
  • 311.   번거로움
  • 312.   해결
 • 기존
  • 313.   Intent
  • 314.   사용보다
  • 315.   훨씬
  • 316.   낮은
  • 317.   Overhead Otto
  • 318. Parcelable
  • 319.   Interface public class { private private private ! UserInfo implements Parcelable String mName; int mAge; String mEmail; //생성자 public UserInfo(String name, int age, String email) { this.mName = name; this.mAge = age; this.mEmail = email; } // 각 값을 넘겨주기 위한 getter 생성 public String getName() { return mName; } public int getAge() { return mAge; } } public String getEamil() { return mEmail; } ! ! !
  • 320. Parcelable
  • 321.   Interface 번거롭다!!!!!! // Parcelable를 생성하기 위한 생성자 Parcel를 파라메타로 넘겨 받음 private UserInfo(Parcel source) { mName = source.readString(); mAge = source.readInt(); mEmail = source.readString(); } // Parcelable을 상속 필수 Method @Override Intent intent = new Intent(); public int describeContents() intent.setAction("ACTION_NAME"); { intent.putExtra("UserInfo", userInfo); return 0; sendBradcast(intent); } // Parcelable의 write를 구현하기 위한 Method @Override public void writeToParcel(Parcel parcel, int arg1) { parcel.writeString(mName); parcel.writeInt(mAge); parcel.writeString(mEmail); } // Parcelable 객체로 구현하기 위한 Parcelable Method ArrayList구현 등.. public static final Parcelable.Creator<UserInfo> CREATOR = new Parcelable.Creator<UserInfo>() { …………………………… …………………………… ! ! !
  • 322. Otto public class { private private private ! UserInfo String mName; int mAge; String mEmail; // Parcelable를 생성하기 위한 생성자 //임의 생성 public UserInfo(String name, int age, String email) { this.mName = name; this.mAge = age; this.mEmail = email; } // 각 값을 넘겨주기 위한 get터 생성 public String getName() { return mName; } public int getAge() { return mAge; } } public String getEamil() { return mEmail; } ! ! ! 기본
  • 323.   클래스
  • 324.   사용
  • 325. Otto @Override protected void onResume() { super.onResume(); BusProvider.getInstance().register(this); } ! @Override protected void onPause() { super.onPause(); BusProvider.getInstance().unregister(this); } @Produce public UserInfo produceUserInfo() { return new UserInfo("yunhoi", 24, "yunhoi129@gmail.com") } Fragment#1
  • 326.    Fragment#2 ! Fragment#1 @Subscribe public void onUserInfoProduced(UserInfo info) { //Do Something } Fragment#2 public void sendData() { BusProvider.getInstance().post(produceUserInfo()); }
  • 327. Introduction • Otto
  • 328.   forked
  • 329.   from
  • 330.   google
  • 331.   “Guava(EventBus)”
  • 332.    ! • Optimized
  • 333.   to
  • 334.   Android
  • 335.   Platform
  • 336.   
  • 337.    ! • Event
  • 338.   기반의
  • 339.   Publish
  • 340.   ­–
  • 341.   Subscribe
  • 342.   모델
  • 343. Who
  • 344.   is
  • 345.   Otto
  • 346.   for? • Activity/Fragment
  • 347.   
  • 348.   간의
  • 349.   통신을
  • 350.   자주
  • 351.   사용해야
  • 352.   하는
  • 353.   어플 리케이션
 • 발생한
  • 354.   Event에
  • 355.   대해서
  • 356.   내부적으로
  • 357.   다양하게
  • 358.   처리해야
  • 359.   하 는
  • 360.   경우
  • 361.    ! • 보다
  • 362.   쉽게
  • 363.   Object
  • 364.   전송을
  • 365.   통해
  • 366.   통신하고
  • 367.   싶은
  • 368.   경우
 • Package
  • 369.   간의
  • 370.   의존성을
  • 371.   줄이고
  • 372.   싶은
  • 373.   경우
  • 374. 일반적인
  • 375.   구조
  • 376.   복잡하다!!! I/F Activity
  • 377.   #2 Activity
  • 378.   #1 I/F I/F
  • 379.    Service/Helper Fragment
  • 380.   #1 Fragment
  • 381.   #2 Thread
  • 382. Otto를
  • 383.   사용한
  • 384.   구조
  • 385.   깔끔하다!! Activity
  • 386.   #2 Activity
  • 387.   #1 Otto Service/Helper Fragment
  • 388.   #1 Fragment
  • 389.   #2 Thread
  • 390. C&C
  • 391.   View O"o <<Component>>   DeadEvent <<Component>>   Bus Publisher   (Ac1vity/Fragment) Post() Event Subscriber   Proxy <<Component>>   AnnotatedHandlerFinder <<Component>>   EventProducer <<Component>>   EventHandler Stub Event (Ac1vity/Fragment) [범례] component Func;on  call
  • 392. EventChannel
  • 393.   패턴 • Supplier(Publisher)
 
  • 394.   상태변화를
  • 395.   알리는
  • 396.   객체
  • 397.    ! • Consumer(Subscriber)
 
  • 398.   상태변화를
  • 399.   전달받는
  • 400.   객체
  • 401.    ! • 객체간의
  • 402.   다대다
  • 403.   관계에서
  • 404.   효율적
  • 405.   통신
  • 406.   가능
  • 407. Sample •Buttons
  • 408.   Fragment
  • 409.    ! •Map
  • 410.   Fragment
  • 411.    ! •ListView
  • 412.    Fragment
  • 413. 기존
  • 414.   방법
  • 415.   (Broadcast
  • 416.   Receiver) @Override public void onReceive(Context context, Intent intent) { @Override ! public { } void onResume() String actionName = intent.getAction(); if (actionName.equals(LocationActivity.LOCATION_CHANGED)) { super.onResume(); float latitude = IntentFilter(); IntentFilter filter = new intent.getFloatExtra("latitude", LocationActivity.DEFAULT_LAT); filter.addAction(LocationActivity.LOCATION_CHANGED); float longitude = intent.getFloatExtra("longitude", filter.addAction(LocationActivity.LOCATION_CLEAR); LocationActivity.DEFAULT_LON); getActivity().registerReceiver(locationReceiver, filter); String str = "(" + latitude + " , " + longitude + ")"; locationEvents.add(0, str); if (adapter != null) @Override adapter.notifyDataSetChanged(); public void onPause() { } else if (actionName.equals(LocationActivity.LOCATION_CLEAR)) { super.onPause(); ......... getActivity().unregisterReceiver(locationReceiver); ......... } } !
  • 417. 기존
  • 418.   방법
  • 419.   (Broadcast
  • 420.   Receiver) findViewById(R.id.move_location).setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { ! ! } }); lastLatitude += (RANDOM.nextFloat() * OFFSET * 2) - OFFSET; lastLongitude += (RANDOM.nextFloat() * OFFSET * 2) - OFFSET; Intent intent = new Intent(LOCATION_CHANGED); intent.putExtra("latitude", lastLatitude); intent.putExtra("longitude", lastLongitude); sendBroadcast(intent);
  • 421. Otto
  • 422.   사용 1. 2. 3. 4. 5. Register Activity/Fragment to Bus! Event 객체 정의! produce, subscribe 함수 정의! Bus를 통하여 기 정의한 event 객체 publishing! Subscribing event (전달 받은 event 처리) • Register Activity/Fragment
  • 423. • Event 객체 정의 public class LocationChangedEvent { public final float lat; public final float lon; ! } public LocationChangedEvent(float lat, float lon) { this.lat = lat; this.lon = lon; } ......... .........
  • 424. • Produce 함수 정의 및 Publish findViewById(R.id.move_location).setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { lastLatitude += (RANDOM.nextFloat() * OFFSET * 2) - OFFSET; lastLongitude += (RANDOM.nextFloat() * OFFSET * 2) - OFFSET; BusProvider.getInstance().post(produceLocationEvent()); } });
  • 425. • Produce 함수 정의 및 post @Subscribe public void onLocationChanged(LocationChangedEvent event) { locationEvents.add(0, event.toString()); if (adapter != null) adapter.notifyDataSetChanged(); } ! @Subscribe public void onLocationCleared(LocationClearEvent event) { locationEvents.clear(); if (adapter != null) adapter.notifyDataSetChanged(); }
  • 426. Otto
  • 427.   세부
  • 428.   기능들 • ThreadEnforcer
 
  • 429.   
  • 430.   -
  • 431.   메인
  • 432.   Thread에서
  • 433.   동작하도록
  • 434.   설정할
  • 435.   수
  • 436.   있는
  • 437.   기능
 
  • 438.   
  • 439.   -
  • 440.   UI
  • 441.   처리가
  • 442.   필요할
  • 443.   시
  • 444.   사용 Bus eventbus = new Bus(ThreadEnforcer.ANY); //모든 thread에서 동작 Bus eventbus = new Bus(ThreadEnforcer.MAIN); // 메인 thread에서만 동작 • IntentWrapping
 
  • 445.   
  • 446.   -
  • 447.   정보
  • 448.   전달
  • 449.   시
  • 450.   Intent에
  • 451.   정보를
  • 452.   담아
  • 453.   전송
 
  • 454.   
  • 455.   -
  • 456.   Memory
  • 457.   leak
  • 458.   현상으로
  • 459.   인한
  • 460.   어플리케이션
  • 461.   크래쉬
  • 462.   현상
  • 463.   방지
  • 464. Otto
  • 465.   단점 • Annotaion
  • 466.   사용
  • 467.    
  • 468.   
  • 469.   
  • 470.   
  • 471.   
  • 472.   -
  • 473.   실제
  • 474.   프로그래밍한
  • 475.   개발자가
  • 476.   아니면
  • 477.   이해하기
  • 478.   힘듬
  • 479.    
  • 480.   
  • 481.   
  • 482.   
  • 483.   
  • 484.   -
  • 485.   EventBus(GreenRobot)
  • 486.   NameConvention
  • 487.   
  • 488.   방식
  • 489.   사용
  • 490.    
  • 491.   
  • 492.   
  • 493.   
  • 494.   
  • 495.   
  • 496.   
  • 497.   
  • 498.   (ex
  • 499.   :
  • 500.   onEvent
  • 501.   (…⋯.)
  • 502.   /
  • 503.   onEventMainThread(…⋯.)
  • 504.   )
  • 505.    ! • Event
  • 506.   class
  • 507.   에
  • 508.   대한
  • 509.   정의
  • 510.   필요
  • 511.    
  • 512.   
  • 513.   
  • 514.   
  • 515.   
  • 516.   -
  • 517.   Event
  • 518.   class
  • 519.   에
  • 520.   대하여
  • 521.   모두
  • 522.   정의해
  • 523.   주어야
  • 524.   함
  • 525.    
  • 526.   
  • 527.   
  • 528.   
  • 529.   
  • 530.   
  • 531.   
  • 532.   (ex
  • 533.   :
  • 534.   changedEvent,
  • 535.   clearedEvent,
  • 536.   newEvent
  • 537.   .…⋯..
  • 538.   )
  • 539.    ! • Data
  • 540.   양이
  • 541.   적을
  • 542.   시
  • 543.   불필요
  • 544.    
  • 545.   
  • 546.   
  • 547.   
  • 548.   
  • 549.   -
  • 550.   Integer,
  • 551.   String,
  • 552.   Long…⋯..
  • 553. 4장. Testing(Robotium) 
  • 554.   
  • 555. 어플리케이션의
  • 556.   품질
  • 557. 대부분
  • 558.   UI
  • 559.   테스트는
  • 560.   반복
  • 561.   노가다..
  • 562. 기존
  • 563.   앱
  • 564.   개발자들에게
  • 565.   테스트
  • 566.   자체가
  • 567.   고역 앱
  • 568.   개발
  • 569.   후
  • 570.   배포를
  • 571.   하기
  • 572.    전에
  • 573.   테스트를
  • 574.   일일이
  • 575.    다
  • 576.   하는
  • 577.   건
  • 578.   리소스가
  • 579.   많 이
  • 580.   드는
  • 581.   작업
  • 582.   이다.
  • 583.    Today
  • 584.   Breaker,
  • 585.   스터디
  • 586.   플래너앱
  • 587.   개발자
  • 588.    Gple
  • 589.   Lab
  • 590.   개발팀장
  • 591. 단위
  • 592.   테스트 (Unit
  • 593.   Test) 
  • 594.   
  • 595. White
  • 596.   Box
  • 597.   Test
  • 598. Black
  • 599.   Box
  • 600.   Test
  • 601. UI
  • 602.   Testing
  • 603.   Tool MonkeyRunner 
  • 604.   
  • 605. 하지만... 1. X,
  • 606.   Y
  • 607.   좌표를
  • 608.   직접
  • 609.   입력
  • 610.   하여
  • 611.   이벤트
  • 612.   핸 들링..
  • 613.    2. 테스트
  • 614.   결과를
  • 615.   육안으로
  • 616.   직접
  • 617.   확인..
  • 618.    3. Java가
  • 619.   아닌
  • 620.   Jython
  • 621. 1. 객체
  • 622.   단위로
  • 623.   이벤트
  • 624.   핸들링..
  • 625.    2. Junit
  • 626.   지원
  • 627.    3. Java
  • 628. 데모
  • 629.   영상
  • 630. C&C
  • 631.   View
  • 632. • MonkeyRunner의
  • 633.   뷰
  • 634.   클릭 
  • 635.   
  • 636.   
  • 637.   #
  • 638.   Clicks
  • 639.   on
  • 640.   Button
  • 641.    
  • 642.   
  • 643.   
  • 644.   device.touch(385,
  • 645.   1200,
  • 646.   MonkeyDevice.DOWN_AND_UP)
  • 647.    
  • 648.   
  • 649.   
  • 650.   MonkeyRunner.sleep(2) • Robotium의
  • 651.   뷰
  • 652.   클릭 
  • 653.   
  • 654.   
  • 655.   //Clicks
  • 656.   on
  • 657.   Button
 
  • 658.   
  • 659.   
  • 660.   solo.clickOnView(solo.getview(“R.id.Button”));
  • 661.    OR
  • 662.    
  • 663.   
  • 664.   
  • 665.   View
  • 666.   v=
  • 667.   findViewById(R.id.plus);
  • 668.    
  • 669.   
  • 670.   
  • 671.   solo.clickOnView(v);
  • 672. • MonkeyRunner의
  • 673.   메뉴
  • 674.   버튼
  • 675.   클릭 
  • 676.   
  • 677.   
  • 678.   #
  • 679.   Presses
  • 680.   the
  • 681.   Menu
  • 682.   button
  • 683.    
  • 684.   
  • 685.   
  • 686.   device.press('KEYCODE_MENU',
  • 687.   MonkeyDevice.DOWN_AND_UP)
  • 688.    
  • 689.   
  • 690.   
  • 691.   MonkeyRunner.sleep(2)
  • 692.    
  • 693.   
  • 694.   
  • 695.   #
  • 696.   Clicks
  • 697.   on
  • 698.   menu
  • 699.   item
  • 700.    
  • 701.   
  • 702.   
  • 703.   device.touch(385,
  • 704.   1200,
  • 705.   MonkeyDevice.DOWN_AND_UP)
  • 706.    
  • 707.   
  • 708.   
  • 709.   MonkeyRunner.sleep(2) • Robotium의
  • 710.   메뉴
  • 711.   버튼
  • 712.   클릭 
  • 713.   
  • 714.   
  • 715.   //In
  • 716.   text
  • 717.   field
  • 718.   0,
  • 719.   enter
  • 720.   Note
  • 721.   1
  • 722.    
  • 723.   
  • 724.   solo.clickOnMenuItem("Add
  • 725.   note");
  • 726. • MonkeyRunner의
  • 727.   텍스트
  • 728.   입력 
  • 729.   
  • 730.   
  • 731.   #
  • 732.   Input
  • 733.   text
  • 734.   Note
  • 735.   1
  • 736.    
  • 737.   
  • 738.   
  • 739.   device.type('Note')
  • 740.    
  • 741.   
  • 742.   
  • 743.   device.press('KEYCODE_SPACE',
  • 744.   MonkeyDevice.DOWN_AND_UP)
  • 745.    
  • 746.   
  • 747.   
  • 748.   device.type('1')
 • Robotium의
  • 749.   텍스트
  • 750.   입력 
  • 751.   
  • 752.   
  • 753.   solo.enterText(0,
  • 754.   "Note
  • 755.   1");
  • 756. • Junit
  • 757.   지원
  • 758. • 단점은
  • 759.   없나? 1.
  • 760.   간단한
  • 761.   테스트에만
  • 762.   사용가능
  • 763.    2.
  • 764.   해당
  • 765.   application만
  • 766.   테스트
  • 767.   가능
  • 768.    3.
  • 769.   자잘한
  • 770.   버그가
  • 771.   존재
  • 772. UrQA
 Mobile
  • 773.   QA
  • 774.   System
  • 775. Bug
  • 776.    Information
  • 777. Why
  • 778.   need
  • 779.   UrQA
  • 780.   ?
  • 781. Android
  • 782.   developer
  • 783.   Bug
  • 784.   Report OS버전은? 센서
  • 785.   상태는? 로그데이터는?
  • 786. BugSense 좀더
  • 787.   나은
  • 788.   정보제공 하지만?? 웹
  • 789.   UI
  • 790.   제공
  • 791. BugSense
  • 792. BugSense
  • 793. Application
  • 794.   Crash
  • 795.   Report
  • 796.   for
  • 797.   Android
  • 798.   
  • 799. Not
  • 800.   use
  • 801.   
  • 802.    90%
  • 803.    
  • 804.   
  • 805.   
  • 806.   Why?!!!!
  • 807. ACRA
  • 808.   -
  • 809.   Application
  • 810.   Crash
  • 811.   Report
  • 812.   for
  • 813.   Android
  • 814.    역시나
  • 815.   제한적이다
  • 816.   
  • 817.   
  • 818.   
  • 819. ACRA
  • 820.   -
  • 821.   Application
  • 822.   Crash
  • 823.   Report
  • 824.   for
  • 825.   Android
  • 826.    버그
  • 827.   리포팅
  • 828.   정보 ReportTime
  • 829.   
  • 830.    
  • 831.    Model
  • 832.   
  • 833.    
  • 834.    National
  • 835.   
  • 836.    
  • 837.    ErrorName
  • 838.   
  • 839.    
  • 840.    ErrorClassName
  • 841.    Line
  • 842.   
  • 843.    
  • 844.    
  • 845.    AppVersion
  • 846.   
  • 847.    
  • 848.    OSVersion
  • 849.   
  • 850.    
  • 851.    GPS
  • 852.   
  • 853.    
  • 854.    
  • 855.    WiFi
  • 856.   
  • 857.    
  • 858.    
  • 859.    MobileNetwork
  • 860.   
  • 861.    ScreenWidth
  • 862.   
  • 863.    ScreenHeight
  • 864.   
  • 865.    CallStack
  • 866.   
  • 867.    
  • 868.    Log
  • 869.   
  • 870.    
  • 871.    
  • 872.    에러
  • 873.   발생
  • 874.   시간
  • 875.    스마트폰
  • 876.   모델명
  • 877.    발생
  • 878.   국가
  • 879.    에러
  • 880.   이름
  • 881.    에러
  • 882.   클래스
  • 883.   이름
  • 884.    에러
  • 885.   라인
  • 886.    앱버전
  • 887.    OS버전
  • 888.    GPS상태
  • 889.    WiFi
  • 890.   상태
  • 891.    3G상태
  • 892.    스크린
  • 893.   크기
  • 894.    스크린
  • 895.   크기
  • 896.    콜스택
  • 897.   정보
  • 898.    로그
  • 899.   정보
  • 900. Native
  • 901.   Crash
  • 902.   Report?
  • 903. A Q Ur Demo
  • 904.   &
  • 905.   Tutorial
  • 906. A Q Ur Architecture
  • 907. ARCA
  • 908.   Server view Bug Report ARCA
  • 909.   Client
  • 910.    browser browser log Admin tables tables 
  • 911.    
  • 912.    Bug
  • 913.    browser
  • 914.   
 ctrl util
  • 915.    Report
  • 916.    browser
  • 917.   ctrl 
  • 918.    Report
  • 919.   
  • 920.    detail
  • 921.   
  • 922.   ctrl control Dashboard
  • 923.    ctrl Account
  • 924.    ctrl Analyzer
  • 925.    ctrl Analyzer
  • 926.    event Communicator
  • 927.   (Json) service Report
  • 928.   store Couch
  • 929.   DB user log Detail
  • 930.    Detail Admin
 ctrl Dash
  • 931.    board Monsterid common sender annotation collector
  • 932. ACRA
  • 933.   =
  • 934.   Couch
  • 935.   DB
  • 936.    • Document-oriented
  • 937.   Database
  • 938.    ! • Documents
  • 939.    ! • Schema
  • 940.   Free
  • 941.    ! 
 • RESTful
  • 942.   HTTP
  • 943.   API
  • 944.   
  • 945. ACRA
  • 946.   =
  • 947.   Couch
  • 948.   DB
  • 949. ACRA
  • 950.   =
  • 951.   Couch
  • 952.   DB
  • 953. ACRA
  • 954.   =
  • 955.   Couch
  • 956.   DB • Insert
  • 957.   가
  • 958.   많아
  • 959.   질수록
  • 960.   느리다.
  • 961.    
  • 962.   
  • 963.   (MongoDB
  • 964.   보다
  • 965.   빠르다고
  • 966.   하지만
  • 967.   500
  • 968.   건
  • 969.   이상
  • 970.   부터는
  • 971.   느 려짐)
  • 972.    ! • Big
  • 973.   Couch,
  • 974.   Couch
  • 975.   Lounge
  • 976.   경우
  • 977.   cache
  • 978.   server
  • 979.   별 도로
  • 980.   구성
  • 981.   해야
  • 982.   함.
  • 983.    ! • 실시간
  • 984.   갱신
  • 985.   시
  • 986.   Conflict
  • 987.   가
  • 988.   자주
  • 989.   발생
  • 990.   함.
  • 991.    ! • 
  • 992.   Clustering
  • 993.   기술을
  • 994.   지원
  • 995.   하지
  • 996.   않음
  • 997. URQA
  • 998.   Architecture
  • 999.   
  • 1000. UrQA는
  • 1001.   모바일
  • 1002.   앱
  • 1003.   개발팀에게
  • 1004.    VALUE 크래시를
  • 1005.   빠르게
  • 1006.   대응 Person-hour
  • 1007.   절약 차별화된
  • 1008.   기술력 가치를
  • 1009.   제공하는데 FEATURE 실시간으로
  • 1010.   에러를
  • 1011.   
  • 1012.    등급화하여
  • 1013.   리포팅 Crash
  • 1014.   이벤트
  • 1015.   경로
  • 1016.    시각화 네이티브
  • 1017.   크래시
  • 1018.   리포트 를
  • 1019.   통해서
  • 1020.   이루어
  • 1021.   진다.
  • 1022. 최근에러
  • 1023.   10개만
  • 1024.   보여주는
  • 1025.   데시보드
  • 1026. 아이콘과
  • 1027.   색을
  • 1028.   
  • 1029.    이용한
  • 1030.   버그의
  • 1031.   등급
  • 1032.   ,
  • 1033.   갯수표시
  • 1034. UrQA
  • 1035.   ­–
  • 1036.   Event
  • 1037.   Path 버그를
  • 1038.   발생시킨
  • 1039.   Crash경로를
  • 1040.   
  • 1041.    시각화해서
  • 1042.   보여줌 CRASH
  • 1043. Native
  • 1044.   Crash
  • 1045.   Report
  • 1046. Tutorial
  • 1047.   ! http://www.ur-qa.com/static/tutorial/tutorial.html
  • 1048.    ! http://www.youtube.com/watch?v=TEwS0c1shdU
  • 1049. Tutorial
  • 1050.   ! Step1
  • 1051.   “urqa.jar”
  • 1052.   Download
  • 1053.   and
  • 1054.   Import
  • 1055.   urqa.jar
  • 1056.   
  • 1057. Tutorial
  • 1058.   ! Step2
  • 1059.   Android
  • 1060.   manifest
  • 1061.   file
  • 1062.   setting Step3
  • 1063.   Create
  • 1064.   instance
  • 1065. Tutorial
  • 1066.   ! Step4-1
  • 1067.   create
  • 1068.   a
  • 1069.   JNI
  • 1070.   folder
  • 1071.   within
  • 1072.   the
  • 1073.   project
  • 1074. Tutorial
  • 1075.   ! Step4-2
  • 1076.   copy
  • 1077.   the
  • 1078.   Jni
  • 1079.   folder
  • 1080.   from
  • 1081.   this
  • 1082.   file
  • 1083.   
  • 1084.    
  • 1085.   
  • 1086.   
  • 1087.   
  • 1088.   
  • 1089.   
  • 1090.   
  • 1091.   
  • 1092.   
  • 1093.   
  • 1094.   
  • 1095.   
  • 1096.   Please
  • 1097.   make
  • 1098.   mk
  • 1099.   files
  • 1100.   
 
  • 1101.   
  • 1102.   
  • 1103.   
  • 1104.   
  • 1105.   
  • 1106.   
  • 1107.   
  • 1108.   
  • 1109.   
  • 1110.   
  • 1111.   
  • 1112.   'Application.mk'
  • 1113.   and
  • 1114.   'android.mk'
  • 1115. Tutorial
  • 1116.   ! Now
  • 1117.   you
  • 1118.   will
  • 1119.   be
  • 1120.   able
  • 1121.   to
  • 1122.   get
  • 1123.   Native
  • 1124.   Crash
  • 1125.   Report!!
  • 1126. 결론 UrQA는
  • 1127.   버그리포트를
  • 1128.   강화하여
 QA역할
  • 1129.   자동화를
  • 1130.   목표로
  • 1131.   한다.
 크래시& 로그정보 자동 수집
  • 1132.    ! 사용자의 앱 사용패턴, 이벤트정보 수집
  • 1133.    ! 크래시 패턴 분석 & 보고
  • 1134.    ! 빠르게 크래시 수정 App
  • 1135.   품질
  • 1136.   향상
  • 1137. 5장.
  • 1138.    Android
 Release
  • 1139.    Engineering http://www.flickr.com/photos/jakuza/
  • 1140. 개발
  • 1141.   도구 SCM(Source
  • 1142.   Code
  • 1143.   Management
  • 1144.   system)
  • 1145.    • 중앙
  • 1146.   관리형
  • 1147.    • • • CVS
  • 1148.    SVN
  • 1149.    분산
  • 1150.   관리형
  • 1151.    • Git
  • 1152.    • Mercurial
  • 1153. 개발
  • 1154.   도구 이슈트래커
  • 1155. 개발
  • 1156.   도구 위키(WIKI)
  • 1157. 안드로이드앱
  • 1158.   현실
  • 1159.    다양한
  • 1160.   오픈소스
  • 1161.   결합 • ActionBarSherlock
  • 1162.    • ... • HoloEverywhere
  • 1163.    • PullToRefresh
  • 1164.    • Facebook
  • 1165.    • Twitter4J
  • 1166.    • Google
  • 1167.   play
  • 1168.   service
  • 1169.    • GCM
  • 1170.    • Gson
  • 1171.    • Volley
  • 1172.    • JUnit
  • 1173.   
  • 1174. 안드로이드앱
  • 1175.   현실
  • 1176.    해상도
  • 1177.   파편화와
  • 1178.   테스트
  • 1179. 안드로이드앱
  • 1180.   현실
  • 1181.    다양한
  • 1182.   마켓!
  • 1183. 자동화 http://www.flickr.com/photos/72782662@N00/1485491742/in/ photolist-3ggwWA-4bG9Qy-4vgXCn-4x7bZV-4x7c5B-4M6c9A-4MXpR3-53TDco-5gkkDN-5AApwJ-5AAqfJ-5AMaTh-5HhuZU-5Hhv1b-5TBzC6-5TFU9s-5TFUzL-5TFWjQ-5X2DDb-5XvnSv-61EFAV-62b cBq-6fZP2W-6pkBeE-6qezaZ-6rwFka-6sioFV-6sivHR-6vwvxt-6vwvNM-6vwvRX-6vAH2j-6vAH3d-6vAH49-6vAH6C-6vAH8w-6Ci6vw-6Q2wAG-72T2K9-78tKwT-78tL1i-7eiuud-7eRUA6-7j9hPN-7kTR6s7tzXRR-7tDQUN-8u67LN-e546PL-bF7fBn-dX2FY1
  • 1184. 안드로이드앱
  • 1185.   배포에
  • 1186.   필요한
  • 1187.   것
  • 1188.    1. Versioning,
  • 1189.   Release
  • 1190.   Note
  • 1191.    2. Automated
  • 1192.   Test
  • 1193.   and
  • 1194.   Build
  • 1195.    3. Managing
  • 1196.   3rd
  • 1197.   Party
  • 1198.    Framework
  • 1199.   Version
  • 1200. 안드로이드앱
  • 1201.   배포에
  • 1202.   필요한
  • 1203.   것
  • 1204.    현실
  • 1205.    1. 수동
  • 1206.   Versioning,
  • 1207.   수동
  • 1208.   
  • 1209.    Release
  • 1210.   Note
  • 1211.    2. 수동
  • 1212.   Test
  • 1213.   and
  • 1214.   Build
  • 1215.    3. 수동
  • 1216.   Managing
  • 1217.   3rd
  • 1218.   Party
  • 1219.    Framework
  • 1220.   Version
  • 1221. 그래서
  • 1222.   적용하려고
  • 1223.   하는
  • 1224.   것은!
  • 1225.    1. Git,
  • 1226.   Gitflow
  • 1227.    2. Semantic
  • 1228.   Versioning
  • 1229.    3. Maven
  • 1230.   외부라이브러리
  • 1231.   관리
  • 1232.    4. 자동화
  • 1233.   빌드(Jenkins)
  • 1234.    5. 이슈트래커
  • 1235.   활용한
  • 1236.   릴리즈
  • 1237.   노 트
  • 1238. 1. Git,
  • 1239.   Gitflow
  • 1240. 1. Git,
  • 1241.   Gitflow
  • 1242. 1. Git,
  • 1243.   Gitflow
  • 1244. 2. Semantic
  • 1245.   Versioning
  • 1246. X.Y.Z (Major.Minor.Patch) 중요 업데이트 : 1.0.0 -> 2.0.0! 마이너 업데이트 : 1.1.0 -> 1.2.0! 버그 개선 버전 : 0.1.1 -> 0.1.2! 최초 개발 버전 : 0.1.0! 선행배포 : 0.X.0-alpha, 0.X.0-beta! 빌드버전 : 0.1.1+build.29 114
  • 1247. 3. Maven
  • 1248.   외부라이브러리
  • 1249.   관리 121
  • 1250. 3. Maven
  • 1251.   외부라이브러리
  • 1252.   관리 ROOT
  • 1253.    |-
  • 1254.   gen
  • 1255.    |-
  • 1256.   res
  • 1257.    |-
  • 1258.   drawable
  • 1259.    |-
  • 1260.   src
  • 1261.    
  • 1262.   
  • 1263.   
  • 1264.   |-
  • 1265.   main
  • 1266.    
  • 1267.   
  • 1268.   
  • 1269.   
  • 1270.   
  • 1271.   
  • 1272.   |-
  • 1273.   java
  • 1274.    
  • 1275.   
  • 1276.   
  • 1277.   
  • 1278.   
  • 1279.   
  • 1280.   |-
  • 1281.   resources
  • 1282.    
  • 1283.   
  • 1284.   
  • 1285.   |-
  • 1286.   test
  • 1287.    
  • 1288.   
  • 1289.   
  • 1290.   
  • 1291.   
  • 1292.   
  • 1293.   |-
  • 1294.   java
  • 1295.    
  • 1296.   
  • 1297.   
  • 1298.   
  • 1299.   
  • 1300.   
  • 1301.   |-
  • 1302.   resources
  • 1303.    |-
  • 1304.   AndroidManifest.xml
  • 1305.    pom.xml
  • 1306.    project.properties
  • 1307. 3. Maven
  • 1308.   외부라이브러리
  • 1309.   관리 <dependencies>
  • 1310.    
  • 1311.   
  • 1312.   <dependency>
  • 1313.    
  • 1314.   
  • 1315.   
  • 1316.   
  • 1317.   <groupId>com.squareup.dagger</ groupId>
  • 1318.    
  • 1319.   
  • 1320.   
  • 1321.   
  • 1322.   <artifactId>dagger</artifactId>
  • 1323.    
  • 1324.   
  • 1325.   
  • 1326.   
  • 1327.   <version>1.1.0</version>
  • 1328.    
  • 1329.   
  • 1330.   </dependency>
  • 1331.    
  • 1332.   
  • 1333.   <dependency>
  • 1334.    
  • 1335.   
  • 1336.   
  • 1337.   
  • 1338.   <groupId>com.squareup.dagger</ groupId>
  • 1339.    
  • 1340.   
  • 1341.   
  • 1342.   
  • 1343.   <artifactId>dagger-compiler</artifactId>
  • 1344.    
  • 1345.   
  • 1346.   
  • 1347.   
  • 1348.   <version>1.1.0</version>
  • 1349.    
  • 1350.   
  • 1351.   
  • 1352.   
  • 1353.   <optional>true</optional>
  • 1354.    
  • 1355.   
  • 1356.   </dependency>
  • 1357.    </dependencies>
  • 1358. 3. Maven
  • 1359.   외부라이브러리
  • 1360.   관리 jgitflow를
  • 1361.   사용하여
  • 1362.   javamaven
  • 1363.   프로젝트
  • 1364.   릴리즈를
  • 1365.    쉽게하는-법
  • 1366.    goo.gl/04MQmO
  • 1367. 3. Maven
  • 1368.   외부라이브러리
  • 1369.   관리 안드로이드는
  • 1370.   레파지토리
  • 1371.   구축
  • 1372.   필요
  • 1373.    https://bintray.com
  • 1374. 3. Maven
  • 1375.   외부라이브러리
  • 1376.   관리 안드로이드는
  • 1377.   레파지토리
  • 1378.   구축
  • 1379.   필요
  • 1380.    http://stackoverflow.com/questions/14013644/ hosting-a-maven-repository-on-github
  • 1381. 4. 자동화
  • 1382.   빌드(Jenkins) Jenkins(
  • 1383.   http://jenkins-ci.org
  • 1384.   )
  • 1385. 4. 자동화
  • 1386.   빌드(Jenkins)
  • 1387. 4. 자동화
  • 1388.   빌드(Jenkins) 117
  • 1389. 5. 이슈트래커
  • 1390.   활용한
  • 1391.   릴리즈
  • 1392.   노트
  • 1393. ! 아키텍쳐
  • 1394.   사례
  • 1395. 
  • 1396.   
  • 1397.   
  • 1398.    Architecture
  • 1399.    Visualization
  • 1400. 높이
  • 1401.   (30000
  • 1402.   feet)봐야
  • 1403.   할까?
  • 1404. 
  • 1405.   뭐가
  • 1406.   보이시나요??
  • 1407. 자세히
  • 1408.   
 (0
  • 1409.   feet)
  • 1410.   봐야
  • 1411.   할까?
  • 1412. 제한된
  • 1413.   코드로
  • 1414.   프로젝트가
  • 1415.   
 잘되고
  • 1416.   있는지
  • 1417.   판단은?
  • 1418. 3만
  • 1419.   피트
  • 1420.   vs
  • 1421.   0
  • 1422.   피트의
  • 1423.   뷰. 3만
  • 1424.   피트
  • 1425.    • • • • 다이어그램의
  • 1426.   Line의
  • 1427.   의미는?
  • 1428.    의존성?
  • 1429.    데이터
  • 1430.   흐름?
  • 1431.    버스와
  • 1432.   같은
  • 1433.   공유자원? 0
  • 1434.   피트
  • 1435.    • 너무
  • 1436.   상세한
  • 1437.   정보임. ! • 전체적인
  • 1438.   구조를
  • 1439.   보 지
  • 1440.   못함.
  • 1441. 해결책은..
 적절한
  • 1442.   
  • 1443.   1000
  • 1444.   피트의
  • 1445.   뷰
  • 1446. STAN
  • 1447.   (Structure
  • 1448.   Analysis
  • 1449.   for
  • 1450.   Java) emo D STAN
  • 1451.   -
  • 1452.   http://stan4j.com/eclipse/eclipse-integration.html
  • 1453. Robert
  • 1454.   C.
  • 1455.   Martin의
  • 1456.   그래프
  • 1457. Instability •패키지의
  • 1458.   움직일
  • 1459.   수
  • 1460.   있는
  • 1461.   여력을
  • 1462.   판단하는
  • 1463.   지표
  • 1464.    ! •다른
  • 1465.   패키지에
  • 1466.   영향을
  • 1467.   미치지
  • 1468.   않고,
  • 1469.   
  • 1470.    
  • 1471.   해당
  • 1472.   패키지를
  • 1473.   쉽게
  • 1474.   변경
  • 1475.   할
  • 1476.   수
  • 1477.   있는가?
  • 1478.    ! •Instability
  • 1479.   I
  • 1480.   =
  • 1481.   Ce
  • 1482.   /
  • 1483.   (Ca+Ce)
  • 1484.    ! •Ce
  • 1485.   =
  • 1486.   Efferent
  • 1487.   Coupling
  • 1488.   (Ingoing
  • 1489.   Dependencies)
  • 1490.    •Ca
  • 1491.   =
  • 1492.   Afferent
  • 1493.   Coupling
  • 1494.   (Outgoing
  • 1495.   Dependencies
  • 1496.   )
  • 1497. Instability 를
  • 1498.   
  • 1499.    
  • 1500.    키지 다면 의
  • 1501.   패 고
  • 1502.   있 당신 이
  • 1503.   쓰 다. 많 가
  • 1504.    
  • 1505.   쉽지
  • 1506.   않 누군 꾸기 ! 바 Instability
  • 1507.   I
  • 1508.   =
  • 1509.   Ce
  • 1510.   /
  • 1511.   (Ca+Ce)
  • 1512.    ! 당신의
  • 1513.   패키지가
  • 1514.   다른
  • 1515.   사람이
  • 1516.   많이
  • 1517.   쓴다면,
  • 1518.   
  • 1519.    즉
  • 1520.   Outgoing,
  • 1521.   Ca가
  • 1522.   많다면,
  • 1523.   
  • 1524.   
  • 1525.   여러분의
  • 1526.   패키지는
  • 1527.   변경하기
  • 1528.   어렵다.
  • 1529.   
  • 1530.    ! 반대로
  • 1531.   Outgoing하는
  • 1532.   Ca가
  • 1533.   적고,
  • 1534.   Ingoing(다른
  • 1535.   패키지만
  • 1536.   사용만
  • 1537.   하는)
  • 1538.   
  • 1539.   Ce,
  • 1540.    여러분의
  • 1541.   패키지는
  • 1542.   쉽게
  • 1543.   변경해도
  • 1544.   된다.
  • 1545.    !
  • 1546. Abstractness Interface(Abstract)
  • 1547.   와
  • 1548.   Concrete
  • 1549.   Class를
  • 1550.   비교
  • 1551.    ! ! 
  • 1552.   A
  • 1553.   =
  • 1554.   (#abstract
  • 1555.   classes
  • 1556.   /
  • 1557.   total
  • 1558.   #
  • 1559.   of
  • 1560.   classes)
  • 1561.    ! •Abstract
  • 1562.   class
  • 1563.   =
  • 1564.   interface,
  • 1565.   abstract다
  • 1566.   포함
  • 1567.    •Total
  • 1568.   #
  • 1569.   class
  • 1570.   
  • 1571.   =
  • 1572.   abstract
  • 1573.   class
  • 1574.   +
  • 1575.   concrete
  • 1576.   class
  • 1577.    ! •0
  • 1578.   이면
  • 1579.   concrete
  • 1580.   class만
  • 1581.   있다.
  • 1582.   
  • 1583.    •1
  • 1584.   이면
  • 1585.   abstract
  • 1586.   class만
  • 1587.   있다.
  • 1588.   
  • 1589. 다시
  • 1590.   보는
  • 1591.   그래프 다른데서
  • 1592.   많이
  • 1593.   쓰는
  • 1594.   녀 석이니
  • 1595.   조금
  • 1596.   더
  • 1597.   abstract 를
  • 1598.   높여야
  • 1599.   돼!
  • 1600. 그
  • 1601.   외
  • 1602.   용어 •Tangled
  • 1603.   Complexity
  • 1604.    •순환
  • 1605.   참조가
  • 1606.   있어
  • 1607.   Boundary를
  • 1608.   깰
  • 1609.   때
  • 1610.    ! •Cyclomatic
  • 1611.   Complexity
  • 1612.    •분기
  • 1613.   문이
  • 1614.   많아
  • 1615.   hotspot이
  • 1616.   될
  • 1617.   가망성이
  • 1618.   높은
  • 1619.   곳
  • 1620. 경고!!! 환자의
  • 1621.   외부
  • 1622.   증상만
  • 1623.   
  • 1624.    고치는
  • 1625.   의사가
  • 1626.   되지
  • 1627.   말자!!
  • 1628.    ! 이러한
  • 1629.   정보는
  • 1630.   좋은
  • 1631.   가이드일뿐!!
  • 1632.    
  • 1633.   
  • 1634.    숫자에
  • 1635.   의존하다가
  • 1636.   
  • 1637.    오히려
  • 1638.   문제가
  • 1639.   보이지
  • 1640.   않게
  • 1641.   된다.
  • 1642. 사례
  • 1643.   :
  • 1644.   
  • 1645.    “HOW
  • 1646.   ABOUT”
  • 1647.   
  • 1648.   APP
  • 1649.    17
  • 1650. 이거
  • 1651.   어때
  • 1652.   ­–
  • 1653.   How
  • 1654.   About https://github.com/recomio/howabout-android
  • 1655. 두
  • 1656.   가지의
  • 1657.   스트리밍
  • 1658.   서비스를
  • 1659.   이용해
  • 1660.   음악
  • 1661.   재생.
  • 1662. 이거
  • 1663.   어때
  • 1664.   앱
  • 1665.   아키텍처 
  • 1666.   spring-android
  • 1667.   
  • 1668.    (RESTful) 
  • 1669.   ViewPagerIndicator
  • 1670.   
  • 1671.    (뷰페이저) 
  • 1672.   RoboGuice
  • 1673.   
 (인스턴스
  • 1674.   인젝션) 
  • 1675.   Jackson
  • 1676.   
  • 1677.    (JSON) ActionBarSherlock
  • 1678.   
 (액션바) 
  • 1679.   Flurry
  • 1680.   
  • 1681.    (트래픽
  • 1682.   분석) Universal
  • 1683.   Image
  • 1684.   Loader
  • 1685.   
  • 1686.    (이미지
  • 1687.   로딩) 
  • 1688.   adlibr
  • 1689.   
  • 1690.    (광고) 
  • 1691.   RoboSpice
  • 1692.   
  • 1693.    (비동기
  • 1694.   네트워킹)
  • 1695. 이거
  • 1696.   어때
  • 1697.   ­–
  • 1698.   오염도
  • 1699. 이거
  • 1700.   어때
  • 1701.   ­–
  • 1702.   Tanbled
  • 1703.   (Circular
  • 1704.   Dependency)
  • 1705. 이거
  • 1706.   어때
  • 1707.   ­–
  • 1708.   Cyclomatic
  • 1709.   Complexity
  • 1710. 이거
  • 1711.   어때
  • 1712.   ­–
  • 1713.   Distance
  • 1714. 이거
  • 1715.   어때
  • 1716.   ­–
  • 1717.   Distance
  • 1718. 이거
  • 1719.   어때
  • 1720.   ­–
  • 1721.   Logger
  • 1722.   정보
  • 1723.   부재 Lo er
  • 1724.   정 gg !!!! 보! 다!!! 
  • 1725.   수
  • 1726.   없 
  • 1727.   
  • 1728.   볼
  • 1729. 안드로이드
  • 1730.   전체
  • 1731.   앱중
  • 1732.   
  • 1733.    크래시
  • 1734.   리포트를
  • 1735.   사용하는
  • 1736.   비율 Bugsense Critticism ACRA Zubhium HockeyApp not
  • 1737.   use 90.25 6.69 2.68 0.25 0.07 0.04
  • 1738. 아키텍처
  • 1739.   개선하기 28
  • 1740. 이거
  • 1741.   어때
  • 1742.   앱
  • 1743.   아키텍처 
  • 1744.   spring-android
  • 1745.   
  • 1746.    (RESTful) 
  • 1747.   ViewPagerIndicator
  • 1748.   
  • 1749.    (뷰페이저) 
  • 1750.   RoboGuice
  • 1751.   
 (인스턴스
  • 1752.   인젝션) 
  • 1753.   Jackson
  • 1754.   
  • 1755.    (JSON) ActionBarSherlock
  • 1756.   
 (액션바) 
  • 1757.   Flurry
  • 1758.   
  • 1759.    (트래픽
  • 1760.   분석) Universal
  • 1761.   Image
  • 1762.   Loader
  • 1763.   
  • 1764.    (이미지
  • 1765.   로딩) 
  • 1766.   adlibr
  • 1767.   
  • 1768.    (광고) 
  • 1769.   RoboSpice
  • 1770.   
  • 1771.    (비동기
  • 1772.   네트워킹)
  • 1773. 외부
  • 1774.   오픈소스의
  • 1775.   변화를
  • 1776.   흡수
  • 1777.   시켜라
  • 1778. 새롭게
  • 1779.   아키텍처
  • 1780.   계층화
  • 1781.   적용
  • 1782. Facebook
  • 1783.   App의
  • 1784.   문제점과
  • 1785.   해결
  • 1786.   방법
  • 1787. Reversing
  • 1788.   하기
  • 1789.    *.java *.class dex Resources library *.apk
  • 1790. 리버싱한
  • 1791.   결과들
  • 1792. 리버싱한
  • 1793.   결과들
  • 1794. Facebook
  • 1795.   아키텍쳐
  • 1796.   -
  • 1797.   Stan4J
  • 1798. FACEBOOK
  • 1799.   아키텍쳐
  • 1800.   -
  • 1801.   STAN4J
  • 1802. Facebook
  • 1803.   아키텍쳐
  • 1804.   -오염도 순환참조 크기가 큰 Class
  • 1805. Tangled (순환 참조) 1. Package 간 의존성 증가! 2. 모듈 중 일부분 변화로 인하여 전체적인 영향을 미칠 수 있음 1. 새로운 Pacakge 생성! 2. Interface 를 통한 변화 상쇄
  • 1806. Distance Over Engineering 인프라성 Code Element 추상화 정도 (Interface 의 사용)
  • 1807. Facebook 외부 라이브러리
  • 1808. Facebook 외부 라이브러리 • Jackson! ! • Jayway/JsonPath (JSON)
 • json-simple(JSON)
 • Google Inject
 • ACRA ! ! • FindBugs

  • 1809. Facebook 외부 라이브러리 참조구조 ORCA Jackson Jayway/jsonpath KATANA Json-simple Google-inject acra Findbugs
  • 1810. 개선점 선정 • 새로운 Package 생성을 통하여 순환참조 해결! ! • 중복된 외부 라이브러리 통합 (Wrapper Class 생성)! ! • 패키지 간의 의존성을 낮추기 위한 Interface 생성!
  • 1811. 외부 라이브러리 Wrapping Framework Marshaller/
 Unmarshaller Jackson Jayway/jsonpath Json-simple BugCrash/
 Report acra findbugs I.o.C Google-inject
  • 1812. 기존 C&C View
  • 1813. 개선된 C&C View
  • 1814. 감사합니다.
  • 1815. Q&A