SORU
2 Mart 2010, Salı


Android cihazlar iddia üzerinde kullanabilir miyim?

Android uygulamalarım anahtar kelime öykünücüsü bazı durumlarda uygulamam yok etmek için iddia, ya da test sırasında cihazımı kullanmak istiyorum. Bu mümkün mü?

Emülatör sadece benim iddia yok sayıyor gibi görünüyor.

CEVAP
6 NİSAN 2011, ÇARŞAMBA


Bu bakın: https://android.googlesource.com/platform/dalvik/ /master/docs/embedded-vm-control.html

Temelde, Dalvik VM olsa bile varsayılan olarak iddia çekleri göz ardı edilecek .dex bayt kod kontrol gerçekleştirmek için bir kod içerir. Kontrol iddialar iki şekilde açıktır:

(1) sistem ayarı özelliği "hata ayıklama."): . iddia

adb shell setprop debug.assert 1

ben doğrulanmış uygulamanızı yeniden sürece bu yaptıktan sonra beklendiği gibi çalışır, ya da

(2) gönderme komut satırı bağımsız değişkeni "--enable-iddia" için dalvik VM olan olmayabilir bir şey uygulama geliştiricilerin büyük ihtimalle yapar (biri bana doğru ben yanılıyorum eğer burada).

Temelde, ya da genel olarak, sınıf düzeyinde bir paket düzeyinde veya ilgili düzeyde iddialar sağlayan ayarlanabilir bir bayrak var. Bayrağı varsayılan olarak devre dışı olan iddia çekleri atlanır sonuç olarak.

Örnek benim Etkinlik aşağıdaki kodu yazdım:


public class AssertActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    int x = 2   3;
    assert x == 4;
  }
}

Bu kod için oluşturulan dalvik byte code (Android 2.3.3)


// Static constructor for the class
000318:                                        |[000318] com.example.asserttest.AssertActivity.:()V
000328: 1c00 0300                              |0000: const-class v0, Lcom/example/asserttest/AssertActivity; // class@0003
00032c: 6e10 0c00 0000                         |0002: invoke-virtual {v0}, Ljava/lang/Class;.desiredAssertionStatus:()Z // method@000c
000332: 0a00                                   |0005: move-result v0
000334: 3900 0600                              |0006: if-nez v0, 000c //  0006
000338: 1210                                   |0008: const/4 v0, #int 1 // #1
00033a: 6a00 0000                              |0009: sput-boolean v0, Lcom/example/asserttest/AssertActivity;.$assertionsDisabled:Z // field@0000
00033e: 0e00                                   |000b: return-void
000340: 1200                                   |000c: const/4 v0, #int 0 // #0
000342: 28fc                                   |000d: goto 0009 // -0004

: :

// onCreate() 00035c: |[00035c] com.example.asserttest.AssertActivity.onCreate:(Landroid/os/Bundle;)V 00036c: 6f20 0100 3200 |0000: invoke-super {v2, v3}, Landroid/app/Activity;.onCreate:(Landroid/os/Bundle;)V // method@0001 000372: 1501 037f |0003: const/high16 v1, #int 2130903040 // #7f03 000376: 6e20 0500 1200 |0005: invoke-virtual {v2, v1}, Lcom/example/asserttest/AssertActivity;.setContentView:(I)V // method@0005 00037c: 1250 |0008: const/4 v0, #int 5 // #5 00037e: 6301 0000 |0009: sget-boolean v1, Lcom/example/asserttest/AssertActivity;.$assertionsDisabled:Z // field@0000 000382: 3901 0b00 |000b: if-nez v1, 0016 // 000b 000386: 1251 |000d: const/4 v1, #int 5 // #5 000388: 3210 0800 |000e: if-eq v0, v1, 0016 // 0008 00038c: 2201 0c00 |0010: new-instance v1, Ljava/lang/AssertionError; // class@000c 000390: 7010 0b00 0100 |0012: invoke-direct {v1}, Ljava/lang/AssertionError;.:()V // method@000b 000396: 2701 |0015: throw v1 000398: 0e00 |0016: return-void

Dikkat statik yapıcı metot nasıl Sınıf nesnesi desiredAssertionStatus ve sınıf genelinde değişken $assertionsDisabled; ayrıca bildirim ayarlar onCreate o çağırır(), java atmak için tüm kodu.lang.AssertionError derlenmiş ama yürütme statik oluşturucu Sınıf nesnesi için ayarlanır $assertionsDisabled değerini bağlıdır.

JUnit sınıfı ağırlıklı olarak kullanılır ne birey olarak, muhtemelen bu güvenli bir bahis olduğu anlaşılıyor. İddia anahtar kelime esneklik kalkınma zamanda onaylamaları açın ve onları nakliye bit için kapatın ve düzgün bir şekilde başarısız yerine yeteneğidir.

Bu yardımcı olur umarım.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 1881 Animation

    1881 Animati

    5 EKİM 2013
  • Matt Harding

    Matt Harding

    23 Mayıs 2006
  • UlyssesForever's channel

    UlyssesForev

    28 ŞUBAT 2012