Sistem sağlığı bilgilerini alma

Android 16 (veya sonraki sürümler) cihazlar başlatıldığında takas moduna alınır. Bu modda, adb kullanarak cihaza bağlanabilir ve cihazla ilgili bilgi almak için komut kullanabilirsiniz. Cihazın takas moduna girebilmesi için aşağıdaki ön koşulların karşılanması gerekir:

  • Cihaz fabrika ayarlarına sıfırlanmalıdır.
  • Cihazda hücresel hizmet olmamalıdır.
  • Cihazda bağlantı veya oluşturulmuş bir hesap olmamalıdır.
  • Cihazda hata ayıklanamayan bir derleme çalıştırılıyor olmalıdır.

Takas modu, temel teşhis bilgilerini sorgulamanıza veya değerlendirme moduna girmenize olanak tanır. Değerlendirme modunda, çeşitli adb komutları çalıştırabilir ve cihazda ek teşhisler yapabilirsiniz.

Genel sağlık bilgilerini toplama

Cihazınızla ilgili genel sağlık bilgilerini (ö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 için ön koşulları 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ış verilmiştir:

    {
      "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 ayarlanırsa cihaz güvenlidir ve sıfırlanamaz. Cihaz sıfırlanamıyorsa değerlendirilemez.

Android OS durumunu belirleme

Android işletim sisteminin durumuyla ilgili (ör. onaylı bir derleme olup olmadığı) bilgi toplamak için 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, p4tRsuHjWB gibi rastgele oluşturulmuş bir alfanümerik dizedir. Bu komut, base64 onay kaydı içeren bir onay alanı da dahil olmak üzere JSON döndürür.

    Bu komut, getstatus komutu tarafından döndürülen bilgilere bir onay 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, onay kaydı oluşturmak için internet bağlantısı gerekir. Onay, kurulum sihirbazında gerçekleştirildiğinde başarısız olduğundan bağlantı yapılandırıldıktan sonra değerlendirme modunda yapılmalıdır.

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

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

    parse_tim_attestation --challenge CHALLENGE output_file

    CHALLENGE, onay bilgilerini almak için kullandığınız zorlukla aynı olmalıdır.

    2. adımın çıktısını output_file olarak kaydettiyseniz bu dosya adını sağlayabilirsiniz. Aksi takdirde, onay bilgileri stdin'den okunur.

    Android işletim sistemi 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 değerine eşitse işletim sisteminin güvenilir olduğu kabul edilir. Derleme imzalanır ve IMEI sahte değildir.

    Hem cihazda hem de ana makinede onaylama işlemini gerçekleştirmek için internet bağlantısı gerektiğini unutmayın.

Takas modunu test etme

Geliştirme sırasında, cihazınızın takas moduna doğru şekilde girip çıktığından emin olmak için cihazınızı test etmeniz gerekir. Cihazınızın takas moduna girme ve bu moddan çıkma özelliğini test etmek için aşağıdaki adımları uygulayın:

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

  2. İş istasyonundan 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 herhangi bir 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ı eklenmediği sürece özel kurulum sihirbazı olan cihazlarda çalışmaz. Özel kurulum sihirbazı uygulamasına yayın alıcısı eklemek için:

  1. Uygulama manifestinde bir alıcı bildirin:

    <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ısı 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ı kilitlerin bulunmadığını kontrol edin.
  3. Cihazın temel hazırlığını yapın. Settings.Secure.USER_SETUP_COMPLETE ve Settings.Global.DEVICE_PROVISIONED'nin 1 olduğundan emin olun.
  4. Cihazın ana ekrana gelmesi için kurulum sihirbazı etkinliğini kapatın.

Takas modu referansı

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

evaluate

adb shell tradeinmode evaluate

Her kurulum ekranı kullanıcı tarafından manuel olarak atlanmış gibi kurulum sihirbazını 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 kalan hiçbir öğenin yanlışlıkla müşterilere aktarılmaması için fabrika ayarlarına sıfırlama işlemi yapılır.

getstatus

adb shell tradeinmode getstatus [--challenge CHALLENGE]

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

Ek bir onay alanı döndürmek için --challenge parametresini ve ardından rastgele oluşturulmuş bir alfanümerik zorluk anahtarını ekleyin. Bu yanıtı ayrıştırarak önemli işletim sistemi bilgilerini (ör. önyükleyici durumu [kilitli veya kilidi açık] ve IMEI seri numaralarının geçerliliği) belirleyin.

poweroff

adb shell tradeinmode poweroff

Cihazı kapatır. Cihaz etkin olarak test edilmediği veya değerlendirilmediği sırada pilin boşalmasını önlemek için bu komutu kullanın.

tekrar başlat

adb shell tradeinmode reboot

Cihazı yeniden başlatır.

testin 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 derlemelerinin yüklü olduğu cihazlarda çalışır. user derlemesinde ro=debuggable=1 ayarlanmış olmalıdır.

test durumu

adb shell tradeinmode testing status

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

Bu komut yalnızca userdebug, eng veya user derlemelerinin yüklü olduğu cihazlarda çalışır. user derlemesinde ro=debuggable=1 ayarlanmış olmalıdır.

testi durdurma

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 derlemelerinin yüklü olduğu cihazlarda çalışır. user derlemesinde ro=debuggable=1 ayarlanmış olmalıdır.

test temizleme

adb shell tradeinmode testing wipe

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

Bu komut yalnızca userdebug, eng veya user derlemelerinin yüklü olduğu cihazlarda çalışır. user derlemesinde ro=debuggable=1 ayarlanmış olmalı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ı olmasını sağlamak için bu komutu otomasyonunuzda kullanın.

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

adb shell tradeinmode wait-until-ready getstatus