Hyperion Android로 Android 애플리케이션을 디버깅하십시오.

shibuya.apk #24의 LT 내용입니다.(스포일러 했으니 오시는 분들은 그때 봐주세요.
Hyperion-Android
Hyperion Android는 Stheo, LeakCanary, DebugAlter 등과 같은 디버깅 시에만 사용할 수 있는 라이브러리
  • 디버그 메뉴를 응용 프로그램에 추가할 수 있음
  • 메뉴마다 편리하다

  • Google AutoService를 통해dependency에만 추가하면 코드를 편집하지 않은 상태에서 기능을 추가할 수 있음
  • 터미널을 흔들거나 알림을 눌렀을 때 이런 디버깅 메뉴가 나온다.

    Hyperion Android 기능 소개


    hyperion-attr


    추천도 ★
    *View의 Attribute 표시
    * Enable 등으로 전환할 수도 있습니다.

    hyperion-measurement


    추천도 ★★★
    Zeplin과 마찬가지로 View와 View 사이 및 View의 크기는 dp 단위로 관찰할 수 있습니다
    이것 을 위해 넣었다고 하지만, 아주 좋은 기능 이다
    한 번 사용하면 이게 없으면 정확한 레이아웃을 할 수 없어요.

    hyperion-shared-preferences


    추천도 ★
    Preference 값을 동적으로 변경하는 기능

    hyperion-recorder


    추천도 ★
    응용 프로그램 동작을 비디오로 저장할 수 있는 기능

    hyperion-disk


    추천도 ★
    응용 프로그램 데이터 디렉토리에 저장된 파일의 기능을 볼 수 있습니다.

    hyperion-phoenix


    추천도 ★
    애플리케이션을 재부팅하는 동안 데이터 및 캐시를 제거할 수 있는 기능

    hyperion-crash


    추천도 ★★★
    프로그램이 강제로 끝날 때 충돌 상태 로그를 표시하는 기능
    소박하고 편리하다

    타사 플러그인 Hyperion-Chuck


    추천도 ★
    jgilfelt/chuck 기능 호출 가능
    응용 프로그램에서 http 로그를 확인할 수 있습니다

    https://github.com/Commit451/Hyperion-Chuck

    hyperion-geiger-counter


    추천도
    아직 발표되지 않은 것 같지만 낙하가 감지되는 것 같아요.(샘플 프로그램에서 사용했지만 떨어진 프레임이 없어서 시도하지 않았습니다.)

    총포 메뉴 추가해주세요.


    플러그인 관리자를 모집하는 것 같아서 나눠드릴 수도 있어요.
    https://github.com/willowtreeapps/Hyperion-Android/issues

    Hyperion Android 도입을 토대로 적합한 위치 및 해결 방법 찾기


    Hyperion-Android를 넣는 데 많은 시간을 들인 점을 소개해 드리겠습니다.

    데이터 템플릿 생성 오류

    debugImplementation 'com.willowtreeapps.hyperion:hyperion-core:0.9.21'
    debugImplementation 'com.willowtreeapps.hyperion:hyperion-attr:0.9.21'
    ...
    
    README에 적힌 것처럼 dependency에 Hyperion-Android를 넣어 구축하려 할 때 자신의 환경에서 DataBinding을 생성할 수 없는 Binding 시스템에 오류가 발생했습니다.
    Hyperion이 최신 Support Library 등을 사용했기 때문입니다.
    +--- com.willowtreeapps.hyperion:hyperion-core:0.9.21
    |    +--- com.willowtreeapps.hyperion:hyperion-plugin:0.9.21
    |    +--- com.android.support:appcompat-v7:27.1.0 (*)
    |    +--- com.android.support:recyclerview-v7:27.1.0 (*)
    |    \--- com.google.dagger:dagger:2.15
    |         \--- javax.inject:javax.inject:1
    
    아래와 같이 제외해서 처리할 수 있습니다(반대로 하이퍼레이션이 잘 작동하지 않는 부분이 있을 수 있습니다)
      ["hyperion-core", "hyperion-attr", "hyperion-measurement", "hyperion-disk", "hyperion-recorder","hyperion-phoenix","hyperion-crash"].forEach {
        debugImplementation ("com.willowtreeapps.hyperion:$it:0.9.20"){
          exclude group: 'com.android.support'
          exclude group: 'com.google.dagger'
        }
      }
    

    기존의 디버그 메뉴는 어떻게 처리합니까?


    프로그램이 디버그 메뉴를 설치했다면 어떻게 처리해야 합니까?
    *기존 디버그 메뉴를 삭제하시겠습니까?
    * Plugin을 직접 만드십니까?
    * ???

    이미 있는 디버그 메뉴를 열기 위해 Plugin 만들기



    Kotlin 등의 상황에 따라 Kopt를 통해 Google AutoService에 의존합니다.
    모듈을 사용하여 다음 모듈을 만들고 debugImplementation에서 이 모듈을 참조합니다.
      implementation 'com.willowtreeapps.hyperion:hyperion-plugin:0.9.21'  
      kapt "com.google.auto.service:auto-service:1.0-rc4"
    
    다음 플러그인을 만듭니다.
    요점은 다음과 같다.
  • AutoService 사용(라이브러리로 사용) 근사
  • Plugin 클래스를 만들고 거기서 Plugin Module
  • 를 만듭니다.
  • Plugin Module 클래스에서 View를 만들어 반환
  • Plugin Module 반에는 여러 가지 편리한 방법이 있으니 시도해 볼 수 있다.
  • @AutoService(Plugin.class)
    class HelloWorldPlugin extends Plugin {
        @Override
        public PluginModule createPluginModule() {
            return new HelloWorldPluginModule();
        }
    }
    
    class HelloWorldPluginModule extends PluginModule {
        @Override
        public View createPluginView(@NonNull LayoutInflater layoutInflater, @NonNull ViewGroup parent) {
            final TextView textView = new TextView(parent.getContext());
            textView.setText("Hello Hyperion Plugin");
            textView.setTextSize(50);
            textView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.d("Hyperion", "goto debugmenu");
                }
            });
            return textView;
        }
    }
    

    플러그인을 Hyperion에 추가


    응용 프로그램 모듈에 설치할 때 개발 환경에 코드를 추가하지 않으면 안 되고main/이하에 설치하지 않으면 Google의 AutoService가 메뉴에 없는 이유를 알 수 없으므로 운영 환경에 코드를 추가하지 않으면 Hyperion은 기존 디버그 메뉴에 지시선을 추가할 수 없습니다.
    다른 모듈로 바꿀 수 있지만 그러면 그 모듈에서 응용 프로그램 내의 코드를 볼 수 없습니다.
    포스터가 나와 AutoService 없이 앱에 직접 추가할 수 있습니다!
    메뉴를 추가하기 위해 플러그인을 추가할 수 있습니다.
            PluginSource source = Hyperion.getPluginSource();
            class MyPluginSource implements PluginSource {
                private PluginSource originalPluginSource;
    
                MyPluginSource(PluginSource originalPluginSource) {
                    this.originalPluginSource = originalPluginSource;
                }
    
                @Override
                public Set<Plugin> getPlugins() {
                    final HashSet<Plugin> plugins = new HashSet<>();
                    plugins.addAll(originalPluginSource.getPlugins());
                    // ここで追加したいプラグインを指定する
                    plugins.add(new HelloWorldPlugin()); 
                    return plugins;
                }
            }
            Hyperion.setPlugins(new MyPluginSource(source));
    

    플러그인 만드는 게 귀찮아요?


    굳이 플러그인을 직접 만들지 않더라도 이걸 사용하면 간단하게 하이퍼레이션에 아이템을 추가할 수 있다.(홍보)
    https://github.com/takahirom/Hyperion-Simple-Item
    public class DebugApp extends App {
      @Override public void onCreate() {
        super.onCreate();
    
        final SimpleItem item = new SimpleItem.Builder("all: this is the title")
                .text("this is the text")
                .image(R.drawable.ic_list_black_24dp)
                .clickListener(new View.OnClickListener() {
                  @Override public void onClick(View v) {
                    Toast.makeText(App.this, "click",Toast.LENGTH_SHORT).show();
                  }
                })
                .build();
        SimpleItemHyperionPlugin.addItem(item);
    

    Pull Request 가져오기


    DridKaigi 2018 공식 애플리케이션의 가져오기 PR입니다.
    https://github.com/DroidKaigi/conference-app-2018/pull/672

    총결산


    Hyperion-Android 느낌이 좋으니 넣어보세요.
    DataBinding에 오류가 발생하면 의존 관계를 의심해 보세요.
    기존의 디버그 메뉴로 넘어갈 때 Hyperion-simple-item을 넣으세요.

    좋은 웹페이지 즐겨찾기