Android 운영체제는 광범위한 기기와 폼 팩터에서 원활히 실행되는 앱을 빌드하기 위한 강력한 기반을 제공합니다. 하지만 개발자들은 복잡한 수명 주기 및 권장 앱 아키텍처 결여와 같은 문제로 인해 강력한 앱을 작성하기가 어렵다는 의견을 피력해왔습니다.

그래서 우리는 강력한 앱을 더욱 쉽고 재미있게 작성할 수 있게 만들어 개발자가 혁신을 꾀할 수 있는 영역에 집중하도록 뒷받침해야 합니다. 오늘 우리는 아키텍처 컴포넌트 프리뷰와 함께 Android 앱 아키텍처에 대한 가이드를 발표하려고 합니다. 우리는 쓸데없이 시간을 낭비하는 대신 인기 있는 Android 라이브러리를 통해 이룬 성과를 인정하고 있습니다.


처방이 아닌 의견

우리는 Android 애플리케이션을 작성할 수 있는 방법이 한 가지가 아니라는 점을 잘 알고 있습니다.  우리가 제공하는 것은 Android의 독특한 상호 작용 방식과 가장 잘 연동되는 Android 애플리케이션의 설계에 도움이 될 수 있는 일련의 지침입니다. Android 프레임워크에는 액티비티와 같이 OS와의 연결 지점을 처리하는 잘 정의된 API가 있지만, 이러한 API는 개발자 애플리케이션의 진입점일 뿐, 애플리케이션 아키텍처를 이루는 기본 구성 요소는 아닙니다. 프레임워크 구성 요소는 데이터 모델을 UI 구성 요소에서 분리하도록 강제하지 않으며, 수명 주기와 상관없이 데이터를 유지할 수 있는 명확한 방법을 제공합니다.

기본 구성 요소

Android 아키텍처 컴포넌트는 온전한 앱 아키텍처를 구현하기 위해 함께 작동하는 동시에, 개발자가 겪는 문제점을 개별적으로 해결해주기도 합니다. 최초로 제공되는 이러한 구성 요소들을 사용하면 다음과 같은 이점이 있습니다.
  • 액티비티와 프래그먼트의 생명주기를 자동으로 관리하여 메모리 및 리소스 누수 방지
  • SQLite 데이터베이스에 자바 데이터 객체 유지

Lifecycle Components

새로운 Lifecycle-aware 컴포넌트는 애플리케이션의 핵심 구성 요소를 수명 주기 이벤트에 연결하는 구성체를 제공하므로 명시적인 종속성 경로를 제거해 줍니다.

일반적인 Android 관찰 모델은 onStart()에서 관찰을 시작하고 onStop()에서 관찰을 중지합니다.  이는 아주 간단한 얘기로 들리지만, 한 번에 여러 개의 비동기 호출이 수행되는 경우가 종종 있으며, 이러한 비동기 호출은 모두 구성 요소의 수명 주기를 관리하는 작업을 담당합니다.  그래서 경계 조건을 놓치기에 십상입니다.  따라서 Lifecycle Components가 도움이 될 수 있습니다.

Lifecycle, LifecycleOwnerLifecycleObserver

이 모든 구성 요소의 핵심 클래스는 Lifecycle입니다. 이 클래스는 수명 주기 이벤트의 열거형과 함께 현재 수명 주기 상태의 열거형을 사용하여 관련 구성 요소에 대한 수명 주기 상태를 추적합니다.
수명 주기 상태 및 이벤트

LifecycleOwnergetLifecycle() 메서드에서 Lifecycle 객체를 반환하는 인터페이스인 반면, LifecycleObserver는 해당 메서드에 주석을 추가함으로써 구성 요소의 수명 주기 이벤트를 모니터링할 수 있는 클래스입니다. 이를 모두 결합하면 수명 주기 이벤트를 모니터링하고 현재 수명 주기 상태를 쿼리할 수 있는 Lifecycle-aware 컴포넌츠를 생성할 수 있습니다.
public class MyObserver implements LifecycleObserver {
  public MyObserver(Lifecycle lifecycle) {
    // Starts lifecycle observation
    lifecycle.addObserver(this);
   ...
  }
  public void startFragmentTransaction() {
     // Queries lifecycle state
     if (lifecycle.getState.isAtLeast(STARTED)) {
        // perform transaction
     }
  }
  
  // Annotated methods called when the associated lifecycle goes through these events
  @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
  public void onResume() {
  }
  @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
  public void onPause() {
  }
}
MyObserver observer = new MyObserver(aLifecycleOwner.getLifecycle());

LiveData

LiveData는 식별 가능한 수명 주기 인식 데이터 홀더 클래스입니다. UI 코드는 LifecycleOwner와 연결된 기본 데이터의 변경 사항을 구독하고 LiveData는 다음 사항을 확인합니다.
  • 수명 주기가 활성 상태(STARTED 또는 RESUMED)인 동안 관찰자가 데이터에 대한 업데이트를 가져옴
  • LifecycleOwner가 제거될 때 관찰자가 제거됨
  • LifecycleOwner가 구성 변경으로 인해 다시 시작되거나 백 스택에서 다시 시작되는 경우 관찰자가 최신 데이터를 가져옴

이는 메모리 누수를 일으키는 많은 경로를 제거하는 데 도움이 되고 중지된 액티비티에 대한 업데이트를 방지함으로써 충돌을 줄여 줍니다.

LiveData는 Fragment 또는 Activity와 같은 수명 주기 소유자와 연결된 많은 리스너에 의해 관찰될 수 있습니다.

ViewModel

ViewModel은 Activity 또는 Fragment에 대한 UI 데이터를 포함하는 도우미 클래스이며, UI 컨트롤러 로직과 데이터 보기 소유권을 분리하는 역할을 합니다. ViewModel은 구성 변경으로 인해 Activity/Fragment가 제거되고 다시 생성되는 경우를 포함하여 해당 Activity/Fragment의 범위가 활성 상태인 동안 유지됩니다. 이를 통해 ViewModel은 다시 생성된 활동 또는 프래그먼트 인스턴스에서 UI 데이터를 사용 가능하도록 할 수 있습니다. LiveData를 사용하여 ViewModel 내에 저장된 UI 데이터를 래핑하면 데이터가 인식 가능한 수명 주기 인식 홈에 제공됩니다. LiveData는 알림과 관련된 사항을 처리하는 반면, ViewModel은 데이터가 적절하게 유지되도록 합니다.

데이터 지속성(Persistence)

Android 아키텍처 컴포넌트는 Room 라이브러리를 사용하여 데이터 지속성을 단순화하기도 합니다. Room은 SQLite를 완벽히 활용하면서 원활한 데이터베이스 액세스를 지원하는 객체 매핑 추상화 계층(object-mapping abstraction layer)을 제공합니다.

핵심 프레임워크는 원시 SQL 콘텐츠 작업을 위한 내장형 지원 기능을 제공합니다. 이러한 API는 강력하기는 하지만 상당히 낮은 수준이므로 사용하는 데 상당한 시간과 노력이 필요합니다.
  • 원시 SQL 쿼리에 대해서는 컴파일 시간 검증 작업이 수행되지 않습니다.
  • 스키마가 바뀜에 따라 영향을 받는 SQL 쿼리를 수동으로 업데이트할 필요가 있습니다. 이 과정은 시간이 오래 걸리고 오류가 발생하기 쉬울 수 있습니다.
  • SQL 쿼리와 자바 데이터 객체 간에 변환하려면 상당량의 상용구 코드를 작성해야 합니다.

Room은 SQLite를 통해 추상화 계층을 제공하는 동시에 이러한 문제도 해결해 줍니다.

데이터베이스, 엔터티 및 DAO

Room에는 다음과 같은 세 가지 주요 구성 요소가 있습니다.
  • 엔터티 - 단일 데이터베이스 행에 대한 데이터를 나타내며, 주석이 추가된 자바 데이터 객체를 사용하여 생성됩니다. 엔터티는 각각 자체적인 테이블에 유지됩니다.
  • DAO(데이터 액세스 객체) - 데이터베이스에 액세스하는 메서드를 정의하며 주석을 사용하여 SQL을 각 메서드에 연결합니다.
  • 데이터베이스 - 주석을 사용하여 엔터티 및 데이터베이스 버전의 목록을 정의하는 홀더 클래스입니다. 이 클래스 콘텐츠는 DAO의 목록을 정의합니다. 또한, 기본 데이터베이스 연결을 위한 기본 액세스 지점이기도 합니다.

Room을 사용하려면 엔터티로 유지할 자바 데이터 객체에 주석을 지정하고 이러한 엔터티를 포함하는 데이터베이스를 생성한 후, 데이터베이스를 액세스 및 수정하기 위한 SQL로 DAO 클래스를 정의하세요.
@Entity
public class User {
    @PrimaryKey
    private int uid;
    private String name;
    // Getters and Setters - required for Room
    public int getUid() { return uid; }
    public String getName() { return name; }
    public void setUid(int uid) { this.uid = uid; }
    public void setName(String name) { this.name = name; }
}

@Dao
public interface UserDao {
    @Query("SELECT * FROM user")
    List getAll();
    @Insert
    void insertAll(User... users);
}

@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}

앱 아키텍처에 대한 가이드

아키텍처 컴포넌트는 독립 실행형으로 설계되었지만, 효과적인 앱 아키텍처에 통합되는 경우 가장 효과적입니다. 오늘 우리는 아키텍처 컴포넌트를 사용하여 강력하고 테스트 가능한 모듈식 앱의 빌드 방법을 보여 주는 앱 아키텍처에 대한 가이드를 발표하고자 합니다. 이 가이드의 주요 목표는 다음 세 가지입니다.
  •  Android 앱 개발에 적용되는 원칙 정의 
  • 이러한 원칙에 부합하는 앱 아키텍처 설명 
  • 아키텍처 컴포넌트를 사용하여 아키텍처를 구현하는 방법 소개 

이러한 문제로 고군분투했던 모든 개발자들은 이 가이드를 읽어볼 것을 권장합니다. 기존 앱 아키텍처에 만족하고 있더라도 이 가이드에서 유용한 원칙과 통찰력 있는 정보를 확인할 수 있을 것입니다.

시작에 불과합니다.

우리는 앞으로도 계속해서 뚝심을 가지고 Android 개발자가 애플리케이션을 설계할 때 더욱 손쉽게 정확한 선택을 할 수 있도록 새로운 아키텍처 컴포넌트를 내놓을 계획입니다. 우리는 모두 강력한 Android 앱 개발 작업을 더욱 쉽고 재미있게 만들기 위해 함께 노력하고 있으므로, 이 프리뷰를 사용해 보시고 활발하게 피드백해주시면 고맙겠습니다.

Android 아키텍처에 대한 자세한 내용은 다음에서 확인할 수 있습니다.


Firebase 성능이 제공하는 다른 기능은 네트워크 활동을 모니터링하는 것입니다. 앱이 수행하는 HTTP/S 요청은 요청이 전송된 시점부터 응답이 수신되는 시점까지 자동으로 모니터링됩니다. 각 URL 패턴에 대해 개발자 여러분은 응답 시간, 페이로드 크기 및 성공률을 확인할 수 있습니다.


오류가 발생하면 이를 일으킨 400 또는 500 응답 코드에 대한 분석 정보도 볼 수 있습니다.



추적 및 네트워크에 대해 수집된 모든 지표는 국가, 기기, 앱 버전 및 OS 버전별로 분류될 수 있습니다. 따라서 문제의 원인을 좁혀서 더욱 손쉽게 문제를 해결할 수 있습니다.



Firebase 성능 모니터링이 이제 베타 버전으로 제공됩니다. 자세한 내용을 보려면 여기에 나와 있는 문서를 확인하거나 I/O 세션을 시청하여 더 자세히 알아보시기 바랍니다.




이러한 작업을 마치고 나면 콘솔에서 바로 이러한 매개변수의 요약 정보가 보이기 시작할 것입니다. 숫자 값에 대해서는 합계와 평균이 표시되고, 문자열에 대해서는 가장 인기 있는 값 목록이 표시됩니다.

Firebase용 Google 애널리틱스에서 사용할 수 있는 다른 분석 보고서와 마찬가지로, 사용자 속성 또는 대상을 기준으로 이러한 보고서를 필터링하여 다양한 사용자가 다양한 방식으로 앱과 어떤 식으로 상호 작용하는지를 더욱 효과적으로 파악할 수 있습니다.

현재로서는 요약 보고서를 생성하고 싶은 이벤트 매개변수를 최대 50개까지 지정할 수 있습니다.

BigQuery의 무료 저장소 계층

물론, 상당수의 사용자설정 이벤트 매개변수를 분석하거나 Firebase 콘솔에서 가능한 수준보다 더욱 정교한 분석 작업을 수행하고자 하는 경우 Google 애널리틱스 데이터를 클라우드 환경의 Google 데이터 웨어하우스인 BigQuery로 바로 내보낼 수 있습니다. BigQuery의 데이터 분석 기능은 데이터에 대한 모든 종류의 임시 쿼리 또는 사용자설정 분석을 실행할 수 있는 아주 강력한 방식이므로, 모든 개발자가 이 기능을 사용해 볼 것을 권장합니다.

작업 진행에 도움을 주기 위해 이제 BigQuery에 무료 저장소 계층이 추가되었습니다. 이 무료 저장소 계층은 Firebase용 Google 애널리틱스를 사용하는 모든 프로젝트에 사용할 수 있으며 정확히 10GB의 데이터를 저장할 수 있습니다. BigQuery에서 매달 제공되는 1TB의 무료 쿼리 사용량과 이 무료 저장소 계층을 함께 사용하세요. 그러면 상대적으로 적은 비용으로 상당히 많은 BigQuery 분석 작업을 수행할 수 있습니다. Data Studio에 새로 추가된 분석 보고서 템플릿을 사용하면 사용자설정 매개변수(또는 BigQuery에서 측정할 수 있는 기타 항목)에 대한 멋진 보고서를 아주 쉽게 작성할 수 있습니다.

Firebase 및 AdMob

우리는 Firebase 및 AdMob이 서로 통신하는 방식과 관련하여 몇 가지 주요 기능을 대폭 개선했습니다. 우유와 쿠키의 조합처럼1, Firebase와 AdMob을 함께 사용하면 두 제품의 강점을 보완하는 흥미로운 새로운 조합이 탄생합니다!

AdMob 계정을 Firebase에 연결하면 앱이 다른 분석 이벤트와 같이 (조정된 광고 단위와 함께) AdMob과 연결된 분석 이벤트를 자동으로 기록합니다. 이에 따라 Firebase용 Google 애널리틱스는 화면, 광고 형식 또는 광고 단위와 같은 중요한 특징을 기준으로 분류되는 광고 효과, 클릭 수, 노출 시간에 대한 보고서를 작성할 수 있습니다. 따라서 이전에 비해 어떤 광고가 앱에서 가장 효과적인지, 가장 많은 광고 수익을 내는 곳은 어디인지, 사용자가 가장 많은 시간 동안 보는 광고는 무엇인지를 더욱 쉽게 확인할 수 있게 됩니다.

AdMob 계정과 Firebase 계정을 함께 연결하면 앱에서 수익을 창출하는 부분이 어딘지 더욱 완벽하게 파악할 수도 있습니다. 대시보드상의 APRU 보고서와 Attribution 보고서의 Lifetime Value 지표 모두에 이제 AdMob 광고와 인앱 구매에서 창출되는 수익이 포함됩니다.

이는 수익 관점에서 앱의 성과가 어떤지 훨씬 더 완벽하게 파악하고 어떠한 성장 캠페인으로 더 많은 수익을 창출시켜 주는 사용자를 끌어오는지 더 정확하게 측정하는 데 도움이 될 수 있습니다.

자동 화면 추적

저처럼 한가한 시간에 최신 Firebase 릴리스 노트를 읽어보는 분이라면 몇 달 전에 Firebase가 기록하는 이벤트에 대한 화면 추적 지원 기능 추가 작업을 시작했다는 사실을 알고 계셨을 겁니다. 이번 달에는 사용자들이 가장 오랜 시간을 보내는 세 가지 화면을 보여드림으로써 Firebase용 Google 애널리틱스에 화면 추적 보고서를 추가하는 첫 과정들을 진행할 예정입니다. Firebase 대시보드의 User Engagement 섹션에서 이 정보를 찾을 수 있습니다.



화면 추적 보고 기능은 화면이 전환될 때마다 screen_view 이벤트를 자동으로 기록함으로써 자동으로 작동합니다. 그런 다음 이러한 이벤트가 서버에서 결합되어 앱 전체에서 사용자가 수행하는 작업에 대한 더욱 완벽한 그림을 그리게 됩니다. 다른 이벤트와 마찬가지로, StreamView 또는 DebugView에서 이런 이벤트를 보거나 BigQuery를 통해 분석할 수 있습니다. 예를 들어, 동일한 ViewController 내에서 여러 "화면"을 모두 구성한 게임 개발자와 같이 이러한 이벤트를 사용자설정하려는 경우 클라이언트에서 이러한 이벤트를 수동으로 설정하는 방법으로 이 작업을 수행할 수 있습니다.

추가 귀인 파트너!

귀인 추적(attribution tracking)에 이미 Firebase용 Google 애널리틱스를 사용할 수 있게 되어 있습니다. 이 기능은 어떤 광고 네트워크에서 사용자를 보내주고 있는지 뿐만 아니라, 어떤 광고 네트워크에서 개발자 자신이 가장 관심을 두고 있는 소중한 사용자를 보내주고 있는지를 파악하는 데도 도움이 됩니다. 그리고 DoubleClick Campaign Manager 및 Bid Manager에 대한 귀인 추적 기능을 포함하는 DoubleClick Digital Marketing과 새롭게 통합되었다는 점도 기쁜 마음으로 알려드립니다. Google이 시스템에 통합해온 50개 이상의 타사 광고 네트워크(계속 증가하는 중임!)에 이를 추가하세요. 그러면 Firebase가 진정한 네트워크 간 귀인 데이터를 사용하여 광고 비용의 지출처에 대해 더 나은 결정을 내리는 데 도움이 될 수 있습니다.

이름은 새로 바뀌었어도 전과 똑같이 훌륭한 제품

앞으로 모든 모바일 앱에 대해 Google에서 자신 있게 추천하는 앱 분석 솔루션이라는 점을 확실히 하기 위해, Firebase Analytics라는 브랜드를 Firebase용 Google 애널리틱스로 새롭게 단장할 것입니다. 하지만 개발자로서는 모든 분석 데이터의 생성에 Firebase Analytics SDK와 해당 이벤트 기반 모델을 계속 그대로 사용할 수 있습니다.
기존 앱에 이전의 Google Analytics Services SDK를 사용하고 있더라도 걱정하지 마세요. 달라질 건 없습니다. 하지만 향후 릴리스에는 Firebase SDK를 추가해 보시기 바랍니다. Firebase SDK를 사용하면 Firebase용 Google 애널리틱스의 최신 보고서와 새롭게 제공되는 기능을 이용할 수 있게 됩니다. 오랫동안 Google Analytics를 사용해왔다면 Google Tag Manager를 사용하여 이벤트 데이터를 이러한 보고서로 자동 전송할 수도 있습니다. 이 주제에 대한 도움이 더 필요하신 분은 몇 달 전에 앱에서 이런 분석 라이브러리가 함께 작동하도록 하는 방법에 대한 몇 가지 전략을 다룬 블로그 게시물이 있으므로 해당 내용을 확인해 보세요!

지금 바로 사용해 보세요!

Firebase용 Google 애널리틱스에 이처럼 향상된 기능을 제공하게 되어 무척 흥분됩니다. 이런 향상된 기능에 대해서는 "Google Analytics를 사용 중인 앱에 Firebase Analytics를 어떻게 추가하나요?"에 이미 자세히 설명해두었으니 언제든 확인하실 수 있습니다. (예제는 데모 프로젝트 참조!). 아직 애널리틱스를 제품에 추가하지 않은 경우 시작하려면 여기에서 필요한 모든 설명서를 찾을 수 있습니다. 시험 사용해 보시고 여러분의 의견을 들려주세요!


이 대시보드는 신규 구독자 수, 취소 횟수 및 총 구독자 수와 같은 구독 데이터를 취합하여 보여 줍니다. 또한, 일일 및 30일 연속 수익 데이터를 표시하고 실적이 가장 높은 제품도 보여 줍니다. 이를 통해 구독 제품 및 사용자에 대한 정보를 파악할 수 있으며 비즈니스 의사 결정을 내리는 데 도움을 받을 수 있습니다.

구독 비즈니스 성장에 도움이 되는 정보 파악 능력

제품 및 기능과 더불어, 사람들의 요구 사항을 파악하는 것이 성공적인 구독 비즈니스 구축에 있어 핵심입니다. 우리는 미국과 영국에 사는 2,000명의 Android 앱 구독자에게 앱을 사용하는 방식과 이유를 물었습니다. 'Google Play의 구독 앱: 개발자의 성공에 도움이 되는 사용자 정보' 보고서에 나와 있는 결과는 다음을 포함하여, 개발자가 구독 사용자 기반을 넓히고 가격 전략을 수립하며 사용자 참여를 유지하는 방법을 배울 수 있는 몇 가지 기회를 중점적으로 보여 줍니다.
  • 무료 평가판을 사용하여 사용자를 확보합니다. 사용자 중 78%가 무료 앱 버전으로 시작하며, 많은 사용자가 결제 이유로 무료 평가판 종료나 할인을 언급하고 있습니다.
  • 콘텐츠의 매력과 최신 업데이트를 유지하여 사용자가 지갑을 열게 하고 계속 결제하게 합니다. 이는 무료 버전 사용자를 유료 사용자로 전환하고 사용자 참여율 및 점유율 유지에 가장 중요한 요인으로 작용합니다.
  • 구독을 통해 수익을 창출할 수 있는 커다란 기회가 있습니다. 앱의 성격에 따라 사용자가 지불하고자 하는 전체 금액에는 차이가 있을 수 있지만, 유료 구독에서 탈퇴하는 이유로 가격을 언급한 사용자는 소수였으며, 64%의 사용자들이 앱 단위로 구독에 사용할 예산을 구분하거나, 아니면 구독기능을 사용하는데 사용할 최대 예산을 아예 책정하지 않고 있었습니다. (모든 앱 구독을 하나로 묶어 최대 예산을 책정한다고 응답한 사용자는 16%에 불과했습니다).
Google Play에서 구독 비즈니스를 성장시키는 방법에 대한 자세한 내용을 알아보려면 Google I/O 세션을 시청하고, 연구 보고서(PDF)를 다운로드하고, Google Play 인앱 결제를 사용하여 구독을 시작해 보세요.


Google Play의 App Excellence Program에서는 지난 2월부터 진행된 교육 주제와 관련한 피쳐들을 적용 및 실행하여 성과를 달성하신 파트너 중 5개의 앰배서더 파트너를 선정하게 되었습니다.

1차 앰배서더 파트너 선정을 진심으로 축하드리며, 앰배서더 파트너로 선정되신 개발사에는 향후 다양한 지원 혜택이 주어질 예정입니다.

<제 1차 앰배서더 파트너>

  • Yea Studio: ColorFil - 당신을 위한 컬러링북
    • ColorFil 컬러필은 전세계 180개국에서 사용을 하고 있습니다.
    • 당신을 위한 색칠놀이 어플리케이션입니다. 아름다운 색깔로 당신의 그림을 완성해 보세요. 
    • 오직 당신만의 색으로 그림을 채우세요. 새로운 작품이 매일 업데이트 됩니다.
  • TENQUBE Inc: QLIP - 비주얼가계부
    • 알아서 정리해주는 가계부 - 클립(QLIP)
    • 상황에 따라 변하는 비주얼 가계부, 예산을 이용한 효과적인 지출 관리, 생활패턴 분석
    • 구글캘린더 및 필요 권한 정보와의 쉬운 연동
  • PLUSBETA: STORE Camera for product photo
    • “제품 촬영” 전문 카메라앱
    • 스토어카메라는 오직 "제품사진" 촬영 및 편집을 위해 개발되었습니다.
    • 이제 고급카메라와 전문 보정프로그램 없이 효율적으로 제품 촬영을 하실 수 있습니다.
  • Delight Room: 알라미(Alarmy) - Sleep If U Can
    • Cnet등 해외유력 외신에서 인정한 깰수밖에 없는 "악마의 알람시계"
    • 프랑스, 독일, 홍콩 등 80개국 앱스토어 카테고리 전체 1위
    • 알람을 끄려면 지정된곳에 가서 지정된 사진을 찍어야 합니다 (사진모드)
    • 지정된 횟수만큼 흔들어야 알람이 꺼지는 "흔들기 모드", 수학문제를 풀어야 알람이 꺼지는 "수학문제 모드"도 제공합니다.
  • Mathpresso: 콴다 - 수학/과학 문제 풀어주는 앱
    • 콴다 하나면 수학 과학뿐만 아니라 영어 사회 국어 어떤 문제든 실시간으로! 
    • SKY 선생님에게! 이해될 때까지! 
    • 질문하고 평균 13분 만에 문제풀이 답변을 받을 수 있습니다!


통계

[업데이트] 이제 앱 통계 페이지에서 비즈니스에 관한 주요 데이터에 더욱 유연하고 빠르게 접근할 수 있습니다. 두 가지의 다른 측정항목을 비교하고 측정기준별로 분석해 보세요. 원하는 기간을 선택하고, 데이터 분석을 확인하고, 시간별 통계도 확인할 수도 있습니다.

Android vitals

[신규] 앱의 Android vitals를 이해하여 앱 내의 비효율적인 동작을 수정하고 앱 환경을 개선하며 평점을 높일 수 있습니다. 데이터 수집에 동의한 사용자의 기기에서 집계된 익명 기기 데이터를 확보하여 앱 성능의 3가지 중요한 측면을 이해할 수 있습니다. 안정성(비정상 종료 비율 및 앱 응답 없음[ANR] 비율), 배터리 사용량(wake lock 상태에서 멈춤 및 불필요한 wakeup) 및 렌더링 시간(느린 렌더링 및 정지된 UI 프레임)입니다. Android vitals 자세히 알아보기

[업데이트] ANR 및 비정상 종료 페이지 또한 더 넓은 범위의 비정상 종료를 다루도록 업데이트되어 더 많은 데이터를 활용할 수 있게 되었습니다.

출시 관리

[신규] 새로운 출시 대시보드를 사용하여 출시 진행 상태를 추적할 수 있습니다. 출시된 버전이 중요한 측정항목에 어떤 영향을 미치는지 모니터링하여 계획이 정상적으로 진행되는지 확인할 수 있으며, 문제가 발생하는 경우 신속히 출시를 중단할 수 있습니다.

[신규] Google Play에서 앱을 게시할 때 사용하는 것과 같은 익숙한 출시 관리 절차를 통해 안드로이드 인스턴트 앱을 게시할 수 있습니다. 개발 트랙을 활용해 반복적인 개발 과정을 진행하고, 사전 출시 트랙에서 신뢰할 수 있는 테스터로부터 의견을 수집한 다음, 준비가 되면 프로덕션 채널로 인스턴트 앱을 출시할 수 있습니다. 안드로이드  인스턴트 앱 시작하기

[신규] 새로운 기기 카탈로그를 사용하여 다양한 기기에서 뛰어난 사용자 환경을 제공할 수 있습니다. 구글에서 인증한 수천 대의 기기에서 수집된 풍부한 기기 데이터를 검색하고 필터링해 보세요. 카탈로그에서 설치 수, 평점, 기여 수익을 기기 유형별로 확인하여 의사결정에 도움을 받을 수도 있습니다. 이제 RAM 및 단일 칩 시스템과 같은 성능 지표별로 기기 제외 규칙을 설정할 수도 있습니다. 더욱 세밀한 컨트롤을 통해 제외되는 기기의 수를 줄이고, 앱이 지원하는 모든 기기에 최상의 환경을 제공하세요. 기기 카탈로그 자세히 알아보기

[신규] 앱 서명 키처럼 중요한 것에는 단 하나의 오류도 없어야 합니다. Play Console의 새로운 앱 서명 기능을 사용하면, 앱 서명에 사용되는 키를 구글에서 관리하도록 맡길 수 있습니다. 업계를 선도하는 구글의 보안 역량을 활용할 수 있으며, 원하는 경우 APK 크기에 맞는 앱 최적화와 같은 출시 예정인 보조 서비스를 사용할 수 있습니다. 이 서비스를 선택하면 Play 스토어에서 각 대상 기기 유형의 화면 밀도 및 기본 아키텍처에 최적화된 APK 버전을 제공하여 사용자가 데이터와 기기 저장용량을 절약하도록 도울 수 있습니다. 앱 서명 자세히 알아보기

[업데이트] Firebase Test Lab에서 제공하는 사전 출시 보고서에서는 실험실에 있는 실제 기기에서 진행된 알파/베타 앱 테스트 결과를 확인할 수 있습니다. 이를 통해 출시 전에 문제를 발견하고 해결하여 문제가 평점에 영향을 미치지 않도록 방지할 수 있습니다. 업데이트된 보고서에서는 안드로이드 O 기기를 비롯한 더 많은 기기에서 테스트를 지원하며, 사용자 인증 정보를 제공하여 로그인 절차 후에도 앱을 테스트하는 기능과 같이 새로운 컨트롤을 사용할 수 있습니다.

사용자 획득

[신규] 획득 보고서를 통해 스토어 등록정보 방문자가 어디에서 유입되는지, 그리고 이들이 앱을 설치하고 인앱 상품을 구매하는지 확인할 수 있습니다. 또한 보고서에 유지된 설치 사용자 데이터가 추가되었습니다. 이를 통해 앱을 설치한 후 최대 30일 동안 삭제하지 않은 소중한 사용자가 어떤 채널 및 지역에서 유입되었는지 확인하여 마케팅 전략을 최적화할 수 있습니다.

재무 보고서

[신규] Google Play에서 가장 빠르게 성장하는 비즈니스는 구독 서비스입니다. 작년 한 해 동안 활성 구독자 수가 2배 증가했습니다. 구독 대시보드를 통해 구독 실적을 확인하고, 더 나은 의사결정을 내려 비즈니스를 성장시킬 수 있습니다. 또한 여러 측정기준별로 전체 구독자 수, 수익, 유지율, 취소율을 이해하고 분석할 수 있습니다.

사용자 의견

[업데이트] 리뷰는 앱을 설치한 사용자와 직접 소통할 수 있는 소중한 채널입니다. 리뷰 분석에서 더 많은 언어를 지원하므로 리뷰에서 통계를 수집하여 앱을 개선할 수 있습니다. 업데이트된 평점을 통해 개발자의 댓글이 평점 업데이트에 미친 영향을 비롯하여 사용자가 평점과 리뷰를 어떻게 업데이트했는지 확인할 수 있습니다. 또한 리뷰 기록에서는 사용자와 나눈 대화의 기록을 확인할 수 있습니다. 마지막으로 게시 정책 가이드라인을 준수하지 않는 리뷰를 신고하는 기능도 출시될 예정입니다.


I/O 2017에서 발표된 Google Play Console 새로운 기능 세션을 시청해 보세요. 

Google Play팀에서 지금까지 준비한 모든 기능을 공개하였습니다. 새로운 기능을 모두 심층적으로 소개하고, Google Play에서 성공하는 데 도움이 될 성공 전략도 공유되었습니다. 

5월 17일, 1일 차
Play Console의 새로운 출시 관리 및 기기 타겟팅 도구: 걱정을 멈추고 Android의 다양성에 푹 빠지게 된 사연
다운되는 저품질 앱은 이제 그만! Android 및 Google Play의 도구로 고성능 앱 설계하기

5월 18일, 2일 차
앱 경량화를 위한 권장사항
Google Play의 데이터 활용하기
Google Play 앱 서명으로 앱을 안전하게 보호하고 최적화하는 방법
Google Play Console에서 Android 앱을 최적화하여 높은 사용자 유지율을 달성하는 10가지 비법

5월 19일, 3일 차
행동 통계로 사용자 유지율 높이기
Google Play에서 구독으로 더 많은 수익 창출하기
Chromebook 및 대형 화면 기기용 Android 앱
사용자 참여율 및 유지율을 높이기 위한 도구 및 도움말
Android TV: 더 많은 사용자를 확보하여 수익을 향상하는 방법

Share on Twitter Share on Facebook


Forbes는 모바일 웹사이트를 PWA로 다시 빌드했으며 휴대폰에서 사용 환경이 어떤 식으로 보일 수 있을지에 대해 재고하기 시작했습니다. 기본 사이트를 최소한으로 업데이트하는 대신, Forbes는 PWA 기술을 통합하여 앱과 같은 몰입형 환경을 제공했습니다. 이 업체는 즉각적인 향상 효과를 보았으며 사용자 참여율이 출시한 이후로 2배 넘게 증가한 것을 확인했습니다.


인도 최고의 택시 서비스 회사인 Ola는 PWA를 빌드했으며, PWA를 사용하여 택시를 예약하는 사용자 중 20%가 이전에 자사의 앱을 제거한 적이 있었다는 사실을 파악했습니다. 이 업체는 PWA를 사용하여 필요한 저장 공간을 줄임으로써 PWA가 없었다면 잃을 수 있었던 사용자의 재참여율을 효과적으로 높일 수 있었습니다.
성공사례를 하나 더 말씀드리자면, Twitter Lite를 들 수 있습니다. 이는 데이터 사용량을 최소화하는 PWA로, 불안정한 모바일 네트워크에서도 안정적으로 작동하고 기기에서 차지하는 공간이 1MB도 되지 않습니다. Twitter의 새로운 모바일 환경은 속도 측면에서도 최적화되었습니다. 실행 시간이 최대 30% 단축되었고 사이트 전체에 걸쳐 탐색 속도도 더 빨라졌습니다. Twitter는 사용자가 사이트에서 2.7배 더 많은 시간을 보내고 있으며, 그 결과 이전의 모바일 사이트에 비해 새 PWA에서 76% 더 많은 트윗을 본다는 것을 확인했습니다. 또한, Android 홈 화면에 추가된 아이콘을 통해 하루에 백만 건의 세션이 시작되는 것을 확인함으로써 재참여율이 상당히 향상된 것도 보고 있습니다.

세련된 경험

사용자는 휴대기기에서 많은 것들을 기대하죠. 그래서 우리는 지난 몇 년간 이러한 요구 사항에 부응하려고 수많은 API를 추가했습니다. 모바일 웹은 이전보다 훨씬 더 많은 사용 사례를 지원하고 훨씬 더 많은 작업을 수행할 수 있습니다. 몇 가지 주요 사항을 알려드리자면 다음과 같습니다.

도구

우리는 웹에서 참여도가 높은 환경을 빌드하는 데 사용할 수 있는 일련의 도구를 개선하고 확장하는 노력도 게을리하지 않았습니다.
Lighthouse는 웹 환경의 품질 측정에 사용할 수 있도록 자동화된 새로운 도구입니다. 이 도구는 웹 앱에 대해 거의 100번의 감사를 실행하여 페이지 성능에서 바이트 효율성, 접근성에 이르기까지 모든 사항을 검사하고 요약된 점수를 제공합니다. Chrome DevTools와의 새로운 통합으로 이제는 브라우저를 나가지 않고도 Lighthouse 감사를 실행할 수 있습니다.
Polymer 2.0은 Polymer 라이브러리의 다음 주요 릴리스로, 오늘날의 웹 플랫폼이 제공하는 최고의 새로운 기능을 활용할 수 있도록 처음부터 다시 빌드되었습니다. 이 릴리스에서는 Chrome 및 Safari에서 제공되는 새로운 Web Component API를 사용합니다. 이 릴리스는 완전히 모듈식으로 구성되었으며 최고의 성능을 제공합니다. 현재 속도는 10% 더 빨라졌으며 규모는 80% 더 작아졌습니다.
Chrome은 손쉽게 개발하고 사용자와 교류하며 웹 환경에서 번창하는 사업을 일굴 수 있도록 하기 위해 노력하고 있습니다. 최신 소식을 받아보려면 Google의 YouTube 채널을 구독하고 Twitter에서 @ChromiumDev를 팔로우하세요.
Share on Twitter Share on Facebook


5개월 전에 우리는 Google Home용 Actions on Google 개발자 플랫폼의 초기 버전을 발표했습니다. 그 이후 지금까지 잠재고객을 늘리고 플랫폼 기능을 확장하며 개발자 환경을 전반적으로 향상시키는 데 주력해왔습니다. 오늘 들려드리는 소식을 통해, 이 플랫폼을 휴대폰에 도입하고 새로운 기능을 소개하고 SDK를 향상하며 세계 각지의 Google Assistant 사용자들이 사용할 수 있는 뛰어난 앱을 개발하기 위해 계속해서 협력하고 있다는 사실을 알려드리게 되어 무척 즐겁습니다!

휴대폰에 Actions on Google 도입


12월에 이 플랫폼이 출시된 이후 FitStar 작업부터 CNBC에서 최신 뉴스를 받는 것까지, Google Home에서 창의적이고 흥미로운 앱이 개발되는 모습을 보며 참으로 뿌듯하고 신났습니다. 오늘, 우리는 Android 휴대폰과 iPhone에서 모두 Actions on Google을 Assistant에 도입할 것입니다.

이제 휴대폰에서 사용할 수 있는 Assistant용 앱을 통해, 개발자는 사용자 기반을 넓히고 의류를 쇼핑하거나 장황한 메뉴에서 음식을 주문하는 것과 같이, 음성 전용 인터페이스에 적합하지 않은 완전히 새로운 사용 사례를 위한 앱을 빌드할 기회를 가지게 됩니다. 또한, 화면으로의 이동은 사용자가 이미지 캐러셀, 목록 및 제안 칩과 같은 새로운 UI 요소를 통해 앱에서 작업을 손쉽게 수행할 수 있다는 것을 의미합니다.

오늘부터 휴대폰을 기반으로 하는 Assistant용 앱을 빌드하고 배포할 수 있습니다. 자세한 내용은 이 문서에서 확인할 수 있습니다.

또한, 조만간 영국에서 영어 버전 Actions on Google을 출시하고 올해 하반기에는 프랑스어, 독일어 및 기타 언어 버전의 Actions on Google도 출시할 예정입니다.

트랜잭션 및 결제 기능 추가

Assistant와 관련된 우리의 목표는 개발자의 작업에 도움을 주는 것입니다. 이는 단지 질문을 하거나 정보를 듣는 것만 의미하는 건 아닙니다. 또한, 구매를 쉽게 완료할 수 있도록 하고 싶습니다.

Google Assistant용 앱에서 결제 기능을 지원하는 옵션은 두 가지가 있습니다. 먼저, Google에서 지원하는 결제 기능을 사용할 수 있습니다. 이 기능은 무료이며 통합하기 쉽고 Google에서 이미 지원되는 수억 개의 카드를 활용할 수 있습니다. 또는 사용자가 이미 제공한 결제 방법을 사용할 수도 있습니다. 이 두 번째 옵션을 사용하는 경우 Google이 새롭게 제공하는 원활한 계정 링크 솔루션을 활용하는 것이 좋습니다. 이 솔루션은 사용자가 기존 계정에 로그인하거나 두 번의 탭만으로 새로운 계정을 생성할 수 있도록 지원합니다.


하지만 사용자가 결제를 마친다고 해서 트랜잭션이 끝나는 것은 아닙니다. 트랜잭션에는 주문 추적, 수정 또는 재주문과 같은 작업이 포함됩니다. 이것이 바로 Assistant가 이제 사용자가 단일 기록 뷰에서 모든 트랜잭션을 볼 수 있도록 지원하는 이유입니다. 또한, 더 쉽게 다시 참여할 수 있도록 하는 주문 업데이트 기능도 빌드했습니다. 개발자는 이 기능을 사용하여 물건을 픽업할 차량이 도착했거나 음식이 배달되었거나 처방전이 준비되었을 때와 같은 상태 업데이트를 전송할 수 있습니다.


오늘 바로 트랜잭션 앱 빌드 및 테스트 작업을 시작할 수 있으며 빠른 시일 내에 휴대폰에서 Google Assistant 사용자가 이러한 앱을 이용할 수 있게 될 것입니다.

더욱 향상된 도구 및 검색 가능성 제공

이러한 모든 새로운 기능을 활용하는 경우 기본을 아는 것이 그 어느 때보다 더 중요하며, 우리는 훌륭한 도구와 검색 가능성이 가장 염두에 두어야 할 사항이라는 점을 잘 알고 있습니다.


우리는 훌륭한 개발자 환경 제공에 투자해왔고, 오늘은 새로운 개발자 콘솔도 선보이게 되었습니다. 이 콘솔은 개발자 여러분이 팀으로 작업하고 앱 사용량, 성능 및 사용자 검색 패턴에 대한 데이터를 수집하는 데 도움이 됩니다. 이 콘솔은 앱에서 데이터를 공유하도록 Firebase 및 Google Cloud 콘솔과 통합됩니다.


뿐만 아니라, 새로운 앱 디렉토리도 선보일 예정입니다. 사용자는 Google Assistant에서 한 번만 탭하여 이 새로운 앱 디렉토리에 액세스할 수 있으며 여기에는 범주와 사용자 등급이 모두 포함되어 있습니다. 각 앱의 디렉토리 페이지도 웹에서 공유 가능하므로, 개발자는 신규 사용자와 기존 사용자를 대상으로 앱을 홍보할 수 있으며 이들 사용자가 친구들과 앱을 공유할 수도 있습니다.


이번 업데이트를 통해 사용자는 앱에 대한 단축키를 생성할 수도 있습니다. 따라서 사용자는 "Ok Google, ask Forecaster Joe what's the surf report for the Outer Bank (기상캐스터 Joe에게 Outer Banks 지역의 서핑 예보가 어떤지 물어봐줘)"라고 말하는 대신 "Ok Google, is the surf up?(파도가 높니?)"라는 식의 개인용 단축키를 말하여 손쉽게 앱에 다시 참여할 수 있습니다.


우리는 이러한 기능이 검색 가능성 향상에 도움이 될 것이라 확신하지만 그것으로 만족하지 않습니다! 시간이 지날수록 계속 새로운 기능을 추가하고 개발자가 만든 앱의 검색 가능성을 높이기 위해 끊임없이 노력할 것입니다.

Assistant SDK 업데이트

지난달 우리는 Google Assistant SDK의 프리뷰를 발표했습니다. 지금도 계속해서 여러 새로운 기능을 추가함으로써 성능을 향상시키고 있습니다.


핫워드 지원을 통해 개발자는 이제 버튼이나 기타 물리적 액션이 아니라 "Ok Google"로 트리거되는 기기를 빌드할 수 있습니다. 타이머와 알람을 모두 포함하는 기능도 추가했습니다. 따라서 사용자는 이제 Google Assistant가 기본 제공되는 모든 기기에서 "Ok Google, set a timer for 60 seconds (타이머를 60초로 설정해줘)"라고 말할 수 있습니다.


아직은 이 SDK와 플랫폼을 출시한 지 얼마 안 되는 초기 단계에 있으므로 더욱 포괄적인 개발자 환경을 만들기 위해 계속 작업 중입니다. 또한, Google Assistant SDK로 구동되는 기기를 포함하여 새로운 기기에 이 플랫폼을 도입하는 방법도 모색하고 있습니다.



새로운 개발자 경연 이벤트 발표

마지막으로 중요한 점은 최초의 Actions on Google 개발자 경연 이벤트도 시작한다는 사실입니다. 이 경연에서는 Google Assistant를 위한 최고의 앱을 선정하여 20여 개의 상을 수여할 예정이니 많이 참가해 주세요! 그러면 빌드 작업을 시작해 보세요. 개발자 여러분의 만들어낼 앱이 정말 기대됩니다.


앞으로 어떤 길이 펼쳐질지 흥미롭게 지켜볼 것이며, 여러분과 함께 새로운 Google Assistant용 앱 개발 작업을 하게 되기를 고대합니다.
Share on Twitter Share on Facebook

코틀린 시작해보기

코틀린은 자바 프로그래밍 언어를 사용한 적이 있는 개발자라면 누구나 매우 익숙하게 느껴질 겁니다. 
package helloWorld

fun main(args: Array) {
   println("Hello World!")
}
처음 보면 중괄호, 클래스, 패키지, 함수 및 메서드와 같이 익히 잘 알고 있는 요소들이 보일 것입니다. 그러나 깊이 들여다보면, 코틀린이 익숙한 개념을 기반으로 한다 하더라도 그러한 모델을 바탕으로 나름의 현대적이고 품격 있으며 실용적인 형식이라는 것을 알 수 있을 것입니다. 특히, 코틀린은 개발자의 생각과 이러한 생각을 표현하기 위해 입력해야 하는 항목 사이의 구문 충돌이 거의 없이 매우 높은 수준으로 표현할 수 있습니다. 코드를 작성할 때 "왜 내가 그렇게 해야 하지...?"라는 식의 질문을 스스로에게 해본 적이 있다면 코틀린에서는 이러한 질문 대다수에 대한 답으로 "그럴 필요가 없다!"는 것을 알게 될 것입니다.
이를테면, 단순한 클래스를 구현할 때 상용구 getter 및 setter를 잔뜩 입력해야 할 뿐만 아니라 equals(), hashCode()toString()을 재정의해야 하는 이유를 자문해 본 적이 있을 것입니다. 다음은 자바 프로그래밍 언어로 작성된 일반적인 예입니다(간략히 보여 주기 위해 아주 작은 글꼴로 표기되어 있음).
public class Customer {
   private String name;
   private String email;
   private String company;

   public Customer(String name) {
       this(name, "", "");
   }

   public Customer(String name, String email) {
       this(name, email, "");

   }

   public Customer(String name, String email, String company) {
       this.name = name;
       this.email = email;
       this.company = company;
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public String getEmail() {
       return email;
   }

   public void setEmail(String email) {
       this.email = email;
   }

   public String getCompany() {
       return company;
   }

   public void setCompany(String company) {
       this.company = company;
   }

   @Override
   public boolean equals(Object o) {
       if (this == o) return true;
       if (o == null || getClass() != o.getClass()) return false;

       Customer customer = (Customer) o;

       if (name != null ? !name.equals(customer.name) : customer.name != null) return false;
       if (email != null ? !email.equals(customer.email) : customer.email != null) return false;
       return company != null ? company.equals(customer.company) : customer.company == null;
   }

   @Override
   public int hashCode() {
       int result = name != null ? name.hashCode() : 0;
       result = 31 * result + (email != null ? email.hashCode() : 0);
       result = 31 * result + (company != null ? company.hashCode() : 0);
       return result;
   }

   @Override
   public String toString() {
       return "Customer{" +
               "name='" + name + '\'' +
               ", email='" + email + '\'' +
               ", company='" + company + '\'' +
               '}';
   }
} 
코틀린에서는 이러한 항목을 하나도 입력할 필요가 없습니다. 다음과 같이 단 한 줄이 위의 전체 클래스에 상응합니다.
data class Customer(var name: String, var email: String = "",
                    var company: String = "")

역사와 참고 자료 

코틀린은 보급된 지 꽤 되었습니다. 2011년에 발표되었으며 첫 번째 프리뷰는 2012년에 출시되었습니다. Kotlin 1.0은 2016년에 출시되었습니다. 그 버전에서 JetBrains는 앞으로도 1.0의 기능이 안정적으로 구동되도록 이전 버전과의 호환성을 유지하는 데 만전을 기했습니다. 
아주 유용한 교육 자료와 참고 자료를 https://kotlinlang.org/에서 찾을 수 있습니다. 안드로이드 팀은 몇 가지 코틀린 스니펫 작성을 빠르게 시작하는 방법으로 아주 유용한 Kotlin Koans 가이드를 찾았습니다. 자료가 기초적인 것부터 더욱 정교한 코틀린 언어로 진행되므로, 이 가이드는 단순한 주제부터 장황한 주제까지 그 범위가 다양합니다.

왜 코틀린을 사용해야 할까요?

안드로이드팀이 코틀린을 지원하기로 결정한 이유는 무엇일까요? 가장 중요한 이유는 코틀린이 Android 앱을 더욱 쉽고 즐겁게 작성할 수 있게 해줄 훌륭한 언어라고 생각하기 때문이었습니다. 
코틀린은 기존의 안드로이드 에코시스템에도 잘 맞습니다. 자바 프로그래밍 언어와도 완벽히 호환됩니다. 코틀린을 기존 코드베이스에 원하는 만큼 추가하고 동일한 프로젝트 내에서 두 언어를 자유롭게 혼용할 수 있습니다. 자바 프로그래밍 언어로 작성된 코드에서 Kotlin 코드를 쉽사리 호출할 수 있습니다. 일반적으로 자동으로 적용되는 몇 가지 변환을 통해, 개발자가 전혀 손대지 않고도 다른 방향으로 전환할 수 있습니다(예: getter 및 setter 속성 같은 항목이 자동으로 생성됨). 몇 가지 Kotlin 주석을 이용해 변환 수행 방식을 사용자설정할 수도 있습니다.
마지막으로, 아주 많은 개발자들로부터 코틀린 언어가 너무 좋다는 얘기를 들었습니다. (안드로이드 팀에서 활동하는 다수의 Google 개발자도 이와 비슷한 얘기를 했습니다.) 이미 안드로이드용 코틀린 개발자로 구성된 열광적인 커뮤니티가 운영되고 있으며, 안드로이드 팀은 일상적으로 공개 이벤트에서 코틀린 관련 질문을 다루고 있습니다. 이 안드로이드커뮤니티에서 많은 대화가 오갔고 우리는 경청했습니다.

간단히 훑어보기 

코틀린에서 흥미로운 점은 무엇인지 속속들이 알아보는 데 도움이 되도록, 여기서는 코틀린에서 특히 매력을 끄는 몇 가지에 특징에 대해 지나치게 포괄적이지는 않은 선에서 빠르게 훑어보도록 하겠습니다. 
Nullable
코틀린 컴파일러에서는 null 값을 유지할 수 있는 변수를 명시적으로 선언해야 합니다. 따라서 런타임에 더 이상 NullPointerException이 발생하지 않습니다!
var neverNull: String = "something"
var mightBeNull: String? = null // "?" indicates this can be null

if (neverNull.length > 0) {   // This is OK
    …
}

if (mightBeNull.length > 0) { // Compiler catches this error for you
    …
}
명명된 매개변수 및 기본 인수
우린 그 동안 추적해야 할 매개변수가 너무 많은 메서드를 봐왔습니다. 예를 들면 다음과 같습니다.
fun orderPizza(size: Size, pepperoni: Boolean, mushrooms: Boolean,
               ham: Boolean, pineapple: Boolean, pickles: Boolean,
               sausage: Boolean, peppers: Boolean, onion: Boolean)
{
    ...
}

// Wait… did I just order pickles on my pizza?
// Why do we even have that option?
orderPizza(Size.LARGE, true, false, false, false, true,
           false, true, false)
이를 명명된 매개변수 및 기본 인수를 사용하는 유사한 시나리오와 비교해보세요.
fun orderPizza(size: Size,
               pepperoni: Boolean = false,
               mushrooms: Boolean = false,
               ham: Boolean = false,
               pineapple: Boolean = false,
               pickles: Boolean = false,
               sausage: Boolean = false,
               peppers: Boolean = false,
               onion: Boolean = false)
{
    ...
}

orderPizza(Size.LARGE, ham = true, mushrooms = true)
결과가 엉망진창이 되지 않도록 하는 데도 도움이 되지만, 무엇보다도 훨씬 더 쉽게 읽을 수 있습니다. 또한, 작성해야 하는 오버로드된 함수 변형의 수도 줄어듭니다.
When 문
코틀린에는 임의 식에 맞출 수 있도록 하는 switch 문의 변형이 있습니다.
// Please don't put this in your app!
when {
    password.equals("password") -> println("Insecure password!")
    password.length < 4 -> println("Too short!")
    else -> {
        println("Secure password!")
    }
}
스마트 캐스트
왜 어떤 항목이 어떤 클래스의 인스턴스임을 테스트한 후 바로 이 항목을 해당 클래스로 캐스트해야 하는 걸까요? 코틀린에서는 더 이상 그렇게 할 필요가 없습니다.
if (obj is String) {
    // Compiler casts obj to a String for you.
    // (Would work with && instead of nested ifs too.)
    if (obj.length > 0) {
        …
    }
}
이는 when 문에도 일반화할 수 있는 사항입니다.
// Assume reasonable implementations of Cat and Dog
when (obj) {
   is Cat -> obj.meow(...)
   is Dog -> obj.woof(...)
   else -> {
        …
   }
}
확장 함수(Extension functions)
코틀린을 사용하면 기본적으로 새 메서드를 기존 유형으로 레트콘(retcon)할 수 있습니다. 많은 사람들처럼 여러분도 String 클래스에 toPigLatin 메서드가 있기를 바라는 경우 이제는 새 도우미 클래스를 생성하여 String을 래핑하거나 언어 위원회의 도움을 받는 데 곤란을 겪지 않고도 직접 이러한 메서드를 추가할 수 있습니다.
// The "String." prefix indicates that this method should
// extend the existing String class
fun String.toPigLatin() : String {
    ...
}

val plainOldString : String = "some text"

// Can now call toPigLatin as if were a method on String
println(plainOldString.toPigLatin())

// Or:
println("some text".toPigLatin())
분해 선언(Destructuring Declarations) 
우리는 이미 얼마나 쉽게 단순한 데이터 클래스를 정의할 수 있는지 확인했습니다.
data class Order(val itemCode: String, val quantity: Int,
                 val price: Float)
이러한 클래스 중 하나를 반환 유형으로 사용하는 함수는 여러 반환 값을 지원하는 것과 매우 흡사합니다.
fun getOrder(...): Order {
    ...
    return Order(itemCode, quantity, price);
}
이를 알아보려면 분해 선언 구문을 사용하면 됩니다. 다음 명령문은 Order 객체를 받고, 이 객체의 세 속성을 추출한 후 이를 세 변수 what, howManyhowMuch에 할당합니다. 이 작업은 모두 코틀린 컴파일러 덕분에 가능한 것이며, 이 컴파일러는 개발자 대신 올바른 유형을 추론하기도 합니다.
val (what, howMany, howMuch) = getOrder(...)
람다(Lambda)
코틀린은 강력한 기능을 갖춘 프로그래밍 패러다임을 쉽게 표현할 수 있게 해주는 매우 간결한 람다 구문을 제공합니다. 다음은 람다를 사용하여 컬렉션에 포함된 모든 항목이 String인지 테스트하는 간단한 예제입니다.
fun allStrings(collection: Collection)=
    collection.all { it is String }
이 람다 구문은 코틀린의 가장 멋진 기능 중 하나로서, 유효한 코틀린 문법을 사용하여 JSON과 유사한 구문을 사용하는 빌더를 생성할 수 있는 기능의 기본 구성 요소입니다. 이 예제는 이 주제에서 더 자세히 알아볼 수 있으며, 다음 코드 예제를 통해 어떤 것들이 가능한지 알아볼 수 있습니다.
fun generatePage(withEmphasis : Boolean) {
    val result =
        html {
            head {
                title { +"Kotlin Builders" }
            }
            body {
                h1 { +"Kotlin Builders" }
                p {
                    +"This is "
                    if (withEmphasis) b { +"really " }
                    +"interesting"
                    a(href = "https://goo.gl/rHwJio") { +"More here" }
                }
            }
        }
    println(result)
}
여기에 몇 가지 흥미로운 점이 있습니다. 첫째, 얼마나 쉽게 코틀린의 기능적 구문을 표현할 수 있는지 보여 줍니다. 이 예제에서 "html", "head", "body" 등은 모두 코틀린으로 작성된 함수이며 그 다음에 오는 중괄호로 묶인 항목은 함수 매개변수입니다. (이 스니펫에서는 HTML 태그와 일치하는 이름을 갖는 함수를 사용하여 웹페이지 표현을 빌드하지만, 당연히 개발자도 이 패턴을 사용하여 원하는 이름으로 복잡한 데이터 구조체를 빌드할 수 있습니다.) 두 번째로 흥미로운 점은 "withEmphasis" 조건부 명령입니다. 이는 코드(if (withEmphasis) …)를 데이터(모든 HTML 양식의 태그)와 혼용하는 것처럼 보일 수 있지만, 여기서 "데이터"는 실제로 코드에 훨씬 더 가깝습니다. 데이터가 모두 실제로는 코드이기 때문에 이를 통해 코틀린 언어의 전체 기능에 대한 인라인 액세스를 유지하는 동시에 선언적 구문을 사용하여 복잡한 데이터 구조체를 빌드할 수 있습니다.

시작하기

코틀린으로 작업을 시작하려면 여기서 바로 온라인으로 제공되는 코드를 이용하여 작업을 시작할 수 있습니다. 컴파일하고 실행하려면 녹색 삼각형을 누르기만 하면 됩니다.
앱에 코틀린을 사용해 보려면 다음 단계를 따르세요.
  1. Android Studio 3.0을 다운로드합니다.
  2. 기존 ".java" 파일 중 하나를 엽니다.
  3. "Code > Convert Java File to Kotlin File"을 호출합니다.
그러면 IDE가 코틀린 종속 항목을 프로젝트에 추가하는 과정을 안내한 후 기존 코드를 기능적으로 동일한 코틀린 코드로 변환합니다. (또한, IDE는 정적 메서드가 동반 객체로 전환될 때와 같이 더욱 관용적인 코틀린이 되도록 적절히 변환된 클래스에 대한 호출 사이트를 전부 손볼 수 있도록 지원합니다.)
developer.android.com에서 코틀린으로 개발을 시작하는 방법에 대한 자세한 정보를 찾아볼 수도 있습니다.
Share on Twitter Share on Facebook

게시자: Jamal Eason, Android 제품 관리자

Google I/O 2017에서 안드로이드 스튜디오 3.0 맛보기 버전이 공개되었습니다. 아직 정식 출시된 제품은 아니지만, Canary 채널에서 다운로드할 수 있습니다. 안드로이드 스튜디오는 안드로이드 앱 개발을 위해 고안된 공식 IDE 입니다. 안드로이드 스튜디오는 개발자 여러분이 보다 쉽고 효율적으로 더 훌륭한 안드로이드 앱을 만들 수 있도록 지속적으로 발전하고 있습니다.

안드로이는 3.0에서는 새로운 앱 성능 프로파일링 도구 모음이 추가되며, Kotlin 프로그래밍 언어가 지원 되고, 대형 앱 프로젝트를 위한 Gradle 빌드 속도 개선이 이루어졌습니다. 추가로, 안드로이드 인스턴트 앱 개발을 위한 도구, Google Play Store가 포함된 에뮬레이터 시스템 이미지, 안드로이드 O 개발을 위한 새로운 마법사등 안드로이드 플랫폼과 더욱 긴밀하게 통합된 기능들도 포함되었습니다. 전체적으로, 이번 첫 Canary 릴리스에는 20가지 이상의 새로운 기능이 추가되었습니다.

특히나 확장성 및 빌드 시간을 개선하기 위해 Android Gradle Plugin에 주요한 변경 사항을 도입할 필요가 있었고, 때문에 안드로이드 스튜디오 버전을 3.0으로 판올림 하게 되었습니다.

Android DevByte - Android Studio 3.0 Canary 1의 새로운 기능


안드로이드 스튜디오 3.0의 새로운 기능에 대한 보다 자세한 내용은 아래 목록을 참조하세요.

개발

  • Kotlin 프로그래밍 언어 - 수 많은 개발자분들의 요청에 따라 정식으로 Kotlin 지원이 포함되었습니다. Kotlin 코드를 기존 Android 앱 코드와 함께 사용할 수 있고, 동시에 문제없이 안드로이드 스튜디오의 모든 개발 도구를 활용할 수 있습니다. CodeConvert Java File to Kotlin File 메뉴에서 기본 제공되는 전환 도구를 사용하여 Kotlin을 프로젝트에 추가하거나 New Project 마법사를 사용하여 Kotlin 지원 프로젝트를 만들 수 있습니다. 안드로이드 및 안드로이드 스튜디오에서 지원되는 Kotlin 언어에 대해 자세히 알아보세요.

Android Studio에서 Kotlin 언어 전환

  • Java 8 언어 기능 - Java 8 언어 기능과 API에 대한 지원을 계속 강화하고 있습니다. 최근 Jack 툴체인 지원 중단과 javac 기반 툴체인으로의 마이그레이션을 통해 안드로이드 스튜디오의 Java 8 언어 기능을 사용하는 프로젝트에서도 Instant Run 기능을 활용할 수 있습니다. 새 Java 8 언어 툴체인을 지원하도록 프로젝트를 업데이트하려면, Project Structure 대화상자에서 SourceTarget 호환성 레벨을 1.8로 업데이트하면 됩니다. 자세히 알아보기.
Java 8 언어에 대한 Project Structure 대화상자 업데이트

  • Layout Editor - Layout Editor의 추가적인 개선 사항을 확인할 수 있습니다. 더욱 향상된 드래그 앤 드롭 뷰 삽입 기능이 추가되었고, 새로운 오류 패널로 구성 요소 트리가 개선되었습니다. 자세히 알아보기.
Layout Editor 구성 요소 트리 및 경고 패널


  • Adaptive Icon 마법사 - 안드로이드 O에는 특정 마스크에 따라 다양한 모양으로 표시할 수 있는 어댑티브 런처 아이콘이 도입되었습니다. 새로운 Adaptive Launcher Icon 마법사에서 새 런처 아이콘과 기존 런처 아이콘을 만들고, 어댑티브 아이콘이 어떻게 표시되는지 미리 볼 수 있습니다. 프로젝트에서 /res 폴더를 마우스 오른쪽 버튼으로 클릭하여 NewImage AssetLauncher Icons (Adaptive and Legacy)메뉴를 확인해 보세요. 자세히 알아보기.
Adaptive Icon 마법사

  • XML 글꼴 및 다운로드 가능한 글꼴 - 안드로이드 스튜디오의 XML 글꼴 미리보기 및 글꼴 선택 도구를 사용하여 훨씬 쉽게 맞춤 글꼴을 앱에 추가할 수 있습니다(안드로이드 O를 타겟팅할 때 사용 가능). 자신의 앱에 다운로드 가능한 글꼴 리소스를 만들 수도 있습니다. 다운로드 가능한 글꼴을 사용하면 글꼴 리소스를 APK에 번들할 필요 없이 앱에서 맞춤 글꼴을 사용할 수 있습니다. 다운로드 가능한 글꼴을 사용하려면 기기 또는 에뮬레이터가 Google Play 서비스 v11.2.63 이상을 실행 중인지 확인하세요. 자세히 알아보기.
다운로드 가능한 글꼴 리소스 선택기

XML 글꼴 미리보기




  • Android Things 지원 - 안드로이드 스튜디오 3.0을 사용하면 New Project 마법사 및 New Module 마법사의 새로운 템플릿 세트를 통해 Android Things를 위한 개발을 시작할 수 있습니다. Android Things를 사용하면 안드로이드 개발 지식을 사물인터넷(IoT) 기기 범주로 확장할 수 있습니다. 자세히 알아보기.

Android Things New Module 마법사 


  • IntelliJ 플랫폼 업데이트: 안드로이드 스튜디오 3.0 Canary 1에는 Java 8 언어 리팩터링, 매개변수 힌트, 시맨틱 강조표시, 드래그 가능한 중단점, 향상된 버전 제어 검색 등과 같은 기능을 지원하는 IntelliJ 2017.1 릴리스가 포함되어 있습니다. 자세히 알아보기.

빌드

  • 인스턴트 앱 지원 - 모든 개발자분들이 인스턴트 앱을 만들 수 있습니다. 인스턴트 앱은 사용자가 설치하지 않고 즉시 실행할 수 있는 간단한 안드로이드 앱입니다. 이를 지원하기 위해 Instant App과 Feature Module라는 두 가지 새로운 모듈 유형을 도입했습니다. 새로운 'Modularize' 리팩터링 액션과 App Links Assistant를 사용하면, 기존 앱을 인스턴트 앱으로 확장하는 데 도움이 될 수 있습니다. 이 기능을 사용하려면 New Module 마법사를 사용하거나 클래스를 마우스 오른쪽 버튼으로 클릭하고 RefactorModularize로 이동하세요. 자세히 알아보기.

인스턴트 앱 모듈 마법사


  • 빌드 속도 개선 - 안드로이드 앱 빌드 속도를 더욱 빠르게 만들기 위해 계속적인 투자가 이루어지고 있습니다. 이 릴리스에서는 모듈 수가 많은 프로젝트의 속도 향상에 중점을 두었습니다. 이러한 속도 향상을 달성하고 향후 개선을 뒷받침하기 위해 안드로이드 스튜디오에서 사용하는 Android Gradle 플러그인의 API가 획기적으로 변경되었습니다. 이전 플러그인에서 제공하는 API에 의존했다면 새 플러그인과의 호환성을 확인하고 해당 API를 마이그레이션해야 합니다. 테스트하려면 build.gradle 파일에서 플러그인 버전을 업데이트하세요. 자세히 알아보기.

build.gradle

dependencies {
   classpath 'com.android.tools.build:gradle:3.0.0-alpha1'
}
  • Google의 Maven 저장소 - 새 Maven 저장소에서 Android SDK Manager 이외의 안드로이드 지원 라이브러리 maven 종속성을 배포하고 있습니다. CI(Continuous Integration) 시스템을 사용하여 개발하는 경우 이를 통해 Maven 종속성 관리가 더 쉬워집니다. 최신 명령줄 SDK Manager 도구Gradle과 함께 사용하면 Google의 Maven 저장소를 통해 CI 빌드를 보다 쉽게 관리할 수 있습니다. 새로운 Maven 위치를 사용하려면 앱 모듈의 build.gradle 파일에 다음 URL을 추가하세요. 자세히 알아보기.
build.gradle
repositories {
   maven {
       url "https://maven.google.com"
   }
}



    테스트 및 디버그

    • Google Play 시스템 이미지 - 안드로이드 O 베타 버전에 대한 업데이트와 함께 Google Play Store를 포함 한 안드로이드 에뮬레이터 시스템 이미지가 추가되었습니다. Google Play Store에 번들링하면 Google Play에서 앱을 완벽하게 테스트할 수 있으며, Android Virtual Device(AVD)에서 Google Play 서비스를 편리하게 최신 상태로 유지할 수 있습니다. 실제 기기에서 Google Play 서비스 업데이트와 마찬가지로 AVD에서 동일한 업데이트를 실행할 수 있습니다.
    Android Emulator의 Google Play Store



    Android Emulator에서 Google Play 서비스 업데이트




    앱 보안과 물리적 기기와의 일관성 있는 환경을 보장하기 위해, Google Play Store가 포함된 에뮬레이터 시스템 이미지는 릴리스 키로 서명됩니다. 이는 승격된 권한을 얻을 수 없음을 의미합니다. 앱 문제해결을 돕기 위해 승격된 권한(루트)이 필요한 경우, Google 앱 또는 서비스가 포함되지 않은 안드로이드 오픈소스 프로젝트(AOSP) 에뮬레이터 시스템 이미지를 사용할 수 있습니다. 시작하려면 안드로이드 에뮬레이터 v26.1 이상, 최신 시스템 이미지 API 24 이상을 사용하고 있는지 확인한 다음 기기 정의 옆에 Google Play 아이콘이 있는 새로운 AVD를 만드세요. 자세히 알아보기.


    Google Play Store 지원이 포함된 Android Virtual Device Manager 





    • 안드로이드 에뮬레이터에서 OpenGL ES 3.0 지원 - 안드로이드 에뮬레이터의 최신 버전에서는 OpenGL ES 2.0 그래픽 성능이 획기적인 향상 되었고, 가능한 겨OpenGL ES 3.0을 지원합니다. 모든 운영체제의 최신 그래픽 카드는 OpenGL ES 2.0 가속을 지원합니다. 안드로이드 에뮬레이터에서 OpenGL ES 3.0을 사용하려면 개발 컴퓨터에 Microsoft® Windows® 또는 Linux에서 OpenGL 3.2 이상을 지원하는 호스트 GPU 그래픽 카드가 필요합니다(향후 Apple MacOS® 지원 예정). 자세히 알아보기.

    Android Emulator의 OpenGL ES 3.0


    • 안드로이드 에뮬레이터의 App Bug Reporter- 앱의 버그 기록에 도움이 되도록, 필요한 모든 구성 설정과 재현 단계를 캡처할 공간이 있는 버그 신고를 생성하는 손쉬운 방법이 추가되었습니다. 또한, 특정 에뮬레이터 버그를 안드로이드 팀과 공유하려는 경우, Android Issue Tracker에서 신속하게 버그를 생성하기 위한 링크를 추가했습니다. 이 기능을 사용하려면 Emulator Tool BarExtended ControlsHelpEmulator HelpFile a Bug로 이동하세요. 자세히 알아보기.

    Android Emulator의 앱 버그 신고


    • 안드로이드 프록시 지원 - 인터넷에 액세스하기 위해 HTTP 프록시를 사용해야 하는 사용자를 위해, 에뮬레이터에서 사용하는 프록시 설정을 관리하기 위한 사용자 인터페이스가 추가되었습니다. 기본적으로 안드로이드 에뮬레이터는 안드로이드 스튜디오의 설정을 사용하지만, 네트워크 설정에 대해 이 설정을 재정의할 수 있습니다. 구성하려면 Extended ControlsSettingsProxy로 이동하세요.
    Android Emulator 프록시 설정


    • 안드로이드 에뮬레이터의 안드로이드 웨어 회전 컨트롤 - 안드로이드 에뮬레이터에서는 이제 안드로이드 웨어 2.0 에뮬레이터 시스템 이미지용 회전 컨트롤을 지원합니다. 따라서 회전 입력 스크롤을 포함한 안드로이드 웨어 기기를 타겟팅하는 앱의 테스트가 더 쉬워졌습니다. 안드로이드 웨어를 대상으로 하는 에뮬레이터 AVD를 만들고, Extended 컨트롤 아래 Rotary Input 패널을 확인해보세요. 자세히 알아보기.

    Android Emulator의 회전 입력

    • APK 디버깅 - 안드로이드 스튜디오에서 프로젝트를 빌드하지 않고 APK만 디버깅하려는 사용자를 위해, 이제 임의의 APK를 디버깅할 수 있는 기능이 추가되었습니다. 이 기능은 특히 다른 개발 환경에서 안드로이드 C++ 코드를 개발했지만 안드로이드 스튜디오의 컨텍스트에서 APK를 디버그하고 분석하려는 사용자에게 유용합니다. 디버그 가능한 APK 버전을 보유하고 있다면 새로운 APK 디버깅 기능을 사용하여 APK를 분석, 프로파일링 및 디버그할 수 있습니다. 또한, APK 소스에 액세스 권한이 있는 경우 소스를 APK 디버깅 흐름에 링크하여 더욱 효과적으로 디버깅을 수행할 수 있습니다. Android Studio Welcome 화면이나 File → Profile or debug APK에서 Profile or debug APK를 선택하여 간단히 시작할 수 있습니다. 자세히 알아보기.

    APK 프로파일링 또는 디버그


    APK 디버깅


    • Layout Inspector - Layout Inspector에는 앱 레이아웃의 문제를 더 쉽게 디버깅할 수 있는 몇 가지 추가 기능이 있습니다. 두 가지 향상된 기능에는 속성을 공통 범주로 그룹화하는 기능의 개선과 뷰 트리 및 속성 패널의 검색 기능이 포함됩니다. 애플리케이션이 실행되는 동안 ToolsAndroidLayout Inspector를 통해 Layout Inspector에 액세스하세요. 자세히 알아보기.
    Layout Inspector


    • Device File Explorer - DDMS에서 안드로이드 스튜디오로 이식된 새로운 Device File Explorer는 안드로이드 기기 또는 에뮬레이터의 파일과 디렉토리 구조를 볼 수 있는 기능을 제공합니다. 이제 앱을 테스트하면서 안드로이드 스튜디오에서 직접 앱 데이터 파일을 빠르게 미리 보고 수정할 수 있습니다.

    Device File Explorer



    최적화

    • Android Profiler - 앱의 성능 문제를 디버깅하는 데 도움이 되는 새로운 도구 세트가 포함되어 있습니다. 이전 Android Monitor 도구 모음을 완전히 다시 작성하고, Android Profiler로 대체했습니다. 이제 실행 중인 기기 또는 에뮬레이터에 앱을 배포한 후 Android Profiler 탭을 클릭하면, 앱의 CPU, 메모리 및 네트워크 액티비티에 대한 실시간 통합 뷰를 볼 수 있습니다. 각 성능 이벤트는 터치 이벤트, 키 누름 및 액티비티 변경을 강조표시하는 UI 이벤트 타임라인에 매핑되므로, 특정 이벤트가 언제 어떻게 발생했는지 더 잘 파악할 수 있습니다.  각 타임라인을 클릭하여 앱의 각 성능 지표를 분석하세요. 자세히 알아보기

    Android Profiler - 결합된 타임라인 뷰.

    • CPU 프로파일러 - 불필요한 CPU 프로세싱 및 부하 스파이크는 앱 성능 저하의 증상입니다. CPU 프로파일러를 사용하면 샘플 또는 계측된 CPU 추적을 실행하여 애플리케이션의 CPU 스레드 사용을 분석할 수 있습니다. 이 시점에서 CPU 프로파일러에 내장된 다양한 데이터 뷰 및 필터를 사용하여 CPU 성능 문제를 해결할 수 있습니다. 자세히 알아보기.

    CPU 프로파일러


    • 메모리 프로파일러 - 메모리를 비효율적으로 사용하면 버벅거리는 UI부터 메모리 부족 상황까지 다양한 기기 문제가 발생할 수 있습니다. 메모리 프로파일러는 이전 Heap Viewer 및 Allocation Tracker의 기능을 하나의 리치 인터페이스에 결합하여 앱의 메모리 사용 문제 디버그에 도움을 줍니다. 메모리 할당, 힙 덤프 등을 분석하여 다양한 메모리 문제를 진단할 수 있습니다. 자세히 알아보기.

    메모리 프로파일러



    • 네트워크 프로파일러 - 앱에서 포그라운드 및 백그라운드 네트워크 사용을 최적화하면 앱 성능이 향상되고 앱 데이터 사용량을 줄일 수 있습니다. 네트워크 프로파일러를 사용하면 앱의 네트워크 활동을 모니터링하고 각 네트워크 요청의 페이로드를 검사한 다음 네트워크 요청을 생성한 소스 코드 줄에 다시 링크할 수 있습니다. 현재, 네트워크 프로파일러는 HttpURLConnection, OkHttpVolley 네트워크 라이브러리와 함께 작동합니다. 네트워크 프로파일러는 Run Configuration 상자의 Profiling 탭에서 Enable Advanced Profiling을 선택하여 안드로이드 O 이전 기기 및 에뮬레이터에서 사용할 수 있는 고급 분석 기능입니다. 네트워크 요청 및 페이로드 분석 사용 설정 외에도 이 확인란을 선택하면 최상위 레벨에서 이벤트 수집, 메모리 객체 카운트 및 메모리 가비지 수집을 사용 설정할 수 있습니다. 안드로이드 O 기반 기기 및 에뮬레이터의 경우, 앱을 배포하기만 하면 됩니다. 자세히 알아보기.
    네트워크 프로파일러




    Android O 이전 기기용 네트워크 프로파일러 설정


    • APK Analyzer 개선 사항 - APK 크기를 더욱 최적화할 수 있도록 APK Analyzer에 몇 가지 개선된 기능을 추가했습니다. 이 기능 업데이트를 통해 이제 인스턴트 앱 zip 파일 및 AAR을 분석하고 클래스 및 메소드의 dex 바이트코드를 볼 수 있습니다. 또한, Proguard 구성 규칙을 생성하고 Proguard 매핑 파일을 dex 뷰어에 로드할 수도 있습니다. 자세히 알아보기.

    APK Analyzer
    자세한 내용은 출시 노트를 참조하세요.

    시작하기 

    다운로드

    이전 버전의 안드로이드 스튜디오를 사용하는 경우 안정적인 버전과 함께 안드로이드 스튜디오 3.0 Canary 1을 설치할 수 있습니다. 이 업데이트는 공식 Android Studio Preview 다운로드 페이지에서 다운로드할 수 있습니다. 이 블로그에서 언급했듯이, IDE의 새로운 기능을 지원하기 위해 Gradle Plugin API가 일부 변경되었습니다. 따라서 현재 프로젝트에서 Android Gradle 플러그인 버전을 3.0.0-alpha1로 업데이트하여 앱 프로젝트 설정을 테스트하고 유효성을 검사해야 합니다.


    어떤 점이 마음에 드는지, 어떤 문제나 기능에 대해 알고 싶은지 피드백을 보내주시면 감사하겠습니다. 버그나 문제를 발견하면 언제든지 문제를 제기해 주세요. Google+ 페이지나 Twitter에서 저희 안드로이드 스튜디오 개발 팀과 계속 소통하시기 바랍니다.

    Share on Twitter Share on Facebook