ग्रेडल के बिना माइक्रोबेंचमार्क बनाएं

यह पेज, माइक्रोबैंचमार्क लाइब्रेरी.

हालांकि, माइक्रोबेंचमार्क लाइब्रेरी, सीधे तौर पर इंटिग्रेट करने के लिए Gradle प्लग इन भेजती है 'Android Gradle प्लग इन' के साथ, आप इसका इस्तेमाल दूसरे बिल्ड सिस्टम में भी कर सकते है, जैसे Basel के तौर पर या बक.

इंस्ट्रुमेंटेशन

अपने इंस्ट्रुमेंटेशन रनर के तौर पर, AndroidBenchmarkRunner या सब-क्लास का इस्तेमाल करें इसे टेस्ट मेनिफ़ेस्ट के इंस्ट्रुमेंटेशन ब्लॉक में तय करके:

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

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

सटीक मेज़रमेंट के लिए, मानदंड डीबग करने लायक नहीं होने चाहिए. अगर आपको डीबग करने लायक फ़्लैग को सही ढंग से सेट न करने पर लाइब्रेरी में गड़बड़ी होती है अमान्य परिणामों की रिपोर्ट करने के बजाय. आपको इस दौरान इस सेटिंग को टॉगल करना पड़ सकता है लोकल रन, Android Studio प्रोफ़ाइलर के साथ इस्तेमाल किया जा सकता है. इसके लिए ज़रूरी है कि debuggable=true.

दो तरीकों से चलाने के लिए माइक्रोबेन्चमार्क बनाएं: अपने-आप इस्तेमाल होने वाले टूल के ज़रिए APK के लिए या ऐसा एक टेस्ट APK जिसमें दूसरे APK को इंस्टॉल किया जा रहा हो.

खुद बनने वाले APK

अपने-आप चलने वाले APK के साथ—androidTest के लिए Gradle से आउटपुट डायरेक्ट्री com.android.library की मदद से अपलोड की जा सकती है—आपको एक साथ डीबग करने की सुविधा बंद करनी होगी APK का Android मेनिफ़ेस्ट:

<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

अगर आपका बिल्ड दो APK देता है—एक ऐप्लिकेशन APK और टेस्ट APK, com.android.app पैकेज से androidTest डायरेक्ट्री—आपको ऐप्लिकेशन APK को debuggable=false. Android OS, जांच वाले APK के डीबग करने लायक फ़्लैग को अनदेखा कर देता है.

<!-- 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 और Gradle, ऐप्लिकेशन मॉड्यूल APK के लिए माइक्रोबेंचमार्किंग की सुविधा नहीं देते. ऐसा अतिरिक्त टेस्टिंग डायरेक्ट्री के साथ काम करने में दिक्कत होने की वजह से होता है, जो यह APK के ऐसे वर्शन पर निर्भर करता है जिसे डीबग नहीं किया जा सकता, ऑप्टिमाइज़ किया गया है या छोटा किया गया है. हालांकि इसमें काट-छांट करने की सुविधा की मदद से, मानदंड से मिले अनुरोधों को ऐप्लिकेशन कोड में बदला नहीं जा सकता.

कंपाइलेशन

हम परीक्षण चलाने से पहले अपने माइक्रोबेंचमार्क APK को कंपाइल करने का सुझाव देते हैं, निम्न आदेश:

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

छोटा करना और ऑप्टिमाइज़ करना

हमारा सुझाव है कि आप अपने मानदंड पाने के लिए काट-छांट करने और ऑप्टिमाइज़ेशन का इस्तेमाल करें रिलीज़ होने के करीब है. उदाहरण कोड के लिए, मानदंड सैंपल प्रोजेक्ट.

कोड कवरेज

हमारा सुझाव है कि आप ऐसे मानदंड चलाएं जिसमें कवरेज बंद हो और वह भी किसी लाइब्रेरी के बिना हो या DEX मैनजिंग करने के लिए JaCoCo जैसे टूल का इस्तेमाल करें.

इस वजह से, हमारा सुझाव है कि आप मानदंडों को अलग-अलग रखें, क्योंकि इंस्ट्रुमेंटेशन टेस्ट और रिलीज़ डिपेंडेंसी के साथ अलग-अलग बनाएं. यह इससे बिना कवरेज के और बिना कवरेज वाले, एक से ज़्यादा बार टेस्ट बनाने की ज़रूरत नहीं पड़ती.

लाइब्रेरी के उन वैरिएंट को डीबग करें जिन पर आपका मानदंड निर्भर करता है, खास तौर पर वे स्थानीय रूप से बनाया गया हो, तो मुमकिन है कि कवरेज चालू हो.

जांच करना

कमांड लाइन से जांच को चलाया जा सकता है और चलाने के लिए क्लास तय की जा सकती हैं इनके साथ, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है:

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

Gradle के बिना, रनटाइम के दौरान माइक्रोबेंचमार्क लाइब्रेरी को कॉन्फ़िगर करने के लिए, देखें माइक्रोबेंचमार्क इंस्ट्रुमेंटेशन के आर्ग्युमेंट.