Auf dieser Seite wird beschrieben, wie Sie ein Nicht-Gradle-Build-System konfigurieren, wenn Sie die MicroBenchmark-Bibliothek verwenden.
Die MicroBenchmark-Bibliothek enthält ein Gradle-Plug-in zur direkten Einbindung in das Android-Gradle-Plug-in. Sie können es aber auch in anderen Build-Systemen wie Bazel oder Buck verwenden.
Instrumentierung
Verwenden Sie AndroidBenchmarkRunner
oder eine Unterklasse als Instrumentierungs-Runner. Geben Sie sie dazu im Instrumentierungsblock des Testmanifests an:
<manifest package="com.example.library.test" ...> <instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner" /> ... </manifest>
Um genaue Messungen zu erhalten, dürfen Benchmarks nicht Debug-fähig sein. Wenn Sie das debuggable-Flag nicht richtig festlegen, gibt die Bibliothek einen Fehler aus und meldet keine ungültigen Ergebnisse. Sie müssen diese Einstellung möglicherweise bei lokalen Ausführungen zur Verwendung mit Android Studio-Profilern ändern, für die debuggable=true
erforderlich ist.
Mikro-Benchmarks können auf zwei Arten erstellt werden: innerhalb eines selbst instrumentierenden APKs oder mit einem Test-APK, das ein anderes APK instrumentiert.
Selbst instrumentierende APKs
Bei einem selbstinstrumentierenden APK, das von Gradle für ein androidTest
-Verzeichnis von com.android.library
ausgegeben wird, müssen Sie „Debuggable“ im Android-Manifest des einzelnen APKs deaktivieren:
<manifest package="com.example.library.test" ...> <instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner" android:targetPackage="com.example.library.test"/> <application android:debuggable="false"/> </manifest>
App-APK, instrumentiert durch Test-APK
Wenn Ihr Build zwei APKs ausgibt – ein App-APK und ein Test-APK, als Ausgabe von Gradle für das Verzeichnis androidTest
aus dem Paket com.android.app
–, müssen Sie das App-APK auf debuggable=false
festlegen. Das Debuggable-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 Micro-Benchmarking für App-Modul-APKs. Das liegt daran, dass die Unterstützung eines zusätzlichen Testverzeichnisses komplex ist, das von einer nicht debugfähigen, optimierten oder reduzierten Variante des APKs abhängig ist, ohne dass durch die Komprimierung Aufrufe von Benchmarks in App-Code unterbrochen werden.
Minimierung und Optimierung
Wir empfehlen, für Ihre Benchmarks eine Reduzierung und Optimierung zu verwenden, um eine Leistung zu erzielen, die kurz vor der Veröffentlichung steht. Beispielcode finden Sie im Benchmark-Beispielprojekt.
Codeabdeckung
Wir empfehlen, Benchmarks mit deaktivierter Abdeckung und ohne Bibliotheks- oder DEX-Mangling durch Tools wie JaCoCo auszuführen.
Aus diesem Grund empfehlen wir, Benchmarks als Quelle von anderen Instrumentierungstests zu isolieren und mit Releaseabhängigkeiten separat zu erstellen. So vermeiden Sie, dass Tests mehrmals mit und ohne Abdeckung erstellt werden müssen.
Debug-Varianten, von denen Ihre Benchmark abhängt, (insbesondere lokal erstellte Bibliotheken), können mit aktivierter Abdeckung erstellt werden.
Tests ausführen
Sie können Ihre Tests über die Befehlszeile ausführen und die Klassen angeben, mit denen die Ausführung ausgeführt werden soll, 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 die MicroBenchmark-Instrumentierung.
Empfehlungen für dich
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Mikro-Benchmark schreiben
- Baseline-Profile erstellen {:#create-profile-rules}