Sistem sağlığı bilgilerini alma

Android 16 (veya sonraki sürümler) yüklü bir cihaz açıldığında takas moduna geçirilir. Bu mod, adb'yi kullanarak cihaza bağlanmanıza ve cihaz hakkında bilgi edinmek için komut kullanmanıza olanak tanır. Cihazın takas moduna girmesi için aşağıdaki ön koşullar karşılanmalıdır:

  • Cihaz fabrika ayarlarına sıfırlanmalıdır.
  • Cihazın hücresel hizmeti olmamalıdır.
  • Cihazın bağlantısı veya oluşturulmuş bir hesabı olmamalıdır.
  • Cihazda hata ayıklama yapılamayan bir derleme çalışmalıdır.

Kurulum sihirbazında gezindikten sonra cihaz değerlendirme moduna alınır. Bu mod, tüm adb komutlarını gerçekleştirmenize ve cihazda ek teşhisler çalıştırmanıza olanak tanır.

Genel sağlık bilgilerini toplama

Cihazınızla ilgili genel sağlık bilgileri (ör. pil, depolama alanı sağlığı ve uluslararası mobil cihaz kimliği (IMEI) numaraları) toplamak için aşağıdaki adımları uygulayın:

  1. Cihazınızın takas modu ön koşullarını karşıladığından emin olun.

  2. Cihazı bir iş istasyonuna takın.

  3. İş istasyonundan aşağıdaki komutu çalıştırın:

    adb shell tradeinmode getstatus

    Bu komut, cihazla ilgili bilgileri içeren bir JSON nesnesi döndürür. Aşağıda, Pixel 7'den alınan örnek bir çıkış gösterilmektedir:

    {
      "battery": {
        "cycle_count": 16,
        "health": 100,
        "state": 2,
        "manufacturing_date": 1653004800,
        "first_usage_date": 0
      },
      "storage": {
        "useful_lifetime_remaining": 99,
        "capacity_bytes": "128000000000"
      },
      "launch_level": 33,
      "locks": {
        "factory_reset_protection": false
      },
      "product": {
        "brand": "google",
        "device": "panther",
        "manufacturer": "Google",
        "model": "Pixel 7",
        "name": "panther"
      },
      "imeis": [
        "353644930127905",
        "353644930127913"
      ],
      "serial": "26061FDH2000AP"
    }
    

    factory_reset_protection true olarak ayarlanmışsa cihaz güvenlidir ve sıfırlanamaz. Sıfırlanamayan cihazlar değerlendirilemez.

Android OS durumunu belirleme

Android işletim sisteminin durumu hakkında bilgi edinmek için (ör. onaylanmış bir derleme olup olmadığı) aşağıdaki adımları uygulayın:

  1. Cihazı bir iş istasyonuna takın.
  2. Cihazın internet bağlantısı olduğundan emin olun.
  3. İş istasyonundan aşağıdaki komutu çalıştırın:

    adb shell tradeinmode getstatus --challenge CHALLENGE

    CHALLENGE, rastgele oluşturulan bir alfanümerik dizedir (ör. p4tRsuHjWB). Bu komut, base64 doğrulama kaydı içeren bir doğrulama alanı içeren JSON döndürür.

    Bu komut, getstatus komutu tarafından döndürülen bilgilere bir doğrulama bilgisi ekler. Onay bilgileri aşağıdaki gibi görünür:

    "attestation": {
      "certificates": "AAAC\/DCCAvgwggKeoAMCAQICAQEwCgYIKoZIzj0EAwIwOTEMMAoGA1UEDAwDVEVFMSkwJwYDVQQF\n
        EyBmOTIyZTZhOWFkZmRjNjU0NmZiOWU1YmNlNzhiMDUzMzAeFw03MDAxMDEwMDAwMDBaFw00ODAx\n
        MDEwMDAwMDBaMB8xHTAbBgNVBAMTFEFuZHJvaWQgS2V5c3RvcmUgS2V5MFkwEwYHKoZIzj0CAQYI\n
        KoZIzj0DAQcDQgAEz9un3HpDJQy\/j7l0bWzw6WnRRMjFjvu6rg7+dCzFW93u+otCPK4VjmSjyYw
        ...
    }
    

    Android 16 veya sonraki sürümlerin yüklü olduğu cihazlarda, doğrulama kaydı oluşturmak için internet bağlantısı gerekir. Kurulum sihirbazında yapıldığında başarısız olacağından, doğrulama işlemi bir bağlantı yapılandırıldıktan sonra değerlendirme modunda yapılmalıdır.

  4. Aşağıdaki yöntemlerden birini kullanarak doğrulama bilgilerini ayrıştırın:

    Örneğin, parse_tim_attestation aracını kullanmak için şu komutu çalıştırın:

    parse_tim_attestation --challenge CHALLENGE output_file

    CHALLENGE, doğrulama bilgilerini almak için kullandığınız istemle aynı olmalıdır.

    2. adımın çıktısını bir output_file dosyasına kaydettiyseniz bu dosya adını sağlayabilirsiniz. Aksi takdirde, doğrulama bilgileri stdin'den okunur.

    Android OS bilgilerini içeren bir JSON nesnesi döndürülür:

    "record": {
      "keymaster_version": "400",
      "keymaster_security_level": "TRUSTED_ENVIRONMENT",
      "attributes": {
        "imeis": [
          "353644930125669",
          "353644930125677"
        ],
        "vendor_patch_level": 20250305,
        "serial": "26161FDH2000NV",
        "os_version": 160000,
        "source": "hardware",
        "boot_patch_level": 20250305
      },
      "bootloader_locked": false,
      "verified_boot": false,
      "security_level": "TRUSTED_ENVIRONMENT"
    },
    "certificate": "verified",
    "trustworthy": "verified boot disabled"
    

    trustworthy, yes ile eşitse işletim sistemine güvenilir olarak bakılır; derleme imzalanır ve IMEI sahte değildir.

    Hem cihazda hem de ana makinede doğrulama yapmak için internet bağlantısı gerektiğini unutmayın.

Takas modunu test etme

Geliştirme sırasında, cihazınızı takas moduna düzgün bir şekilde girip çıktığından emin olmak için test etmeniz gerekir. Cihazınızın takas moduna girip çıkabilme özelliğini test etmek için aşağıdaki adımları uygulayın:

  1. Cihazı bir iş istasyonuna takın.

  2. Çalışma merkezinden cihazı takas modunda yeniden başlatın:

    adb shell tradeinmode testing start

    Cihaz yeniden başlatılır ve takas moduna girer. Takas moduna girdikten sonra dilediğiniz adb shell tradein komutunu kullanabilirsiniz.

  3. Takas modunun etkin olduğundan emin olun:

    adb shell tradeinmode testing status

    Cihaz, takas modu testinin etkin olduğunu tanımlar.

  4. Takas modundan çıkın ve tam adb erişimini geri yükleyin:

    adb shell tradeinmode testing stop

Özel kurulum sihirbazı entegrasyonu

evaluate komutu, yayın alıcısı eklenmediği sürece özel kurulum sihirbazlarına sahip cihazlarda çalışmaz. Özel kurulum sihirbazı uygulamasına yayın alıcı eklemek için:

  1. Uygulama manifestinde bir alıcıyı tanımlayın:

    <receiver android:name=".EnterEvaluationModeReceiver"
              android:exported="true"
              android:permission="android.permission.ENTER_TRADE_IN_MODE">
      <intent-filter>
        <action android:name="com.google.android.setupwizard.ENTER_TRADE_IN_MODE" />
        <category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
    </receiver>
    
  2. Aşağıdakine benzer bir yayın alıcı oluşturun:

    public class EnterEvaluationModeReceiver extends BroadcastReceiver {
      private static final String TRADE_IN_MODE_PROPERTY = "persist.adb.tradeinmode";
      private static final int TIM_EVALUATION_MODE = 2;
    
      @Override
      public void onReceive(Context context, Intent intent) {
        if (SystemProperties.getInt(TRADE_IN_MODE_PROPERTY, 0) != TIM_EVALUATION_MODE) {
          return;
        }
    
        // Check if any factory reset protection is enabled.
        // Provision the device.
        // End the setup wizard activity.
     }
    }
    

Alıcı, aşağıdaki işlemleri sırayla yapmalıdır.

  1. persist.adb.tradeinmode değerinin 2 olduğundan emin olun.
  2. Fabrika ayarlarına sıfırlama koruması veya hırsızlık karşıtı kilit olup olmadığını kontrol edin.
  3. Settings.Secure.USER_SETUP_COMPLETE ve Settings.Global.DEVICE_PROVISIONED değerlerinin 1 olduğundan emin olarak cihazın temel hazırlığını yapın.
  4. Cihazın ana ekranda olması için kurulum sihirbazı etkinliğini kapatın.

Takas modu referansı

Bu bölümde, takas modu komutlarının tümü açıklanmaktadır.

evaluate

adb shell tradeinmode evaluate

Kurulum sihirbazını, her kurulum ekranı kullanıcı tarafından manuel olarak atlanmış gibi atlayarak değerlendirme moduna girer.

Kurulum sihirbazını atladıktan sonra cihazda ek ADB komutları veya işlevsel testler çalıştırabilirsiniz.

Değerlendirme modundan çıktıktan sonra, testten elde edilen yapıların yanlışlıkla müşterilere aktarılmaması için fabrika ayarlarına sıfırlama işlemi gerçekleştirilir.

getstatus

adb shell tradeinmode getstatus [--challenge CHALLENGE]

Cihazın pil ve depolama alanı sağlığı bilgileri de dahil olmak üzere sistem bilgilerini içeren bir JSON dizesi döndürür.

Ek bir doğrulama alanı döndürmek için --challenge parametresini ve ardından rastgele oluşturulan bir alfanümerik istem anahtarını ekleyin. Önyükleyicinin durumu (kilitli veya kilidi açık) ve IMEI seri numaralarının geçerliliği gibi önemli işletim sistemi bilgilerini belirlemek için bu yanıtı ayrıştırın.

poweroff

adb shell tradeinmode poweroff

Cihazı kapatır. Cihaz etkin bir şekilde test edilmezken veya değerlendirilmezken pilin tükenmesini önlemek için bu komutu kullanın.

tekrar başlat

adb shell tradeinmode reboot

Cihazı yeniden başlatır.

test başlangıcı

adb shell tradeinmode testing start

Cihazı takas modunda yeniden başlatır. Bu komut yalnızca kurulum sihirbazında çalışır. Bu komut verildiğinde yetkilendirme atlanır ve yalnızca takas modu komutları çalışır.

Bu komut yalnızca userdebug, eng veya user derlemelerine sahip cihazlarda çalışır. user derlemesinde ro=debuggable=1 ayarlanmalıdır.

test durumu

adb shell tradeinmode testing status

Takas modu testinin etkin olup olmadığını belirtir.

Bu komut yalnızca userdebug, eng veya user derlemelerine sahip cihazlarda çalışır. user derlemesinde ro=debuggable=1 ayarlanmalıdır.

test durağı

adb shell tradeinmode testing stop

Cihazı, adb shell tradeinmode testing start komutunu vermeden önceki moduna döndürür.

Bu komut yalnızca userdebug, eng veya user derlemelerine sahip cihazlarda çalışır. user derlemesinde ro=debuggable=1 ayarlanmalıdır.

test silme

adb shell tradeinmode testing wipe

Cihazı fabrika ayarlarına sıfırlar.

Bu komut yalnızca userdebug, eng veya user derlemelerine sahip cihazlarda çalışır. user derlemesinde ro=debuggable=1 ayarlanmalıdır.

wait-until-ready

adb shell tradeinmode wait-until-ready

Takas modunun tam olarak çalışabilmesi için sistem hizmetlerinin hazır olmasını bekler. Takas modu komutlarının başarılı olduğundan emin olmak için otomasyonunuzda bu komutu kullanın.

Diğer takas modu komutlarının önüne wait-until-ready ekleyebilirsiniz. Örneğin, wait-until-ready'ün getstatus'a bağlanmış hali aşağıda verilmiştir:

adb shell tradeinmode wait-until-ready getstatus