본문으로 바로가기

Android studio Flamingo

category 개발이야기/Android 2023. 4. 15. 16:14
반응형

안드로이드 스튜디오의 플라밍고 기능이 정식으로 릴리즈 되었습니다. 사실 요새는 버전이 올라갈때마다 사용성이 급격하게 좋아짐을 느끼는데, 이번에는 network inspector가 어마어마 하게 좋아진것 같습니다. (이전버전에도 그랬는지 모르겠지만 거의 안쓰더 기능이라..)

Android studio는 버전이 올라가면 그냥 그런가 보다..하고 쓰기 마련인데, Network Inspector를 얘기하기 위해서 간략하게 추가된 기능들을 보겠습니다.

그전에 이번 버전은 IntelliJ 2022.2.1 platform이 적용되었다고 합니다. 일단 사용성이 올라감은 물론이고 알게 모르게 코딩이 편해지는 사용성이 향상될것으로 기대합니다. (현재 2023.1까지 나와 있는데, 1년전 platform을 넣었네요.)

UI 관련 기능

사실 여기서 의외로 크게 와닿는 기능은 없습니다.

Jetpack compose에서 Meterial 3를 default로 사용

  • 기본적인 theme이 meterial3로 가는건 좋기는 한데, 기본 theme 보다는 custom하게 많이 쓰기 때문에....네 그렇다고 합니다.
  • wallpaper를 적용하여 바로 색상이 변경되는것을 compose preview에서 확인할 수 있다고 합니다. 

Live Edit로 실시간 단말 변경점 확인

기존 Dolphin부터 Layout Inspectorrecompose에 대한 성능을 보는것에 진심인것 같았는데, Compose 관련된 부분은 이번 버전에서는 약간 힘을 뺀듯한 모양세 입니다. 실제로는 매우 큰 기능이 들어오긴 한건데 experimental이라 제약점들이 꽤 많아 보입니다.[2]

  • 장점
    • 에뮬레이터나 실제 연결된 단말의 화면이 빌드없이 실시간 업데이트 된다.
    • Preview에서 보는 화면과 실제 단말 화면이 동시에 변경된다.
    • 기존에는 text의 변경정도만 적용되었지만 modifier의 수정이나, 새로운 composable의 추가 (e.g. Surface로 감싸거나, LazyColumn을 넣거나..)도 실시간으로 확인된다.
  • 그외
    • 코드 편집기 상단에 Live data의 build 상태를 나타내는 indicator가 생기고 빌드 상태를 보여준다
    • 코드가 완성되어야 화면에 그려진다. (컴파일이 되지 않는 코드 작성중에는 화면이 업데이트 되지 않음

  • 제약사항
    • SDK 30 이상인 단말에서만 사용 가능
    • composable 외부에서 발생하는 것들에 대한 수정이 반영되지 않음. (recompose도 안됨)
      • composable의 param이 변경되거나 그외 외부에서 변경되는 사항은 (navigator로 화면을 이동한다거나..)앱을 재시작 해야함.
      • 복잡한 화면에서는 시간이 걸릴수 있음.

아직은 제약사항이 많아 보입니다만, 다음버전에서는 좋아질듯 하네요. (참고로 하기 옵션을 켜야 합니다.)

Build 관련 기능

  • Builde Analyzer task categorization 변경[3]
  • lint에서 SDK extension도 검사 가능
  • 모듈 별로 R 파일이 분리됨 (import가 변경되어야 할수도 있음)

Compose tracing 가능

하기 종속성을 추가하고 compiler 130 이상을 사용하면 App Profiler -> System Trace 에서 각 composable을 그리는데 걸리는 시간와 시점을 확인할 수 있습니다.

dependencies {
    implementation("androidx.compose.runtime:runtime-tracing:1.0.0-alpha03")
}

Android Gradle Plugin 8.0.0 사용

기본적으로 쓰지않는 build feature들의 기본값이 disable 되었습니다.

android {
    buildFeatures {
        // AGP 8.0 이후부터의 기본값은 전부 false임
        buildConfig = false
        renderScript = false
        aidl = false
    }
 }

따라서 위 옵션들을 사용하려면 직접 true로 변경해 줘야 합니다.

또한 AGP 8.0을 사용하기 위해서는 JDK 17이 필요하며 Android studio에서 기본적으로 탑재됩니다. (필요한 경우 탑재한 버전을 사용하면 됩니다.)

Namespace의 선언 위치 변경

namespace의 선언 위치가 AndroidManifest -> build.gradle 파일로 이동되었습니다.

//기존 - AndroidManifest.xml
<manifest package="com.mytest.newtest">

//변경 - build.gradle(.kts)
android {
    namespace = "com.mytest.newtest"
}

manifest에서는 package를 빼면 됩니다.

Inspect 기능

  • Profile을 보기위한 실행 버튼 상단에 배치
  • Layout Inspector에서 foreground process를 자동 연결
    • 기존에는 수동으로 process를 선택해줘야 했으며, 만약 자동으로 안될경우 여전히 수동으로 연결해야 한다고 함

Network Inspector

"이제 나에겐 pcap 캡쳐는 더이상 없다!!" 라고 말할수 있는 부분입니다. 뭐 때에 따라선 pcap과 wireshark가 있어야 할지도 모르겠지만 대체하는 수준을 떠나서 훨씬더 좋아진듯한 부분 입니다.

App Inspection -> Network Inspector를 통해서 접근이 가능합니다.[4] 다만 HttpUrlConnection과 okHttp만 지원합니다.

네트워크가 연결되고 송수신이 일어나면 위와 같은 그래프가 생깁니다. (파란색은 수신, 노란색은 송신을 나타냅니다.

이때 정상적이라면 Connection View에 접속한 주소(https://xxx), 호출한 api명, get/post 방식, port번호등이 표시됩니다. 

출처:&nbsp;https://developer.android.com/static/studio/images/debug/network-profiler.png?hl=ko

접속기록을 클릭하면 ovewview와 함께 request / response 역시 확인할 수 있습니다. retrofit을 이용하는 앱의 경우 내부적으로 okttp를 사용하므로 RestFul로 주고받은 내역역시 쉽게 확인할 수 있습니다.

또한 Rules을 통하여 트래픽을 변작할수 있습니다.

Rule을 추가한 이후에 url / path / method 정보를 입력합니다. 저는 Body의 정보중에 "감자" -> "고구마"로 바꿨습니다. 따라 해당 API를 호출하여 결과에 "감자"라는 단어가 포함된 경우 실제 단말에는 고구마로 보이게 됩니다. 여기서는 단어를 치환했지만 아예 응답 json 통째로 변경하거나, rule을 여러개 추가하는것도 가능합니다. 

References

[1] https://www.youtube.com/watch?v=41VZhwrXAKI

[2] https://www.youtube.com/watch?v=FZPObrAIC6w

[3] https://android-developers.googleblog.com/2023/04/android-studio-flamingo-is-stable.html

[4] https://developer.android.com/studio/debug/network-profiler?hl=ko

반응형