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:
Cihazınızın takas modu için ön koşulları karşıladığından emin olun.
Cihazı bir iş istasyonuna takın.
İş 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:
- Cihazı bir iş istasyonuna takın.
- Cihazın internet bağlantısı olduğundan emin olun.
İş 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.
Aşağıdaki yöntemlerden birini kullanarak onay bilgilerini ayrıştırın:
- AOSP'yi oluştururken oluşturulan
parse_tim_attestation
aracını kullanın. - Android anahtar tasdik kitaplığı kullanı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.
- AOSP'yi oluştururken oluşturulan
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:
Cihazı bir iş istasyonuna takın.
İş 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.Takas modunun etkin olduğundan emin olun:
adb shell tradeinmode testing status
Cihaz, takas modu testinin etkin olduğunu tanımlar.
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:
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>
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.
persist.adb.tradeinmode
değerinin2
olduğundan emin olun.- Fabrika ayarlarına sıfırlama koruması veya hırsızlık karşıtı kilitlerin bulunmadığını kontrol edin.
- Cihazın temel hazırlığını yapın.
Settings.Secure.USER_SETUP_COMPLETE
veSettings.Global.DEVICE_PROVISIONED
'nin1
olduğundan emin olun. - 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