Mikro-Benchmarks ohne Gradle erstellen

Auf dieser Seite wird die Konfiguration eines Nicht-Gradle-Build-Systems mit der MicroBenchmark-Bibliothek.

Die MicroBenchmark-Bibliothek bietet zwar ein Gradle-Plug-in für die direkte Integration Android-Gradle-Plug-in verwenden, können Sie es auch in anderen Build-Systemen verwenden, z. B. wie Bazel oder Buck.

Instrumentierung

AndroidBenchmarkRunner oder eine abgeleitete Klasse als Instrumentierungs-Runner verwenden indem Sie ihn im Instrumentierungsblock des Testmanifests angeben:

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

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

Um genaue Messungen zu erhalten, dürfen Benchmarks nicht fehlerbereinigt werden. Wenn Sie das Debuggable-Flag nicht korrekt festlegt, gibt die Bibliothek einen Fehler aus, als ungültige Ergebnisse melden. Möglicherweise müssen Sie diese Einstellung für die Verwendung mit Android Studio-Profilern, für die Folgendes erforderlich ist: debuggable=true

Sie können MicroBenchmarks auf zwei Arten erstellen: in einem selbst instrumentierenden APK oder mit einem Test-APK, das ein anderes APK instrumentiert.

Selbst instrumentierende APKs

Mit einem selbst instrumentierenden APK, wie es von Gradle für ein androidTest ausgegeben wird aus dem Verzeichnis com.android.library erstellt haben. Sie müssen in den einzelnen Android-Manifest des APK:

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

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

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

Durch Test-APK instrumentiertes App-APK

Wenn Ihr Build zwei APKs ausgibt: ein App-APK und ein Test-APK, die von Gradle für das Verzeichnis androidTest aus dem Paket com.android.app. Du musst das App-APK auf debuggable=false Das Debug-fähige Flag des Test-APKs wird vom Android-Betriebssystem ignoriert.

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

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

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

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

Android Studio und Gradle unterstützen kein MicroBenchmarking eines App-Modul-APKs. Dies liegt an der Komplexität der Unterstützung eines zusätzlichen Testverzeichnisses, von einer nicht Debug-fähigen, optimierten oder komprimierten Variante des APK abhängig ist, aber ohne dass Aufrufe von Benchmarks in App-Code umgewandelt werden.

Compilation

Wir empfehlen Ihnen, Ihr MicroBenchmark-APK vor Tests zu kompilieren. Verwenden Sie dabei die Methode folgenden Befehl:

adb shell cmd package compile -f -m speed com.example.benchmark

Minimierung und Optimierung

Wir empfehlen die Reduzierung und Optimierung für Ihre Benchmarks, um die kurz vor dem Release steht. Beispielcode finden Sie in der Benchmark Beispielprojekt.

Codeabdeckung

Wir empfehlen, Benchmarks mit deaktivierter Abdeckung und ohne Bibliothek auszuführen oder DEX-Manipulation durch Tools wie JaCoCo.

Aus diesem Grund empfehlen wir, Benchmarks als Quelle von anderen Instrumentierungstests durchführen und diese separat mit Releaseabhängigkeiten erstellen. Dieses vermeidet, dass Sie mehr als einmal Tests erstellen müssen, sowohl mit als auch ohne Abdeckung.

Fehler in Varianten von Bibliotheken beheben, von denen die Benchmark abhängt, insbesondere diese kann mit aktivierter Abdeckung erstellt werden.

Tests ausführen

Sie können Ihre Tests über die Befehlszeile ausführen und die auszuführenden Klassen angeben wie im folgenden Beispiel gezeigt:

adb shell am instrument -w com.example.benchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner

Informationen zum Konfigurieren der MicroBenchmark-Bibliothek zur Laufzeit ohne Gradle finden Sie unter Argumente für Mikro-Benchmark-Instrumentierung: