SANATÇILAR İÇİN

Android 8.0 ve sonraki sürümlerde, ART Tooling Interface (ART TI) belirli çalışma zamanı dahili değerlerini etkiler ve profil oluşturucular ile hata ayıklayıcıların uygulamaların çalışma zamanı davranışı. Bu, dönüşüm kabiliyetini performans araçlarını kullanarak son teknoloji ürünü yerel aracılara yönelik olarak tasarlanmıştır.

Çalışma zamanı dahili öğeleri, çalışma zamanı işlemine yüklenmiş aracılara gösterilir. Bunlar, doğrudan aramalar ve geri çağırmalar yoluyla ART ile iletişim kurar. Çalışma zamanı birden fazla aracıyı destekler. Böylece, farklı dikey profil çıkarma sorunlarının ayırın. Aracılar çalışma zamanı başlangıcında sağlanabilir ( dalvikvm veya app_process çağrılır) ya da bir süreci ifade eder.

Çünkü uygulama ve çalışma zamanı davranışını enstrümantasyon ve değiştirme becerisi ART TI'ya iki güvenlik önlemi entegre edilmiştir:

  • İlk olarak, aracı arayüzünü (JVMTI) açığa çıkaran kod, eklentisidir, çalışma zamanının temel bir bileşeni değildir. Eklenti yükleniyor olabilir Bu nedenle, aracıların herhangi bir arayüzü bulması engellenebilir puan.
  • İkinci olarak, hem ActivityManager sınıfı hem de çalışma zamanı işlemi yalnızca aracıların hata ayıklaması yapılabilir uygulamalara ekleyin. Hata ayıklanabilir uygulamaların oturumu kapatıldı tarafından analiz edilip enstrümantasyon için yürütülmesi ve son kullanıcılara ulaşabilirsiniz. Google Play Store, hata ayıklaması yapılabilecek dosyaların dağıtımına izin vermiyor. Bu, normal uygulamaların (temel bileşenler dahil) enstrümanlı veya çarpıtılmış olması.

Tasarım

Araçlı bir uygulamadaki genel akış ve ara bağlantı şurada gösterilir: 1. Şekil.

Araçlı uygulamada akış ve ara bağlantı
Şekil 1. Akış ve Araçlı bir uygulamanın ara bağlantısı
'nı inceleyin.

libopenjdkjvmti ART eklentisi ART TI'yı ortaya çıkarır. ve kısıtlarını karşılayacak şekilde tasarlanan

  • Sınıf yeniden tanımı, yalnızca bir içeren Dex dosyasını temel alır. sınıf dosyaları yerine tek bir sınıf tanımını kullanabilir.
  • Enstrümantasyon ve yeniden tanımlama için Java dili API'leri test edilir.

ART TI, Android Studio profil araçlarını da destekler.

Aracı yükleme veya ekleme

Çalışma zamanı başlangıcında bir aracı eklemek için hem JVMTI eklentisi ve belirtilen aracı:

dalvikvm -Xplugin:libopenjdkjvmti.so -agentpath:/path/to/agent/libagent.so …

Çalışma zamanında bir aracı yüklenirken uygulanan güvenlik önlemleri yoktur başlatmadan önce manuel olarak başlatılan bir çalışma zamanının, olmadan yapılan değişiklikler de dahil. (Bu, ART testine olanak tanır.)

Not: Bu, normal uygulamalar (sistem dahil) için geçerli değildir. sunucu) kullanır. Uygulamalar zaten çalışan bir zigottan çatallanır. ve zigot işleminin aracıları yüklemesine izin verilmez.

Çalışmakta olan bir uygulamaya aracı eklemek için şunu kullanın: komut:

adb shell cmd activity attach-agent [process]
/path/to/agent/libagent.so[=agent-options]

JVMTI eklentisi henüz yüklenmediyse bir aracı eklediğinizde hem kitaplığını oluşturur.

Bir aracı yalnızca debuggable (uygulamanın manifest dosyasının bir parçası, android:debuggable, uygulamada true olarak ayarlandı düğüm). Hem ActivityManager sınıfı hem de ART performansı e-posta adresini kontrol eder. ActivityManager sınıfı, geçerli uygulama bilgilerini kontrol eder (PackageManager'dan türetilir) sınıf verileri) kullandığınızdan emin olun ve çalışma zamanı, mevcut durumunu kontrol ediyorsa Bu ayar, uygulama başlatıldığında ayarlanır.

Temsilci konumları

Çalışma zamanının, aracıları mevcut sürece yüklemesi gerekir. ona doğrudan bağlanıp iletişim kurabilmeyi sağlar. ART'ın kendisi bağımsızdır geldiği yeri görebilirsiniz. Dize, dlopen araması için. Dosya sistemi izinleri ve SELinux politikaları gerçek yüklemeyi sınırlandırır.

Hata ayıklaması yapılabilir bir uygulama tarafından çalıştırılabilecek aracıları yayınlamak için aşağıdakileri yapın:

  • Aracıyı, uygulamanın APK'sının kitaplık dizinine yerleştirin.
  • Aracıyı uygulama verilerine kopyalamak için run-as kullanın dizin.

API'ler

android.os.Debug alanına aşağıdaki yöntem eklendi.

/**
     * Attach a library as a jvmti agent to the current runtime, with the given classloader
     * determining the library search path.
     * Note: agents may only be attached to debuggable apps. Otherwise, this function will
     * throw a SecurityException.
     *
     * @param library the library containing the agent.
     * @param options the options passed to the agent.
     * @param classLoader the classloader determining the library search path.
     *
     * @throws IOException if the agent could not be attached.
     * @throws a SecurityException if the app is not debuggable.
     */
    public static void attachJvmtiAgent(@NonNull String library, @Nullable String options,
            @Nullable ClassLoader classLoader) throws IOException {

Diğer Android API'leri

Attach-agent komutu herkes tarafından görülebilir. Bu komut, bir JVMTI aracısını çalışan bir işleme dönüştürün:

adb shell 'am attach-agent com.example.android.displayingbitmaps
\'/data/data/com.example.android.displayingbitmaps/code_cache/libfieldnulls.so=Ljava/lang/Class;.name:Ljava/lang/String;\''

am start -P ve am start-profiler/stop-profiler komutları Insert-agent komutuna benzer.

JVMTI

Bu özellik, JVMTI API'yi temsilcilere gösterir (yerel kod). Önemli özellikler arasında şunlar bulunur:

  • Sınıf yeniden tanımlanıyor.
  • Nesne ayırma ve atık toplama izleme.
  • Şu referans ağacını izleyerek bir yığındaki tüm nesneleri yineleme nesneler'i tıklayın.
  • Java çağrısı yığınlarını inceleme.
  • Tüm ileti dizileri askıya alınıyor (ve devam ettiriliyor).

Google Etiket Yöneticisi'nin farklı sürümlerinde Android

Uyumluluk

Bu özellik, yalnızca Android 8.0'da kullanılabilen temel çalışma zamanı desteğine ihtiyaç duyar ve daha yüksek olabilir. Cihaz üreticilerinin uygulamak için herhangi bir değişiklik yapması gerekmez bu özelliği kullanabilirsiniz. AOSP'nin bir parçasıdır.

Doğrulama

CTS, Android 8 ve sonraki sürümlerde aşağıdakileri test eder:

  • Aracıların hata ayıklaması yapılabilir uygulamalara eklediği ve uygulamalardır.
  • Uygulanan tüm JVMTI API'lerini test eder
  • Aracılar için ikili arayüzün kararlı olup olmadığını test eder

Android 9 ve sonraki sürümlere ek testler eklenmiştir ve testler dahildir. bu çalışmaların CTS testlerine dahil oldular.