Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

Gradle 없이 벤치마크 빌드

벤치마크 라이브러리는 Gradle 플러그인을 제공하여 Android Gradle 플러그인과 직접 통합할 수 있지만 Bazel 또는 Buck과 같은 다른 빌드 시스템에서도 벤치마크를 사용할 수 있습니다.

이 주제에서는 벤치마크 라이브러리를 사용할 때 Gradle이 아닌 빌드 시스템 구성을 설명합니다.

AndroidBenchmarkRunner

테스트 manifest의 계측 블록에서 지정하여 AndroidBenchmarkRunner 또는 서브클래스를 계측 실행기로 사용하세요.

    <instrumentation
        android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner"
        ... />
    

디버그 가능

정확하게 측정하려면 벤치마크는 디버그 가능하지 않아야 합니다. 디버그 가능 플래그가 올바르게 설정되지 않으면 라이브러리는 잘못된 결과를 보고하는 대신 오류를 발생시킵니다. 이 설정은 debuggable=true가 필요한 Android 스튜디오 프로파일러와 함께 사용하기 위해 로컬 실행 중에 전환해야 할 수 있습니다.

벤치마크는 자체 계측 APK 내에서 또는 하나의 테스트 APK에서 다른 APK를 계측하는 두 가지 방식으로 실행되도록 빌드할 수 있습니다.

자체 계측 APK

com.android.appandroidTest 디렉터리에 관한 Gradle의 출력과 같이 간단한 자체 계측 APK를 사용하면 단일 APK의 Android manifest는 디버그 가능 기능이 사용 중지되어야 합니다.

    <manifest
        package="com.example.library.test" ...>

        <instrumentation
            android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner"
            android:targetPackage="com.example.library.test"/>

        <application android:debuggable="false"/>
    </manifest>
    

테스트 APK에서 계측된 앱 APK

빌드에서 com.android.appandroidTest 디렉터리에 관한 Gradle의 출력으로 두 개의 APK 즉, 앱 APK 및 테스트 APK를 출력하는 경우 앱 APK를 debuggable=false로 설정해야 합니다. 테스트 APK의 디버그 가능 플래그는 Android OS에서 무시됩니다.

    <!-- test manifest -->
    <manifest
        package="com.example.android.app.test" ...>

        <instrumentation
            android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner"
            android:targetPackage="com.example.android.app"/>
        <!-- debuggable here ignored by OS! -->
    </manifest>

    <!-- app being tested -->
    <manifest
        package="com.example.android.app" ...>

        <application android:debuggable="false"/>
    </manifest>
    

앱 모듈 APK의 벤치마킹은 Android 스튜디오 또는 Gradle에서 지원되지 않습니다. 디버그 불가능하거나 최적화 또는 축소된 APK 변형에 의존하지만 벤치마크에서 앱 코드로의 호출을 방해하는 압축이 없는 추가 테스트 디렉터리를 지원하는 복잡성 때문입니다.

압축 및 최적화

출시 성능을 높이려면 벤치마크에 압축 및 최적화를 사용하는 것이 좋습니다. 코드 예는 벤치마크 샘플 프로젝트를 참조하세요.

적용 범위

벤치마크는 Jacoco와 같은 도구로 실행한 라이브러리 또는 DEX 맹글링 없이 적용 범위를 사용 중지한 상태로 실행해야 합니다.

이러한 이유로 벤치마크는 다른 계측 테스트와 완전히 격리된 소스 집합으로 출시 종속성과 별도로 빌드하는 것이 좋습니다. 이렇게 하면 적용 범위 유무에 관계없이 테스트를 두 번 이상 빌드하지 않아도 됩니다.

벤치마크가 의존하는 라이브러리의 디버그 변형, 특히 로컬에서 빌드된 라이브러리의 디버그 변형은 적용 범위가 사용 설정된 상태로 빌드될 수 있습니다.

실행

Gradle 없이 런타임 시 벤치마크 라이브러리를 구성하려면 지속적 통합에서 벤치마크 실행을 참조하세요.