Ab dem 27. März 2025 empfehlen wir, android-latest-release
anstelle von aosp-main
zu verwenden, um AOSP zu erstellen und Beiträge dazu zu leisten. Weitere Informationen finden Sie unter Änderungen am AOSP.
Modulcontroller verwenden
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Jedes Suite-Modul (definiert durch AndroidTest.xml
) kann ein spezielles module_controller
-Objekt enthalten, mit dem sich das Verhalten des Moduls ändern lässt:
Ob das Modul ausgeführt werden soll oder nicht, basierend auf bestimmten Bedingungen
Implementieren Sie BaseModuleController und fügen Sie ihn der AndroidTest.xml
so hinzu:
<object type="module_controller" class="com.android.tradefed.testtype.suite.module.<NAME>" />
Der Modulcontroller wird verwendet, um anhand der public abstract RunStrategy shouldRun(IInvocationContext context);
-Implementierung zu bestimmen, ob das Modul ausgeführt werden soll oder nicht.
Ob bei Fehlern einige Protokolle erfasst werden sollen oder nicht
Wenn Sie eine vollständige Suite ausführen, können Sie auf Suiteebene die Erfassung einiger Protokolle bei Fehlern anfordern (Screenshot, Fehlerbericht, Logcat). Bei einigen Modulen ist ein bestimmtes Protokoll jedoch möglicherweise wertlos und die Erhebung kostet nur unnötig Zeit. In diesem Fall kann ein Modul explizit angeben, an welchen Protokollen es interessiert ist:
<object type="module_controller"
class="com.android.tradefed.testtype.suite.module.TestFailureModuleController">
<option name="screenshot-on-failure" value="<true OR false>" />
<option name="bugreportz-on-failure" value="<true OR false>" />
<option name="logcat-on-failure" value="<true OR false>" />
</object>
HINWEIS: Die Implementierung von Controllern sollte nach Möglichkeit generisch sein, um die Wiederverwendbarkeit zu maximieren. Das Überspringen eines Moduls aufgrund seines Zustands sollte vom Eigentümer des Moduls überprüft werden, um die Genehmigung zu erhalten, dass das Überspringen eines Moduls für ihn das richtige Verhalten ist.
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-07-27 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-07-27 (UTC)."],[],[],null,["# Employ module controllers\n\nEach suite module (defined by `AndroidTest.xml`) can contain a special\n`module_controller` object that can alter some behavior of the module:\n\nWhether to run the module or not based on some conditions\n---------------------------------------------------------\n\nBy implementing [BaseModuleController](https://android.googlesource.com/platform/tools/tradefederation/+/refs/heads/android16-release/src/com/android/tradefed/testtype/suite/module/BaseModuleController.java)\nand adding it to the `AndroidTest.xml` like this: \n\n \u003cobject type=\"module_controller\" class=\"com.android.tradefed.testtype.suite.module.\u003cNAME\u003e\" /\u003e\n\nThe module controller will be used to determine whether the module should run\nor not, based on the\n`public abstract RunStrategy shouldRun(IInvocationContext context);`\nimplementation.\n\nWhether to collect some logs or not on failures\n-----------------------------------------------\n\nWhen running a full suite, it's possible to request at the suite level the\ncollection of some logs on failures (screenshot, bugreport, logcat). But for\nsome modules, a particular log requested might not have any value and will\nsimply waste time to be collected. In that situation, a module can explicitly\nspecify which logs they are interested in: \n\n \u003cobject type=\"module_controller\"\n class=\"com.android.tradefed.testtype.suite.module.TestFailureModuleController\"\u003e\n \u003coption name=\"screenshot-on-failure\" value=\"\u003ctrue OR false\u003e\" /\u003e\n \u003coption name=\"bugreportz-on-failure\" value=\"\u003ctrue OR false\u003e\" /\u003e\n \u003coption name=\"logcat-on-failure\" value=\"\u003ctrue OR false\u003e\" /\u003e\n \u003c/object\u003e\n\nNOTE: Implementation of controllers should be generic if possible in order to\nmaximize re-usability. And skipping a module based on its condition should\nbe reviewed by the module owner to get the approval that skipping a module is\nthe proper behavior for them."]]