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:
Empfehlungen für dich
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- MicroBenchmark schreiben
- Baseline-Profile erstellen {:#creating-profile-rules}